如何使用Ansible嵌套变量?

如何使用Ansible嵌套变量?,ansible,jinja2,Ansible,Jinja2,我有一本Ansible剧本,如下图所示,我想使用嵌套变量,如下图所示: msg={{{{Component}}.community\u release\u num},但是当我运行playbook时: ansible-playbook vartest.yml -e 'version=version_402', it not work [es@vpn-server nested-var]$ tree . ├── vars │   ├── horizon.yml │   └── version_4

我有一本Ansible剧本,如下图所示,我想使用嵌套变量,如下图所示:
msg={{{{Component}}.community\u release\u num}
,但是当我运行playbook时:

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]$
错误消息

[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  
Ansible是否可以使用嵌套变量,如果可以,如何使用它?

根据:

另一条规则是“胡子不叠”。我们经常看到:

{{ somevar_{{other_var}} }} 
如果需要使用动态变量,请使用 hostvars或vars字典(视情况而定):

{{ hostvars[inventory_hostname]['somevar_' + other_var] }}
因此,在你的情况下:

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

或(自Ansible 2.5起):

Per:

另一条规则是“胡子不叠”。我们经常看到:

{{ somevar_{{other_var}} }} 
如果需要使用动态变量,请使用 hostvars或vars字典(视情况而定):

{{ hostvars[inventory_hostname]['somevar_' + other_var] }}
因此,在你的情况下:

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

或(自Ansible 2.5起):

运行此命令:
ansible playbook 1_lambda-facts.yml-e“func_name=mylambdaFunctionName”


-姓名:获取lamda信息
主机:本地主机
连接:本地
变成:是的
收集事实:真实
任务:
-名称:列出特定函数的所有
lambda_事实:
查询:全部
函数名:“{func_name}”
-名称:调试信息
调试:
msg:{{lambda_facts}}”
msg:“变量名为:{{vars['func_name']}”
msg:{{lambda_facts['function'][vars['func_name']]['function_arn']}
运行此命令:
ansible playbook 1_lambda-facts.yml-e“func_name=mylambdaFunctionName”


-姓名:获取lamda信息
主机:本地主机
连接:本地
变成:是的
收集事实:真实
任务:
-名称:列出特定函数的所有
lambda_事实:
查询:全部
函数名:“{func_name}”
-名称:调试信息
调试:
msg:{{lambda_facts}}”
msg:“变量名为:{{vars['func_name']}”
msg:{{lambda_facts['function'][vars['func_name']]['function_arn']}

如何做到这一点<代码>区域:1 dev1_ips:1,2{{dev[region]_ips}}如何做到这一点<代码>区域:1 dev1_ips:1,2{{dev[region]_ips}}