Я создаю файл terraform, чтобы я мог настроить некоторые виртуальные машины в GCP для создания своей собственной платформы Kubernetes (да, у Google есть свой собственный движок, но я хочу использовать некоторые пользовательские элементы).Я смог создать файл .tf, чтобы создать весь стек, как и другие настройки в проекте Kubespray.Что-то вроде того, что вы делаете для терраформирования виртуальных машин в AWS.
Последняя часть, которую мне нужно автоматизировать, - это создание файла хоста для Ansible.
Я создаю мастеров и рабочих, используя ресурс под названиемgoogle_compute_region_instance_group
, который помещает каждый экземпляр в другой AZ в GCP.Теперь мне нужно получить имя хоста и 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, но он поддерживается только в типе ресурса, а не источника данных.Я также пробовал синтаксис сплат, и он не работал.