web-dev-qa-db-ja.com

Ansible:Playbook内でグローバル変数を宣言する方法は?

Ansibleプレイブック内でグローバル変数を宣言するにはどうすればよいですか。私はグーグルで検索し、以下の解決策を見つけましたが、期待通りに機能していません。

- hosts: all
  vars:
    prod-servers:
     - x.x.x.x
     - x.x.x.x


- hosts: "{{prod-servers}}"
  tasks:
  - name: ping
    action: ping

上記のコードを試すと、変数prod-serversは未定義です。

9
Shibankar

プレイ内からプレイブックレベルでアクセス可能な変数(グローバル変数)を定義できません

変数スコープ

Ansibleには3つの主なスコープがあります。

  • グローバル:これは、設定、環境変数、およびコマンドラインによって設定されます

  • Play:各プレイと含まれる構造、varsエントリ(vars; vars_files; vars_Prompt)、ロールのデフォルトとvars。

  • ホスト:インベントリ、include_vars、ファクト、または登録済みタスクの出力など、ホストに直接関連付けられている変数

したがって、play内で宣言するものはすべて、play変数または(Host)ファクトのいずれかになります。


hosts宣言で使用できる変数を定義するには:

  • 実行ansible-playbook--extra-varsオプションを使用して、引数に値を渡します。

または同じ機能を実現するには(前のプレイ内から、プレイを実行するホストを決定します):

7
techraf

あなたが望んでいるように見えるのはインベントリです( 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)

よろしく

0
Jordi Molina