O Terraform pára ao tentar obter endereços IP de várias instâncias?
Então, eu estou usando terraform para provisionar instâncias ec2 e instâncias openstack. Estou tentando fazer referência aos endereços IP das instâncias que estou criando, porque preciso executar comandos que os usam (para configurar o consul). No entanto, depois de adicionar referências a essas variáveis, o terraform fica parado e não faz absolutamente nada depois de executar umterraform apply
outerraform plan
:
Aqui está um exemplo do bloco de recursos para o que estou tentando executar:
resource "aws_instance" "consul" {
count = 3
ami = "ami-ce5a9fa3"
instance_type = "t2.micro"
key_name = "ansible_aws"
tags {
Name = "consul"
}
connection {
user = "ubuntu"
private_key="${file("/home/ubuntu/.ssh/id_rsa")}"
agent = true
timeout = "3m"
}
provisioner "remote-exec" {
inline = [
"sudo apt-get update",
"sudo apt-get install -y curl",
"echo ${aws_instance.consul.0.private_ip} >> /home/ubuntu/test.txt",
"echo ${aws_instance.consul.1.private_ip} >> /home/ubuntu/test.txt",
"echo ${aws_instance.consul.2.private_ip} >> /home/ubuntu/test.txt"
]
}
}
Atualizar: então tentei executar um comando semelhante com minha nuvem openstack e tive o mesmo problema:
provisioner "remote-exec" {
inline = [
"sudo apt-get update",
"sudo apt-get install -y curl",
"echo ${openstack_compute_instance_v2.consul.0.network.0.fixed_ip_v4}",
"echo ${openstack_compute_instance_v2.consul.1.network.1.fixed_ip_v4}",
"echo ${openstack_compute_instance_v2.consul.2.network.2.fixed_ip_v4}"
]
}
Portanto, descobri que, se usar apenas um dos endereços IP, as outras instâncias nem serão criadas até que minha primeira instância seja criada, como no bloco abaixo:
provisioner "remote-exec" {
inline = [
"echo ${openstack_compute_instance_v2.consul.0.network.0.fixed_ip_v4}",
]
}
Eu preciso que todas as minhas instâncias sejam criadas ao mesmo tempo e tenha acesso aos endereços IP de todas as outras instâncias criadas assim que criadas.