我正在创建一个terraform文件,所以我可以在GCP中设置一些虚拟机来构建我自己的Kubernetes平台(是的google有自己的引擎,但我想使用一些自定义项目)。我已经能够创建.tf文件来创建整个堆栈,就像Kubespray项目中的其他设置一样。类似于您在AWS上对虚拟机进行操作的方法。
我需要自动化的最后一部分是为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语法,但它没有用。