Ansible 模板中可替换的嵌套变量
我需要为提供多个以太网连接创建剧本 如何从事实和用户变量中混合得到模板中的嵌套变量 正是我需要的,例如:Ansible 模板中可替换的嵌套变量,ansible,ansible-playbook,ansible-2.x,Ansible,Ansible Playbook,Ansible 2.x,我需要为提供多个以太网连接创建剧本 如何从事实和用户变量中混合得到模板中的嵌套变量 正是我需要的,例如: {{ ansible_{{ net1 }}.macaddress }} {{ ansible_{{ net2 }}.macaddress }} 变量net1,net2等在hosts\u vars中定义如下: net1: eth0 net2: br0 有可能吗?如果答案是肯定的,那么怎么做呢?有几种方法可以做到这一点 您可以使用任务变量或使用字典语法来访问变量 下面是一本演示这两种方法的手
{{ ansible_{{ net1 }}.macaddress }}
{{ ansible_{{ net2 }}.macaddress }}
变量net1
,net2
等在hosts\u vars
中定义如下:
net1: eth0
net2: br0
有可能吗?如果答案是肯定的,那么怎么做呢?有几种方法可以做到这一点 您可以使用任务变量或使用字典语法来访问变量 下面是一本演示这两种方法的手册:
- hosts: test.org
tasks:
- debug:
var: "{{ tmp_mac }}"
vars:
tmp_mac: ansible_{{net1}}.macaddress
- debug:
var: "hostvars[inventory_hostname]['ansible_' + net1]['macaddress']"
test.org的主机变量文件
:
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变量嵌套”可能是一个好主意。谢谢,Dmitry,这非常有用。如何做到这一点<代码>区域:1 dev1_ips:1,2{{dev[region]_ips}}