如何使用谷歌平台提供商的terraform我是否从使用google_compute_region_instance_group创建的实例中获取实例信息?

问题描述 投票:-1回答:1

我正在创建一个terraform文件,所以我可以在GCP中设置一些虚拟机来构建我自己的Kubernetes平台(是的谷歌有他们自己的引擎,但我想使用一些自定义项目)。我已经能够创建.tf文件来创建整个堆栈,就像Kubespray项目中的其他设置一样。类似于您在AWS上对terraform VM执行的操作。

我需要自动化的最后一部分是为Ansible创建主机文件。

我使用名为google_compute_region_instance_group的资源创建了Masters and Workers,它将每个实例放在GCP中的不同AZ中。现在我需要获取主机名和IP给这些实例。我遇到的问题是它们是动态创建的资源。因此,为了获取这些信息,我使用数据源来获取信息。

这就是我现在拥有的。

data.google_compute_region_instance_group.data_masters.instances
[
  {
    "instance" = "https://www.googleapis.com/compute/v1/projects/appportablityphase2/zones/us-east1-c/instances/k8-masters-4r2f"
    "named_ports" = []
    "status" = "RUNNING"
  },
  {
    "instance" = "https://www.googleapis.com/compute/v1/projects/appportablityphase2/zones/us-east1-d/instances/k8-masters-qh64"
    "named_ports" = []
    "status" = "RUNNING"
  },
  {
    "instance" = "https://www.googleapis.com/compute/v1/projects/appportablityphase2/zones/us-east1-b/instances/k8-masters-w9c8"
    "named_ports" = []
    "status" = "RUNNING"
  },
]

如您所见,输出是列表和地图的混合。我能够通过这一行获得实例自我URL。

lookup(data.google_compute_region_instance_group.data_masters.instances[0], "instance")

https://www.googleapis.com/compute/v1/projects/appportablityphase2/zones/us-east1-c/instances/k8-masters-4r2f

然后,我可以拆分并获取实例名称。这是Terraform无法解决的难点。在上面的代码中,我必须使用[0]来调用实例信息。然后我需要迭代所有可能超过3或3的实例。

我找不到使用此数据源类型执行此操作的方法。我尝试过count.index但它只支持资源类型而不是数据源。我也尝试过splat语法,但它没有用。

google-cloud-platform terraform terraform-provider-gcp
1个回答
0
投票

我不认为手动生成库存是正确的方法,尽管它是可能的。

您可以尝试使用GCP动态库存,该库存根据其网络标记从运行的实例生成库存。

例如,实例A有标签foo,实例B有标签foo和bar,生成的库存将是:

[tag_foo]
A
B

[tag_bar]
B

脚本可在以下地址获得:https://github.com/ansible/ansible/blob/devel/contrib/inventory/gce.py

配置文件在这里:https://github.com/ansible/ansible/blob/devel/contrib/inventory/gce.ini

用法是ansible-playbook -i gce.py site.yml

© www.soinside.com 2019 - 2024. All rights reserved.