2016-06-16 25 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的答案

相关问题