2016-06-16 6 views
0

Meine Frage ist zu diesem git Hub Post ähnlich:Terraform, Wie wird der Bereitsteller für vorhandene Ressourcen ausgeführt?

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

Ich versuche zu Bootstrap und:

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

Es ist auch zu einem anderen Stapel Austausch Beitrag von mir verwandt ist Es gibt mehrere Befehle, die ich auf meinen Instanzen ausführen muss, die die IP-Adressen aller anderen Instanzen erfordern. Ich kann jedoch nicht auf die Variablen zugreifen, die die IP-Adressen meiner neu erstellten Instanzen enthalten, bis sie erstellt werden. Also, wenn ich versuche, einen provisioner "remote-exec" Block wie folgt auszuführen:

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}" 
    ] 
    } 

Es passiert nichts, weil alle Instanzen für alle anderen Instanzen warten zu werden erstellt beenden und so wird nichts in erster Linie geschaffen. Also brauche ich einen Weg, meine Ressourcen zu erstellen und dann meine provisioner "remote-exec" Blockbefehle auszuführen, nachdem sie erstellt wurden und Terraform auf die IP-Adressen aller meiner Instanzen zugreifen kann.

+0

Mögliche Duplikat [Terraforming Stände beim Versuch, IP-Adressen von mehreren Instanzen zu erhalten?] (http://stackoverflow.com/questions/37823770/terraform-stalls-industry-to-get-ip-addresses-of-multiple-instances) – ydaetskcoR

Antwort

3

Die Lösung besteht darin, einen resource "null_resource" "nameYouWant" { } zu erstellen und dann Ihre Befehle darin auszuführen. Sie werden ausgeführt, nachdem die anfänglichen Ressourcen erstellt werden:

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" 
    ] 
    } 
} 

Siehe auch die Antwort hier:

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

Vielen Dank für die Antwort @ydaetskcor

Verwandte Themen