假設我有這樣的庫存:
database:
hosts:
database1:
ansible_host: 192.168.0.125
database2:
ansible_host: 192.168.0.126
database3:
ansible_host: 192.168.0.127
現在我必須替換一個檔案中的一個字串,該檔案還包含所有主機的 IP 地址和未來的主機。所以簡而言之,我需要一個看起來像這樣的變數:
192.168.0.125,192.168.0.126,192.168.0.127
現在,我可以這樣做:
存貨:
database:
hosts:
database1:
ansible_host: 192.168.0.124
database2:
ansible_host: 192.168.0.126
database3:
ansible_host: 192.168.0.127
vars:
dbs: "{{ hostvars['database1']['ansible_host'] ',' hostvars['database2']['ansible_host'] ',' hostvars['database3']['ansible_host'] }}"
劇本:
- name: Show host's ip
debug:
msg: "{{ dbs }}"
但這顯然不好,因為如果此串列中有一個新實體,我將不得不將手冊添加 ',' hostvars['databaseX']['ansible_host']到庫存中,我希望避免這種情況。
你們能推薦一種使用回圈或專案串列來獲取具有所有 IP 地址的變數中的字串的方法嗎?
謝謝 !
uj5u.com熱心網友回復:
在清單中動態創建變數。例如
database:
hosts:
database1:
ansible_host: 192.168.0.124
database2:
ansible_host: 192.168.0.126
database3:
ansible_host: 192.168.0.127
vars:
dbs: "{{ groups.database|
map('extract', hostvars, 'ansible_host')|
join(',') }}"
uj5u.com熱心網友回復:
dbs一種選擇是在回圈中構建值:
- hosts: localhost
gather_facts: false
tasks:
- set_fact:
dbs: "{{ dbs [hostvars[item].ansible_host] }}"
loop: "{{ groups.database }}"
vars:
dbs: []
- debug:
var: dbs
鑒于您的示例庫存,這將產生:
TASK [debug] ********************************************************************************************
ok: [localhost] => {
"dbs": [
"192.168.0.125",
"192.168.0.126",
"192.168.0.127"
]
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/426972.html
