簡體   English   中英

Ansible 庫存可以包括另一個嗎?

[英]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 中已有的內容:

  1. 使用庫存目錄,您可以指定所有庫存文件所在的文件夾,它們將按字母順序一一包含。

  2. 您可以通過以下任一方式使用多個廣告資源來源:

    • 命令行中的多個-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM