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}}