2016-11-23 7 views
1

複数のイーサネット接続をプロビジョニングするためのプレイブックを作成する必要があります。テンプレートの可能なネストされた変数

テンプレート内のネストされた変数の混合をファクトとユーザー変数から取得するにはどうすればよいですか?

まさに私は、たとえばことが必要になります。hosts_varsでそのように定義された

{{ ansible_{{ net1 }}.macaddress }} 
{{ ansible_{{ net2 }}.macaddress }} 

変数net1net2など:

net1: eth0 
net2: br0 

は、それがすべてで可能ですか?答えがイエスならば、どうですか?

答えて

1

これを行うにはいくつかの方法があります。

タスク変数を使用するか、辞書構文を使用して変数にアクセスできます。 test.orgため

- hosts: test.org 
    tasks: 
    - debug: 
     var: "{{ tmp_mac }}" 
     vars: 
     tmp_mac: ansible_{{net1}}.macaddress 
    - debug: 
     var: "hostvars[inventory_hostname]['ansible_' + net1]['macaddress']" 

ホスト変数ファイル:

はここで両方の方法を実証脚本だ

net1: enp3s0 

出力:

ok: [test.org] => { 
    "ansible_enp3s0.macaddress": "e8:b0:00:b5:bf:e2" 
} 
ok: [test.org] => { 
    "hostvars[inventory_hostname]['ansible_' + net1]['macaddress']": "e8:b0:00:b5:bf:e2" 
} 

AnsibleはそうJinja2の「を探し、Jinja2のテンプレートを使用しています変数ネスト "は良いアイデアかもしれません。

+0

ありがとう、ドミトリー、非常に便利でした。 – Ilya

関連する問題