このAnsibleシリーズで変数について説明しました。 変数は、多くのプログラミング言語と同じように、本質的に値を表すキーです。
有効な変数名を構成するものは何ですか?
変数名には、文字、数字、アンダースコア、または2つまたはすべての組み合わせが含まれます。 ただし、変数名は常に文字で始まる必要があり、スペースを含めるべきではないことに注意してください。
有効で受け入れられない変数名の例をいくつか見てみましょう。
有効な変数名の例:
football foot_ballfootball20 foot_ball20
無効な変数名の例:
foot ball20 foot-ball
変数の種類について説明しましょう:
脚本変数
脚本変数は非常に簡単で簡単です。 脚本で変数を定義するには、変数をインデントで書く前にキーワードvarsを使用するだけです。
変数の値にアクセスするには、引用符で囲まれた二重中括弧の間に配置します。
この単純なプレイブックの例:
- hosts: all vars: greeting: Hello world! tasks: - name: Ansible Basic Variable Example debug: msg: "{{ greeting }}"
上記のプレイブック、挨拶の変数に置換した値によこんにちは。 プレイブックが実行されたとき。 のプレイブック作のメッセージこんにちは。 実行されたとき。
さらに、次のように変数のリストまたは配列を持つことができます。
以下のplaybookはcontinentsという変数を示しています。 変数は5つの異なる値–大陸名を保持しています。 これらの各値は、インデックス0を最初の変数として使用して簡単にアクセスできます。
以下のプレイブックの例は、アジア(インデックス1)を取得して表示します。
変数リストは、次のように同様に構造化できます:
vars: Continents:
リスト上のすべての項目を一覧表示するには、with_itemsモジュールを使用します。 これにより、配列内のすべての値がループされます。
Ansible変数の別のタイプは辞書変数です。
辞書変数は、プレイブックでさらにサポートされています。 辞書変数を定義するには、単に辞書変数名のすぐ下にキーと値のペアをidentします。上記の例では、vlanはディクショナリ変数であり、idとportはキーと値のペアです。
port_idの場合、変数ではなくテキストで値を開始するため、中括弧を囲むために引用符は必要ありません。
特殊変数
Ansibleは、Jinja2テンプレートおよびplaybookで参照できるが、ユーザーが変更または定義することはできない定義済み変数のリストを提供します。
まとめて、Ansibleの定義済み変数のリストはAnsibleファクトと呼ばれ、これらはplaybookが実行されるときに収集されます。
すべてのAnsible変数のリストを取得するには、以下に示すようにAnsible ad-hocコマンドのsetupモジュールを使用します:
# ansible -m setup hostname
これにより、次のようにJSON形式で出力が表示されます:
# ansible -m setup localhost
出力から、Ansible特殊変数の例のいくつかが含まれていることがわかります。
他にも多くのAnsible特殊変数がありますこれらはほんの一例です。
これらの変数は、次のようにJinja2テンプレートで使用できます。
インベントリ変数
最後に、リストにはAnsibleインベントリ変数があります。 インベントリは、Ansibleによって管理されるすべてのホストを含むINI形式のファイルです。
インベントリでは、ホストシステムに変数を割り当て、後でプレイブックで使用することができます。
web_server_1 ansible_user=centos http_port=80web_server_2 ansible_user=ubuntu http_port=8080
上記は、次のようにplaybook YAMLファイルで表すことができます:
--- web_servers: web_server_1: ansible_user=centos http_port=80web_server_2: ansible_user=ubuntu http_port=8080
ホストシステムが同じ変数を共有している場合は、インベントリファイル内に別のグループを定義して、面倒なことを少なくし、不要な繰り返しを避例えば
:
web_server_1 ansible_user=centos http_port=80web_server_2 ansible_user=centos http_port=80
上記は次のように構成することができます:
web_server_1web_server_2ansible_user=centoshttp_port=80
playbook YAMLファイルでは、これは次のように定義されます:
--- web_servers: hosts: web_server_1: web_server_2: vars: ansible_user=centos http_port=80
ansible Facts
playbookを実行するとき、Ansibleが行う最初のタスクはsetupタスクの実行です。 私はあなたが出力に遭遇したに違いないと確信しています:
TASK: *********
Ansibleファクトは、接続したリモートノードに関するシステムプロパティまたは情報に過ぎません。 この情報には、システムアーキテクチャ、OSバージョン、BIOS情報、システムの時刻と日付、システムの稼働時間、IPアドレス、ハードウェア情報が含まれます。
任意のシステムに関する事実を取得するには、以下のコマンドに示すようにsetupモジュールを使用するだけです:
# ansible -m setup hostname
例えば:
# ansible -m setup database_server
これにより、次のようにJSON形式で大量のデータセットが出力されます:
Ansible factsは、オペレーティングシステムに応じて、どのソフトウェアパッケージをインストールする必要があるか、どのように構成するかなど、シス
カスタムファクト
Ansibleが収集できる独自のカスタムファクトを作成できることも知っていましたか? はい、できます。 それでは、どのようにそれについて行くのですか? のは、ギアをシフトし、どのように見てみましょう。最初のステップは、/etc/ansible/factsを作成することです。管理対象ノードまたはリモートノード上のdディレクトリ。
このディレクトリの中に、.fact
拡張子を持つファイルを作成します。 このファイルは、playbookがAnsible controlノードで実行されたときにJSONデータを返します。
date_timeというカスタムファクトファイルの例を次に示します。日付と時刻を取得する事実。
# mkdir -p /etc/ansible/facts.d# vim /etc/ansible/facts.d/date_time.fact
その中に次の行を追加します。
#!/bin/bashDATE=`date`echo "{\"date\" : \"${DATE}\"}"
ファイルを保存して終了します。
実行権限を割り当てます:
# chmod +x /etc/ansible/facts.d/date_time.fact
ここで、check_dateというansibleコントロールノードでplaybookを作成しました。yml。
---- hosts: webservers tasks: - name: Get custom facts debug: msg: The custom fact is {{ansible_local.date_time}}
ファクトファイルをansible_local変数に追加します。 Ansible_localには、すべてのカスタムファクトが格納されます。
今度はplaybookを実行し、factファイルに保存されている情報を取得するAnsibleを観察します:
# ansible_playbook check_date.yml
結論
これで、Ansible変数とファクトの操作に関するこのチュートリアルの最後に進みます。