扩容后如何获取新实例的IP?

How to get the IP of the new instances after scaling?

我只想获取 Terraform 在更新一些现有基础结构后创建的新实例的 IP。

我有下一个资源实例:

resource "aws_instance" "masters" {
    count = "${var.masters_count}"
    ami = "${var.aws_centos_ami}"
    instance_type = "t2.medium"
    ......
    availability_zone = "eu-west-1b"

    root_block_device {
      delete_on_termination = "${var.volume_delete_on_termination}"
    }

    tags {
            Name = "master-${count.index}"
        }
}

如果我使用下一个 "local-exec" 命令,它会将所有主实例 IP 写入文件:

provisioner "local-exec" {
    command =  "echo \"${join("\n", aws_instance.masters.*.private_ip)}\" >> ../ansible-provision/inventory/hosts.ini"
}

我用 5 个实例部署了这个基础设施。然后我想添加另外 3 个实例,所以我将 "count" 更改为 8。

如何获取这 3 个新实例的 IP?

解决方案:

因为我有一些脚本是 运行 并且不能成为幂等的,所以很容易使用 ansible 在 non-idempotent 元素周围放置一些额外的“脚手架”并有条件地执行脚本,因此它们只有 运行 一次。

https://groups.google.com/forum/#!topic/terraform-tool/YVHReDbJ2Gw

使用null_resource:

resource "null_resource" "ips" {
  triggers {
    ids = "${join(",", aws_instance.masters.*.id)}"
  }

  provisioner "local-exec" {
  ...
  }
}