我的主機清單的來源是一個輸出值對的內部工具,例如,這裏有六個觀察值,我目前有160個觀察值:Ansible:如何使用多值數據清單作爲清單並傳遞給目標主機
servername1 processname1
servername1 processname2
servername1 processname3
servername2 processname1
servername3 processname1
servername4 processname1
所以第1列是我的目標主機列表(我的庫存)。 Column2是唯一的processname值,專門分配給servername的值。通常會發生相同的服務器。某些服務器只有一個進程名稱,其他服務器可能有2到N.意思是說,我的目標主機可能重複一個唯一的進程名稱列表。我想從這個輸出列表中使用動態庫存,並且我需要將每個觀察值的兩個值關聯並分配給變量。我並不是絕對需要使用動態庫存,我只需要一個解決方案。我還需要通過命令:或shell:modules傳遞給目標主機和{{processname#}}中的值。 (這是獨一無二的,沒有與此需求相關的模塊)
如果需要,我有一種方法來過濾這些數據並以JSON格式或YAML輸出它,爲每個主機制作一個單獨的YML文件。雖然我寧願動態地處理這些;預處理列表是可以接受的。
因爲ansible-playbook需要一些已知的主機清單列表,所以我在開始播放時從我的動態輸出中瞭解如何創建此列表。
我到目前爲止所做的工作:我已經嘗試閱讀並嘗試將這些對設置爲在/etc/ansible/hosts/host_vars/servername#.yml文件中。這是非常難看的,因爲我必須預處理數據的輸出,轉換成YML格式。但它並沒有給我一個主機列表來參考我的手冊。所以雖然看起來hostvar是合乎邏輯的選擇,但我無法理解它。
我需要什麼:
- The suggested format of the data? JSON? YAML? Other? (if I cannot read it in dynamically.
- Is putting this in host_vars correct?
- Last night I saw another answer using set_fact, would that help?
謝謝你的任何見解。我現在已經使用了Ansible 3.5周!我使用靜態和動態庫存做得非常好,但是由於庫存清單並不明顯,因此造成了這種情況,給出了匹配對的格式。
注意:很多人都建議使用host_vars,但在我看來,保留給主機名以及相關的端口和代理值。我可能是錯的。
============================================== =====================
更新:感謝您的正確方向的幫助。 我已更新我們的庫存腳本以JSON輸出主機列表。 第一個新選項是使用JSON輸出主機。 示例: {「my_host」:[「servername1」,「servername2」,]}
將此稱爲動態庫存腳本,效果很好!
ansible all -m ping servername1 | SUCCESS => { 「changed」:false, 「ping」:「pong」 } servername2 | SUCCESS => { 「變爲」:假, 「平」:「傍」 }
下一頁:第二個新的選擇清單腳本是一個新的開關添加到輸入一個主機名。這部分仍然讓我困惑。下面是輸出: showInv主機= servername1
{ 「servername1」: 「processname1」, 「processname2」, 「processname3」]}
,我很想念最後一部分是如何我請在我的劇本中使用特定的「--host = {{my_host}}來調用庫存腳本。
似乎我需要找到現有主機名的變量,並將該變量傳回庫存腳本開關選項「--host =」
謝謝。我明白這應該如何工作。還有一個問題:第二次包含對庫存腳本的調用時,如何將-host包含在-i my_inv_script中?我可以引用,是-i「my_inv_script --host {{myhosts}}」? –
gantte
您只需使用'-i my_inv_script'指定庫存腳本,然後Ansible在內部調用'my_inv_script --list'來列出所有主機,然後爲每個主機調用'my_inv_script --host'以獲取其變量。 –
有沒有其他方法可以做到這一點?我的廣告資源腳本不支持「--list」。腳本是perl。該腳本需要多個選項才能從數據庫中獲得所需的輸出。我在bash shell腳本中用正確的選項包裝了perl腳本。例如:invList -a appReleasever -p平臺-e releaseVer等等。因此,通過包裝在bash shell中,基本shell的源代碼輸出動態庫存的主機列表。沒有「--list」我可以分配一個變量模擬添加--host = {{hostname}}嗎? – gantte