我正在创建一个 terraform 文件,这样我就可以在 GCP 中设置一些虚拟机来构建我自己的 Kubernetes 平台(是的,谷歌有自己的引擎,但我想使用一些自定义项)。我已经能够创建 .tf 文件来创建整个堆栈,就像 Kubespray 项目中的其他设置一样。就像您在 AWS 上对虚拟机进行地形改造一样。
我需要自动化的最后一部分是为 Ansible 创建主机文件。
我使用名为的资源创建 Masters 和 Worker,该资源google_compute_region_instance_group
将每个实例放置在 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 语法,但没有奏效。