我獲得的變數檔案如下:
貓 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即url112207
然后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 中獲取所需的變數值。
uj5u.com熱心網友回復:
你必須像這樣寫你的 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"
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/447778.html
上一篇:從字典中獲取值
