模板中的 Ansible 嵌套变量

Ansible nested variables in template

我需要创建用于配置多个以太网连接的剧本。

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

正是我需要的,例如:

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

net1net2 等在 hosts_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 variable nesting" 可能是个好主意。