所以我使用terraform来提供ec2实例和openstack实例。我试图引用我创建的实例的IP地址,因为我需要运行使用它们的命令(设置consul)。添加引用到这些变量后然而terraform只是摊出来,也绝对没有什么后,我运行一个terraform apply
或terraform plan
:Terraform在尝试获取多个实例的IP地址时停顿?
以下是资源块的什么我试图运行示例:
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"
]
}
}
更新:所以我尝试运行我的OpenStack云类似的命令,并得到了同样的问题:
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}"
]
}
所以我发现,如果我不是只用一个
provisioner "remote-exec" {
inline = [
"echo ${openstack_compute_instance_v2.consul.0.network.0.fixed_ip_v4}",
]
}
我需要在同一时间被创建,并有机会获得IP我的所有实例:IP地址,然后,直到我的第一个实例被创建,像下面的块中的其他情况下甚至不会被创建创建后立即创建的所有其他实例的地址。
看起来像一个_very_快速浏览应该做你想要的。它出什么问题了? – ydaetskcoR
这应该不成问题。 'aws_instance.consul ...'部分表示从一个名为'consul'的'aws_instance'资源获取输出。如果你删除'count'并且有一个''echo $ {aws_instance.consul.private_ip} >>/home/ubuntu/test.txt'“会发生什么? – ydaetskcoR
所以我尝试着用我的OpenStack做一些非常类似的事情,并得到了同样的问题。在运行'terraform apply'后,我的终端开始不做任何事情。等待它做了5分钟后,我做了一个双'control + c'退出,然后出现一堵错误。 –