2016-11-23 103 views
1

我需要为调配多个以太网连接创建剧本。模板中的Ansible嵌套变量

如何从事实和用户变量中获取模板中嵌套变量的混合?

正是我需要的,例如:

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

变量net1net2等在hosts_vars定义方式:

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