2016-06-16 122 views
0

我的問題是類似這樣的混帳樞紐職位:Terraform,如何在現有資源上運行供應商?

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

它也關係到我的另一個堆疊交換後:

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

我試圖引導多臺服務器和我需要在需要所有其他實例的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"塊命令,並且terraform可以訪問我所有實例的IP地址。

+0

的[Terraform攤位可能的複製而試圖獲得多個實例的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的答案

相關問題