Ansibleプレイブック内でグローバル変数を宣言するにはどうすればよいですか。私はグーグルで検索し、以下の解決策を見つけましたが、期待通りに機能していません。
- hosts: all
vars:
prod-servers:
- x.x.x.x
- x.x.x.x
- hosts: "{{prod-servers}}"
tasks:
- name: ping
action: ping
上記のコードを試すと、変数prod-servers
は未定義です。
プレイ内からプレイブックレベルでアクセス可能な変数(グローバル変数)を定義できません。
Ansibleには3つの主なスコープがあります。
グローバル:これは、設定、環境変数、およびコマンドラインによって設定されます
Play:各プレイと含まれる構造、varsエントリ(vars; vars_files; vars_Prompt)、ロールのデフォルトとvars。
ホスト:インベントリ、include_vars、ファクト、または登録済みタスクの出力など、ホストに直接関連付けられている変数
したがって、play内で宣言するものはすべて、play変数または(Host)ファクトのいずれかになります。
hosts
宣言で使用できる変数を定義するには:
ansible-playbook
と--extra-vars
オプションを使用して、引数に値を渡します。または同じ機能を実現するには(前のプレイ内から、プレイを実行するホストを決定します):
あなたが望んでいるように見えるのはインベントリです( http://docs.ansible.com/ansible/latest/intro_inventory.html )、それはあなたが製品サーバーであるかもしれないIPの静的リストを持っているようです(またはdevなど)、静的なインベントリを作成できます。
2番目の演劇では、IPのリストをホストとして使用してタスクを実行しますが、これはAnsibleが期待するものではありません。プレイ宣言の「hosts」キーワードの後に、Ansibleはインベントリからグループ名を期待します。
Opossiteでprodサーバーが随時変更される場合は、動的インベントリを作成する必要がある場合があります。 https://github.com/ansible/ansible/tree/devel/contrib/inventory の例を見ることができます(たとえば、AmazonのEC2に基づく動的インベントリの例やvsphere)
よろしく