[英]Can an Ansible inventory include another?
我們有一組在應用程序的不同實例之間共享的服務器,並且希望它們的列表是一個單獨的文件,以及其他 - 特定於實例的清單 -包括它。
(我知道,這可以通過動態庫存來完成,但這些是代碼,我們希望我們的服務器列表保留數據,可以這么說。)
對於 INI 庫存,這是不可能的,但對於 YAML 庫存,它非常接近。 例如,此答案顯示,如何通過將!include
的處理程序添加到 Python 的 YAML 解析器來完成此操作。 然后可以寫:
all:
group1:
host1:
host2:
sharedservers: !include shared-servers.yaml
如何將此功能添加到自己的 Ansible 存儲庫中 - 最好不實現全新的庫存插件(盡管從 Ansible 的現有插件繼承就可以了)?
首先,您問題中的示例庫存不尊重 ansible 庫存的架構,將被拒絕解析。
現在回答您的問題,您可以簡單地一次使用多個庫存。 這是一個簡單的例子:
我創建了 3 個 yaml 庫存文件:
inventories/hosts.yml
---
all:
children:
group1:
hosts:
host1:
host2:
inventories/otherhosts.yml
---
all:
children:
group2:
hosts:
hostA:
hostB:
inventories/shared.yml
---
all:
children:
sharedservers:
hosts:
host3:
host4:
從那里,很容易解決所有需要的主機:
ansible -i inventories/ all --list-hosts
hosts (6):
host1
host2
hostA
hostB
host3
host4
在這種情況下,這相當於在單獨的-i
選項中調用每個 yaml 文件
ansible -i inventories/hosts.yml \
-i inventories/otherhosts.yaml -i inventories/shared.yml all --list-hosts
ansible -i inventories/hosts.yml -i inventories/shared.yml all --list-hosts
hosts (4):
host1
host2
host3
host4
ansible -i inventories/otherhosts.yml -i inventories/shared.yml all --list-hosts
hosts (4):
hostA
hostB
host3
host4
您可以利用 Ansible 中已有的內容:
使用庫存目錄,您可以指定所有庫存文件所在的文件夾,它們將按字母順序一一包含。
您可以通過以下任一方式使用多個廣告資源來源:
-i
選項ANSIBLE_INVENTORY
環境變量並提供以逗號分隔的庫存路徑列表(目錄或文件)ansible.cfg
中的inventory
選項執行與上述相同的操作。請參閱文檔。
我懷疑以上內容無法滿足您的需求。 最好稍微修改一下包裝腳本和項目的文件結構,而不是侵入 pyyaml 和 ansible。 /intro_inventory.html?highlight=inventory directory#using-multiple-inventory-sources)了解更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.