そのため、terraform を使用して ec2 インスタンスと openstack インスタンスをプロビジョニングしています。(consul を設定するために) それらを使用するコマンドを実行する必要があるため、作成しているインスタンスの IP アドレスを参照しようとしています。terraform apply
ただし、これらの変数への参照を追加した後、テラフォームは停止し、またはを実行した後はまったく何もしませんterraform plan
:
実行しようとしているリソース ブロックのサンプルを次に示します。
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}"
]
}
したがって、代わりに IP アドレスの 1 つだけを使用すると、次のブロックのように、最初のインスタンスが作成されるまで他のインスタンスが作成されないことがわかりました。
provisioner "remote-exec" {
inline = [
"echo ${openstack_compute_instance_v2.consul.0.network.0.fixed_ip_v4}",
]
}
すべてのインスタンスを同時に作成し、作成された他のすべてのインスタンスの IP アドレスにアクセスできるようにする必要があります。