ansible jinja2

¿Cómo puedo usar la variable anidada Ansible?



jinja2 (1)

Tengo un libro de jugadas Ansible como el siguiente, quiero usar una variable anidada como esta: msg={{{{Component}}.community_release_num}} , pero cuando ejecuto el libro de jugadas:

ansible-playbook vartest.yml -e ''version=version_402'', it not work [es@vpn-server nested-var]$ tree . ├── vars │   ├── horizon.yml │   └── version_402.yml └── vartest.yml 1 directory, 3 files [es@vpn-server 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}} [es@vpn-server nested-var]$ cat vars/horizon.yml Component: horizon [es@vpn-server nested-var]$ cat vars/version_402.yml - horizon: community_release_num: ''9.0.1'' release_num: ''4.0.2'' [es@vpn-server nested-var]$

error de mensajes

[es@vpn-server 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

¿Puede Ansible usar una variable anidada, en caso afirmativo, cómo usarla?


Por preguntas frecuentes :

Otra regla es ''los bigotes no se apilan''. A menudo vemos esto:

{{ somevar_{{other_var}} }}

Lo anterior NO FUNCIONA, si necesita usar una variable dinámica, use el diccionario hostvars o vars según corresponda:

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

Entonces en tu caso:

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

O:

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

O (desde Ansible 2.5):

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