Acabei de começar a jogar com o Terraform e, como ponto de partida, estava importando recursos do nosso cluster vSphere - apenas um ambiente de teste simples que configurei para jogar com algumas coisas do Ansible.
Descobri que estou me repetindo muito e me perguntando se há uma maneira melhor de fazer isso. Não tenho certeza se os módulos se encaixam no que procuro, e os recursos que estou repetindo não são idênticos, então não tenho certeza se um loop direto funciona.
Efetivamente, estou procurando definir padrões de recursos que eu possa estender/substituir, se necessário. Um pequeno exemplo fictício que demonstra o que eu quero alcançar:
resource_defaults "vsphere_virtual_machine" {
resource_pool_id = "${data.vsphere_resource_pool.pool.id}"
datastore_id = "${data.vsphere_datastore.datastore.id}"
num_cpus = 2
memory = 1024 guest_id = "other3xLinux64Guest"
network_interface {
network_id = "${data.vsphere_network.network.id}" }
disk {
label = "disk0"
size = 20
}
}
resource "vsphere_virtual_machine" "node1" {
name = "terraform-test"
}
resource "vsphere_virtual_machine" "doublenet" {
name = "terraform-test-2"
network_interface {
network_id = "${data.vsphere_network.other_network.id}"
}
}
resource "vsphere_virtual_machine" "bigdisk" {
name = "terraform-test-3"
disk {
label = "disk0"
size = 100
}
}
Alguém sabe como posso conseguir o que estou tentando fazer?
ATUALIZAÇÃO: Agora que tenho um pouco mais de experiência com o Terraform, os módulos são exatamente o que eu queria fazer. Eu só não sabia que poderia passar parâmetros! Tentarei detalhar quando tiver oportunidade. Eu fiz algo semelhante recentemente e, passando estruturas de dados para o módulo, consegui que as instâncias semelhantes, mas diferentes, fossem construídas conforme pretendido.