我获得的变量文件如下:
猫 myvar.yml
dbname: ser1
url_ser1: url1
url_ser2: url2
dbname: ser2
my_ser1_port: 12207
my_ser2_port: 23332
dbname
要在第一次调试中开始,我希望显示viz ser1
&的两个键(也可以是超过 2 个键)值ser2
然后我希望使用第一个键的值,即ser1
提取键包含的所有值,ser1
即url1
12207
然后ser2
价值得到url2
和23332
因此,我需要如下输出:
The dbname are ser1 & ser2
dbname `ser1` URL is url1 and port is 12207
dbname `ser2` URL is url2 and port is 23332
下面是我的剧本,但是,我不知道如何阅读这样的变量:
---
- name: ReadJsonfile
hosts: localhost
tasks:
- include_vars: myvar.yml
- debug:
msg: "{{ dbname }}"
上面只打印第二个 dbname 值,即ser2
,而不是我需要的两个。
- debug:
msg: "{{ '*'+item+'*' }}"
loop: "{{ dbname }}"
以上失败并出现错误。
您能否建议我如何从 yaml 中获取所需的变量值。
你必须像这样写你的 myvar.yml :
dbname: ['ser1', 'ser2']
url_ser1: url1
url_ser2: url2
my_ser1_port: 12207
my_ser2_port: 23332
所以你可以遍历dbname ...
- name: Reproduce issue
hosts: localhost
gather_facts: no
tasks:
- include_vars: variables.yml
- debug:
msg: "dbname {{ item }} URL is {{ url }} and port is {{ port }}"
loop: "{{ dbname }}"
vars:
port: "{{ lookup('vars', 'my_' + item + '_port' ) }}"
url: "{{ lookup('vars', 'url_' + item) }}"
when: hostvars[ansible_host]['my_' + item + '_port'] is defined and
hostvars[ansible_host]['url_' + item] is defined
所以lookup('vars', 'my_' + item + '_port' )
=hostvars[ansible_host]['my_' + item + '_port']
结果:
ok: [localhost] => (item=ser1) => {
"msg": "dbname ser1 URL is url1 and port is 12207"
}
ok: [localhost] => (item=ser2) => {
"msg": "dbname ser2 URL is url2 and port is 23332"
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句