Python、Java、C、C ++、またはその他のプログラミング言語でプログラミングを行ったことがある場合、変数はエイリアンではありません。プログラミング言語と同様に、Ansibleの変数は値を格納するために使用されます。
Ansibleでは、変数は、このチュートリアルで後で説明するように、Playbook、テンプレート、およびインベントリで非常に必要とされる柔軟性を提供します。組み込み変数を使用して、ホスト名、システムアーキテクチャ、インターフェイスなどのシステム情報を提供できます。変数を使用して、文字列を置き換えたり、ループ内で特定の値のセットをループしたりすることもできます。
有効な変数名は次の文字で構成されています
- 手紙
- 数字
- アンダースコア
- 上記のいずれか2つまたはすべての組み合わせ
変数は常に文字で始まる必要があり、スペースを含めるべきではありません。
受け入れ可能な変数名の例は次のとおりです。
- ターンテーブル
- turn_table
- turntable01
- turntable_01
以下の名前は有効な変数名として適格ではありません
- ターンテーブル
- ターンテーブル
- 01ターンテーブル
- 01
次に、Ansibleの変数のさまざまなユースケースを見てみましょう
プレイブックの変数
ご存知のように、プレイブックは、リモートシステムで実行されるプレイまたはタスクのコレクションです。プレイブックでは、変数はタスクの実行方法を決定するのに便利です。プレイブックの変数に値を割り当てるのは非常に簡単で簡単です。
varsを呼び出すことから始めます 次に、キーワードで変数名を呼び出し、その後に示されている値を呼び出します。
--- --hosts:all vars:salutations:Hello guys!タスク:-名前:Ansible変数の基本的な使用法デバッグ:msg: "{{salutations}}"
上記のプレイブックでは、変数名は salutations 値はHelloworld!です。 プレイブックが実行されると、上記のように中括弧の間に変数を配置することにより、プレイブックの値にアクセスします。実行されると、プレイブックは「こんにちはみんな」というメッセージを出力します ’をターミナルに表示します。
配列を含む変数
以下の構文に示すように、配列を使用して変数に割り当てることができます。
vars:
配列名:
– value1
– value2
たとえば、以下のプレイブックには、studentsという変数に格納されている5人の学生名の配列が含まれています。インデックスを使用して生徒の名前にアクセスできます(他のプログラミング言語の配列の場合と同様)。たとえば、配列リストから「Arthur」という名前を取得するには、以下に示すように、students[2]の構文を使用します。
-ホスト:すべての変数:学生:-マーク-メリサ-アーサー-ケビン-リサタスク:-名前:Ansibleリスト変数デバッグ例:msg: "{{students [2]}}"
辞書付きの変数
配列リストから、辞書リストと呼ばれるものを形成するキーと値のペアを使用して、各エントリをさらに定義できます。構文を以下に示します
vars:
配列名:
dictionary_name1:
value1:itemvalue1
value2:itemvalue2
dictionary_name2:
value1:itemvalue1
value2:itemvalue2
前の例を使用すると、以下の辞書リストを作成できます
-ホスト:すべてのvars:学生:-マーク:都市:メルボルン住所:0045-0987-8642-アンヘレス:pre都市:シドニー辞書にアクセスするには、以下のタスクを追加するだけです
タスク:-デバッグ:var:学生
インベントリファイルの変数
同様の属性または値を共有する異なるホストシステムがある場合は、グループ変数と呼ばれるものを定義できます。これらは、すべてのホストに共通の属性を割り当てるために使用されます。
例:
2つのWebサーバーがあると仮定します: webserver_1 およびwebserver_2 どちらもポート443をリッスンしており、そのntpサーバーはus.pool.ntp.orgです。インベントリファイルは次のように表示されます:
[web_servers] webserver_1webserver_2 [web_servers:vars] http_port =443ntp_server =us.pool.ntp.orgYAMLプレイブックファイルでは、これは次のように表されます
web_servers:hosts:web_server_1:web_server_2:vars:http_port =80 ntp_server =us.pool.ntp.org最初のセクションでは、 webserver_1であるリモートホストを定義します およびwebserver_1 、2番目のセクションでは、2つのサーバー間の共通の属性をグループ化します。これは、複数のホストシステムに共通する変数を適用するための非常に便利な方法です。
ホスト変数とグループ変数
インベントリファイルで変数を指定することはできますが、標準的な方法では、インベントリファイルに変数を保存することはお勧めしません。ここで、ホストとグループの変数ファイルが登場します。
ホスト変数ファイルでは、変数はインベントリファイル内の1つのホストシステムにのみ適用されます。ホスト変数ファイルは通常、 host_varsに保存されます 通常は/etc / ansible /で指定されるディレクトリ パス。
以下のインベントリファイルについて考えてみます。ここには、それぞれ異なるntpサーバーを使用する2台のサーバーがあります
[web_servers] webserver_1 ntp_server =uk.pool.ntp.orgwebserver_2 ntp_server =de.pool.ntp.orgインベントリファイルで変数ntp_serverを指定する代わりに、host_varsディレクトリに2つのホスト変数ファイルを作成します。ファイル名はホストシステムの各ホスト名と一致します。
#vim /etc/ansible/host_vars/webserver_1---ntp_server=uk.pool.ntp.org# vim /etc/ansible/host_vars/webserver_2---ntp_server=de.pool.ntp.org>ホストシステムが同じ値を共有している場合は、 group_varsにグループ変数ファイルを作成します ディレクトリ。グループ変数ファイル名は、ホストのグループと一致する必要があります
以下のインベントリファイルを検討してください
[web_servers] webserver_1webserver_2 [web_servers:vars] ansible_user =rootansible_port =222番目のセクションは、示されているようにgroup_varsディレクトリー内のファイルとして定義できます。これは/etc/ansibleディレクトリにあるはずです。ファイルの名前はグループ名と同じである必要があることに注意してください。
#vim / etc / ansible / group_vars / web_servers --- ansible_user =rootansible_port =22ここでは、web_serversと呼ばれるグループのすべてのホストが変数にアクセスできます。
AnsiblePlaybookの特別な変数
変数の別のカテゴリは、特殊変数です。これらは組み込みの変数であり、ユーザーが設定することはできず、Ansibleは常にオーバーライドします。一意のシステム変数名のリストを取得するには、コマンドを実行します
#ansible -m setup hostname
このような特別な変数の例は次のとおりです。
- ansible_all_ipv4_addresses
- ansible_architecture、
- ansible_bios_version、
- ansible_os_family、
- ansible_distribution、
これにより、出力がJSON形式で表示されます
#ansible -m setup localhost
柔軟性と使いやすさにより、変数はプレイブックとインベントリファイルの両方で典型的な目的を果たします。不必要な繰り返しを避け、システム管理者の作業をはるかに楽にします。
また読む: AnsiblePlaybookでループを使用する方法
また読む :AnsibleVaultを使用して機密データを保護する方法