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.
Os módulos Terraform são o que você deseja em caso de duplicação. Esses recursos encapsulados com valores padrão que você costuma usar, um conjunto de recursos pode ser reutilizado com entrada mínima em vez de gravá-los novamente.
O registro do módulo Terraform abrange alguns módulos pré-fabricados para os provedores maiores, onde você pode experimentar alguns existentes ou - se seu provedor não for suportado - desenvolver uma imagem melhor de como um módulo deve ser usado e projetado.