Или (начиная с версии 2.5):

я есть Ansible playbook, как показано ниже, я хочу использовать вложенную переменную, как это:msg={{{{Component}}.community_release_num}}, но когда я запускаю playbook:

ansible-playbook vartest.yml -e 'version=version_402', it not work 

[[email protected] nested-var]$ tree
.
├── vars
│   ├── horizon.yml
│   └── version_402.yml
└── vartest.yml

1 directory, 3 files
[[email protected] nested-var]$ cat vartest.yml 
---

- name: test 
  hosts: localhost
  vars_files:
    - vars/{{version}}.yml
  tasks:
    - debug: msg={{{{Component}}.community_release_num}}
    - debug: msg={{{{Component}}.release_num}}

[[email protected] nested-var]$ cat vars/horizon.yml 
Component: horizon

[[email protected] nested-var]$ cat vars/version_402.yml 
- horizon:
   community_release_num: '9.0.1'
   release_num: '4.0.2'
[[email protected] nested-var]$

Сообщения об ошибках

[[email protected] nested-var]$ ansible-playbook vartest.yml -e 'version=version_402'
/usr/lib64/python2.6/site-packages/cryptography/__init__.py:25: DeprecationWarning: Python 2.6 is no longer supported by the Python core team, please upgrade your Python.
  DeprecationWarning

PLAY [test] *******************************************************************************************************
/usr/lib64/python2.6/site-packages/Crypto/Util/number.py:57: PowmInsecureWarning: Not using mpz_powm_sec.  You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.
  _warn("Not using mpz_powm_sec.  You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.", PowmInsecureWarning)

TASK [debug] ******************************************************************************************************
fatal: [localhost]: FAILED! => {"failed": true, "msg": "template error while templating string: expected token 'colon', got '}'. String: {{{{Component}}.community_release_num}}"}
    to retry, use: --limit @/data/wangqian/artemis-code-test/artemis/ansible/update/nested-var/vartest.retry

PLAY RECAP ********************************************************************************************************
localhost                  : ok=0    changed=0    unreachable=0    failed=1  

Может ли Ansible использовать вложенную переменную, если да, то как ее использовать?

Ответы на вопрос(1)

Отеты на часто задааемые опросы:

Другое праило - «усы не укладыаются». Мы часто идим это:

{{ somevar_{{other_var}} }} 

Вышеуказанное НЕ РАБОТАЕТ, если ам нужно использоать динамическую переменную, используйте слоарь hostvars или vars заисимости от ситуации:

{{ hostvars[inventory_hostname]['somevar_' + other_var] }}

Итак, ашем случае:

- debug: msg={{hostvars[inventory_hostname][Component].community_release_num}}

Или же:

- debug: msg={{vars[Component].community_release_num}}

Или (начиная с ерсии 2.5):

- debug: msg={{(lookup('vars', Component)).community_release_num}}

Ваш ответ на вопрос