是否可以在 运行 时间定义一个 var 并使用它来访问另一个 var?
Is possible define a var at run-time and use it to access another var?
我不确定这是否可能。
我想在 运行 时定义一个 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 }} "
实际结果
task path: /home/nor/gitrepos/iiot-iac/ansible/myUnitTest.yml:19
fatal: [node1]: FAILED! => {
"failed": true,
"msg": "template error while templating string: expected token ':', got '}'. String: {{ {{ typeConfig }}.url_config }} " } " }
您可以使用以下方式访问该值:
- debug:
msg: "{{ vars[typeConfig].url_config }}"
记住{{ ... }}
不是写变量名的方式,而是开始一个Jinja2表达式。并且在查询值时,在 Ansible 中使用 Jinja2 表达式引用变量,因此使用 {{ {{ ... }} }}
没有意义。
我不确定这是否可能。
我想在 运行 时定义一个 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 }} "
实际结果
task path: /home/nor/gitrepos/iiot-iac/ansible/myUnitTest.yml:19 fatal: [node1]: FAILED! => { "failed": true, "msg": "template error while templating string: expected token ':', got '}'. String: {{ {{ typeConfig }}.url_config }} " } " }
您可以使用以下方式访问该值:
- debug:
msg: "{{ vars[typeConfig].url_config }}"
记住{{ ... }}
不是写变量名的方式,而是开始一个Jinja2表达式。并且在查询值时,在 Ansible 中使用 Jinja2 表达式引用变量,因此使用 {{ {{ ... }} }}
没有意义。