2016-06-16 14 views
0

私の質問は、このGitのハブポストに似ている:私はいくつかのサーバをブートストラップしようとしていますTerraform、既存のリソースでプロビジョナを実行するにはどうすればよいですか?

Terraform stalls while trying to get IP addresses of multiple instances?

と:それはまた、私の別のスタック交換ポストに関連している

https://github.com/hashicorp/terraform/issues/745

他のすべてのインスタンスのIPアドレスを必要とするインスタンスで実行するために必要ないくつかのコマンドがあります。しかし、私が作成されるまで、新しく作成されたインスタンスのIPアドレスを保持する変数にアクセスすることはできません。だから私はこのようprovisioner "remote-exec"ブロックを実行しようとすると:すべてのインスタンスが作成されているので、何も最初の場所で作成されません終了する他のすべてのインスタンスを待っているので

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"ブロックコマンドを実行し、すべてのインスタンスのIPアドレスにterraformがアクセスできるようにします。

+0

[テラフォームの屋台の可能性のある重複複数のインスタンスのIPアドレスを取得しようとしていますか?](http://stackoverflow.com/questions/37823770/terraform-stalls-while-trying-to-get-ip-addresses-of-multiple-instances) – ydaetskcoR

答えて

3

解決策は、resource "null_resource" "nameYouWant" { }を作成し、その中でコマンドを実行することです。

resource "aws_instance" "consul" { 
    count = 3 
    ami = "ami-ce5a9fa3" 
    instance_type = "t2.micro" 
    key_name = "ansible_aws" 
    tags { 
    Name = "consul" 
    } 
} 

resource "null_resource" "configure-consul-ips" { 
    count = 3 

    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", 
     "sudo echo '${join("\n", aws_instance.consul.*.private_ip)}' > /home/ubuntu/test.txt" 
    ] 
    } 
} 

。また、ここでの回答を参照してください:彼らは、最初のリソースが作成された後に実行されます

Terraform stalls while trying to get IP addresses of multiple instances?

が答えのためにそんなに@ydaetskcorありがとう

関連する問題