Ansible库存可以包含另一个库存吗?

时间:2019-10-31 22:29:33

标签: ansible include yaml ansible-inventory

我们有一组服务器,它们在应用程序的不同实例之间共享,并且希望它们的列表是一个单独的文件,以及其他-特定于实例的清单-包括。 / p>

(我知道,这可以通过 dynamic 库存完成,但是这些都是代码,我们希望我们的服务器列表保留 data ,可以这么说。 )

使用INI库存,这是不可能的,但是使用YAML-库存,这是非常接近的。例如,this answer显示了如何通过将!include的处理程序添加到Python的YAML解析器来完成此操作。然后可以写:

all:
  group1:
    host1:
    host2:
  sharedservers: !include shared-servers.yaml

一个人如何才能将此功能添加到自己的Ansible存储库中-最好不实施一个全新的清单插件(尽管可以从Ansible的现有存储插件继承)?

2 个答案:

答案 0 :(得分:2)

首先,问题中的示例清单不尊重可使用清单的架构,因此将被拒绝解析。

现在要回答您的问题,您只需一次使用几个库存即可。这是一个简单的示例:

我创建了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

答案 1 :(得分:1)

您可以利用Ansible中已有的功能

  1. 使用清单目录,您可以指定所有清单文件所在的文件夹,并且它们将按字母顺序一一列出。

  2. 您可以使用以下任一资源来使用多个广告资源:

      命令行中的
    • 多个private void Btn_valider_Click(object sender, EventArgs e) { //Création de l'objet Personne contact = new Personne(Prenom, Nom, Age, dateNaissanceStr, isMan, notesStr, pathImage, mail, mail2, tel, telFix, site, rue, ville, numero, codePostal, departement); //Sauvegarde l'objet Stream fichier = File.Create(@"contact.dat"); BinaryFormatter serializer = new BinaryFormatter(); serializer.Serialize(fichier, contact); fichier.Close(); this.Close(); } catch { MessageBox.Show("Erreur."); } } } } 选项
    • -i环境变量,并以逗号分隔的清单路径列表(目录或文件)
    • ANSIBLE_INVENTORY中的inventory选项与上述操作相同。

请参见docs

我怀疑以上内容将无法满足您的需求。与修改pyyaml和ansible方式相比,最好稍微修改包装器脚本和项目的文件结构。 /intro_inventory.html?highlight=库存目录#using-multiple-inventory-sources)以获取更多信息。