扩容后如何获取新实例的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" {
...
}
}
我只想获取 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" {
...
}
}