我不确定这是可能的。
我想在运行时定义一个var并使用它来访问另一个var(在文件,playbook中定义..)。
在运行时定义:
typeConfig (possible values: "in_config" or "out_config")
:
in_config:
url_config: http://localhost/configuration
out_config:
url_config: http://config.pi.dyn-dns.org/configuration
我需要解决类似的问题:
{{ {{ typeConfig }}.url_config }}
我尝试:
- name: Mytest
hosts: all
gather_facts: false
sudo: yes
vars:
- in_config:
url_config: http://localhost/configuration
- out_config:
url_config: http://config.pi.dyn-dns.org/configuration
tasks:
- set_fact:
typeConfig: in_config
- name: Value in_config.url_config
debug: msg=" {{in_config.url_config}}"
- name: Value out_config.url_config
debug: msg=" {{out_config.url_config}}"
- name: Value typeConfig
debug: var=typeConfig
- debug: msg="{{ {{ typeConfig }}.url_config }} "
实际结果
任务路径:/home/nor/gitrepos/iiot-iac/ansible/myUnitTest.yml:19 致命:[node1]:失败了! => { "失败":是的, " msg":"模板错误,模板字符串:期望令牌':',得到'}'。字符串:{{{{typeConfig}}。url_config}}" }" }
答案 0 :(得分:1)
您可以使用以下方式访问该值:
- debug:
msg: "{{ vars[typeConfig].url_config }}"
请记住,{{ ... }}
不是编写变量名的方法,而是启动Jinja2表达式。在查询值时,使用Ansible中的Jinja2表达式引用变量,因此使用{{ {{ ... }} }}
没有意义。