Ansibleを使用すると、ユーザーは、Ansibleプレイブックのコンテンツを変更せずに、Ansibleプレイブックを実行しながら外部入力を受け入れる柔軟性を得ることができます。これは、追加の変数をAnsibleプレイブックに渡す機能を介して実行できます。この機能は、AnsibleCLIまたはAnsibleTowerを使用している場合に利用できます。
なぜ余分な変数があるのですか?
プレイブックまたは変数ファイルですべての変数と値を宣言できるのに、なぜ変数をAnsibleプレイブックに渡す必要があるのですか?これは、Ansibleで追加のvarsオプションを使用する概念を説明したときに受け取った最近の質問です。
次のようなシナリオに遭遇すると、答えは明白になります。
- 変数の値を変更したい場合はどうしますか?プレイブックまたは変数ファイルを編集しますか?
- Ansibleプレイブックを実行するたびに変数に異なる値を使用する場合はどうしますか?
- プレイブックを実行しているときにのみ一部の変数の値を使用する場合はどうしますか?
これらの質問は表面的なものにすぎませんが、柔軟性を求めている場合は、Ansibleの追加 可変機能は、これらのソリューションのほとんどにとって最良の答えです。次のユースケースでは、追加の変数を使用してAnsibleプレイブックに柔軟性を追加する方法を説明しています。
ホストをハードコーディングすることは悪い考えです
たとえば、特定のホストセットで実行され、それらのホストを:webgroupというラベルの付いたグループに設定するAnsibleプレイブックを作成します。 Ansible Playbookのテストを完了すると、本番環境で使用できるようになります。
残念ながら、運用チームまたはエンジニアは、 appgroupと呼ばれる別のホストグループでこのプレイブックを実行する必要があります。 。 Ansibleプレイブック内でホストグループ名を明示的にハードコーディングすることで、Ansibleプレイブック自体の変更を必要とする柔軟性を制限しました。
この問題を解決するためのより良い方法は何ですか?
--extra-varsパラメーターを使用し、ホストを宣言するときに変数(ノードなど)を取得するようにAnsibleプレイブックを変更します。次の例はそれを示しています:
- hosts: "{{ nodes }}"
vars_files:
- vars/main.yml
roles:
- { role: geerlingguy.apache }
ノードに値を渡すには 、--extra-vars
を使用します または-e
以下に示すように、Ansibleプレイブックの実行中のオプション。
# ansible-playbook myplaybook.yaml --extra-vars "nodes=webgroup”
## Or
# ansible-playbook myplaybook.yaml --extra-vars "nodes=appgroup”
これにより、ハードコードされたホストに対して誤ってPlaybookを実行することを回避できます。 Ansibleプレイブックでホストを指定できない場合 実行中、Ansibleはエラーをスローして停止し、ノードの値がありませんと言います。 。
Ansibleロールの外部から変数を制御する
Ansibleの役割は、Ansibleコードの再利用を簡素化する目的で作成されたテンプレート、ファイル、変数、モジュール、ハンドラー、およびタスクのコレクションです。
Ansibleロールディレクトリ構造内では、次のディレクトリ内に2種類の変数があります。
- defaults / main.yml -ロールの目的の使用法に基づいてカスタマイズできるロールの変数が含まれています。
- vars / main.yml -変更することを意図していない役割の変数が含まれています。
*--extra-varsはvars/main.yml変数よりも優先順位が高いため、-extra-varsパラメーターを使用して変更できます。変更可能な変数はdefaults/main.yml
に存在する必要があります
--extra-vars
を使用して変数値を設定できます 。
たとえば、以下のようにApacheインストールで別のポートを使用します(変数がdefaults / main.yml内で定義されていると仮定します):
# ansible-playbook deploy-apache.yaml --extra-vars “apache_listen_port=8080”
渡す値が複数ある場合は、次のことを試してください:
# ansible-playbook deploy-apache.yaml --extra-vars “apache_listen_port=8080 apache_listen_port_ssl=443”
スペースを含む変数を渡す方法は?
追加の変数として渡すには、スペースを含む文字列値に引用符を追加する必要があります。
# ansible-playbook deploy-apache.yaml --extra-vars "apache_ssl_protocol='All -SSLv2 -SSLv3'"
まとめ
[Ansibleについてもっと知りたいですか? RedHatから無料の技術概要コースを受講してください。 Ansible Essentials:自動化の技術概要のシンプルさ。 ]
これは、変数をAnsibleプレイブックに渡す方法に関するさまざまなオプションのほんの一瞥です。 JSONや外部変数ファイルを使用するなど、変数をAnsibleプレイブックに渡すその他の方法については、Ansibleドキュメントサイトをご覧ください。