【问题标题】:Ansible dynamic inventory keyed groups gcpAnsible 动态库存键控组 gcp
【发布时间】:2020-02-24 16:38:06
【问题描述】:

我正在尝试在 ansible 中创建一个清单文件,该文件根据 Google Cloud Platform 中的实例组对所有实例进行分组。

Ansible 文档给出了以下示例来根据标签对实例进行分组。当我使用此示例时,它可以正常工作并按标签分组显示我的实例。

keyed_groups:
  - prefix: gcp
    key: labels

但我想按实例组对它们进行分组。我尝试了以下的很多变体,但都没有奏效。

keyed_groups:
  - prefix: gcp
    key: instance-groups

keyed_groups:
  - prefix: gcp
    key: compute_instance_groups

任何想法,我的问题的语法是什么?

【问题讨论】:

    标签: google-cloud-platform ansible ansible-inventory


    【解决方案1】:

    主机列表由 gcp_compute ansible inventory 插件构建。此插件检查一组 Compute Engine 实例并构建一个列表。可以在这里找到我们可以用作键的一组项目:

    如果我们查看这些数据,我们确实不会发现 Compute Engine 知道它属于哪个(如果有)实例组。

    回过头来,我们发现要创建实例组,我们首先创建一个描述实例外观的计算引擎模板。接下来,我们创建一个引用该模板的实例组。 GCP 的实例组子系统似乎与计算引擎实例分开管理组。

    如果您希望能够了解计算引擎属于哪个实例组,一种解决方案是在用于创建计算引擎的模板中创建一个标签。例如:

    • instance_group: MyInstanceGroup

    完成此操作后,由实例组创建并与该模板关联的计算引擎实例将具有名为 instance_group 的标签。此时,您可以使用 Ansible 库存插件按标签进行分组。

    参考资料:

    【讨论】:

    • 非常感谢您的回答。我试过你的方法,效果很好。
    【解决方案2】:

    看起来,您可以在元数据中找到该实例组,尽管不是那么整齐。它在数据中 ansible 可以像这样访问:

    "metadata": {
        "created-by": "projects/XXXX/regions/europe-west4/instanceGroupManagers/my-instance-group",
    

    您可以基于此创建一个组:

    groups:
      my-instance-group: "'instanceGroupManagers/my-instance-group' in metadata['created-by']"
    

    请注意,您可以在运行ansible-inventory --list -i inventory/nonprod_gcp.yml 时看到所有元数据,因此您还可以在其他属性上创建groupskeyed_groups

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      • 1970-01-01
      相关资源
      最近更新 更多