Ansible 访问嵌套变量

Ansible accessing Nested Variables

在 foo.yml 中,dev.foo 变量包含 bar 的值。

---
- hosts: all
  vars:
    dev:
      foo: bar

我在命令行中将 env 变量设置为包含值 dev

ansible-playbook foo.yml --extra-vars "env=dev"

如果我尝试调试 env.foo。 . .

  tasks:
    - debug:
        msg: "{{ env.foo }}"

返回如下。

TASK [debug]
fatal: [server1.example.com]: FAILED! => {
    "msg": "The task includes an option with an undefined variable.
            The error was: 'str object' has no attribute 'foo'"
}

我不确定如何在 jinja2 中将 env 解析为 dev 然后访问嵌套变量 dev.foo.

间接寻址在 Ansible 中不可用。您可以改用 vars 查找。参见 ansible-doc -t lookup vars 例如

  - debug:
      msg: "{{ lookup('vars', env).foo }}"

给予

  msg: bar