我一直在閱讀關於如何創建動態庫存的安全文檔。據我所知,我必須提供一個能夠輸出host_vars和group_vars的json。Ansible動態庫存服務概念
考慮到這一點,我將如何去擴展group_vars和host_vars概念以包含服務的定義?
從本質上說,我的「最終目標」是有東西,讓我來定義:
主機A的服務A B C,那麼這將變成相應的主機和組瓦爾。
什麼是接近最好的方法? 我一直在想可能是一個數據庫,但我不太確定如何適當地抽象服務概念。
預先感謝任何幫助
我一直在閱讀關於如何創建動態庫存的安全文檔。據我所知,我必須提供一個能夠輸出host_vars和group_vars的json。Ansible動態庫存服務概念
考慮到這一點,我將如何去擴展group_vars和host_vars概念以包含服務的定義?
從本質上說,我的「最終目標」是有東西,讓我來定義:
主機A的服務A B C,那麼這將變成相應的主機和組瓦爾。
什麼是接近最好的方法? 我一直在想可能是一個數據庫,但我不太確定如何適當地抽象服務概念。
預先感謝任何幫助
我不能給你所有的答案,我剛開始使用Ansible四個星期前。不過,我已經成功整合了動態庫存。這是我可以分享:(推斷爲您的設置,我在RHEL店,使用6.9和7.4)
[labhosts] labhost-1 labhost-2
[本地主機] 127.0.0.1
的/ etc/ansible/ansible.cfg將允許您根據需要重新定位庫存文件/目錄。目前,我的意見將假設沒有默認的變化
上面的例子是靜態庫存。你可以將你的/ etc/ansible/hosts文件放到一邊,然後執行:mkdir/etc/ansible/hosts/012/////ansible/hosts/hosts可以將靜態庫存文件在您的動態目錄(現在)因此,美是,你仍然可以使用靜態庫存,它只是住在/ etc/ansible/etc/< - 目錄沒有什麼特別的靜態文件名。它可以是任何名稱,但是某些字符作爲靜態文件名稱的一部分無效。
要使用動態庫存,您現在只需將放入/ etc/ansible/hosts /目錄中的可執行腳本從您的外部數據庫中提取主機名即可。 AND,這是關鍵部分,該腳本的輸出(stdout)必須以JSON格式輸出。
在我的環境中,我們有一個perl腳本,並根據切換參數提取主機名列表。我們最近修改了perl腳本,使用print語句生成JSON輸出。有一個JSON:perl模塊,但我們沒有發現它需要使用,因爲使用print來格式化輸出已經足夠了。至於組名,我們還從perl腳本的開關設置中「建立」了組名。
因此,使用上述我的INI庫存例如,JSON輸出將是這樣的:{「服務器」:[「服務器1」,「服務器2」,]}
注1:一個怪癖,我瞭解到,如果您只有一臺主機,則必須以逗號結尾。有一個原因,我不確定我能解釋它。當我們生成我們的JSON輸出時,無論主機的數量如何,我們都會添加一個逗號,並且它正常工作。注意2:我意識到這不是真正的JSON輸出,但它正在滿足我們的需求。
在你的劇本,你會放 - 主機:全部或 - 主機:your_group_name 我通常只是把 - 主機:所有的,然後使用限制-i選項和/或「--limit =主機名」
「-i」將您的清單縮小到靜態或動態生成列表 --limit = hostname其中「hostname」是-i輸出的子集之一。
請考慮以下命令:ansible all -m ping 這將ping您整個清單中的所有主機。靜態和動態
ansible所有-m平-i服務器 這將ping通的所有主機在您的服務器組
ansible所有-m平-i服務器--limit =服務器1 這將只是ping通一臺主機「server-1」 使用--limit =非常適合用於測試播放或劇本
當轉到劇本時,您可以在劇本中指定主機列表。 然後你只需要在命令行中根據需要添加限制。
祝你好運!