provisioner local-exec 访问 each.key
provisioner local-exec access to each.key
Terraform v0.12.6,provider.aws v2.23.0
我正在尝试使用新的 for_each 结构创建两个 aws 实例。实际上不要认为这是一个 aws 提供商问题,更多的是 terraform/for_each/provisioner 问题。
在我尝试添加一个 local-exec 配置步骤之前,一直按照宣传的方式工作。
不知道如何修改 local-exec 示例以使用 for.each 变量。收到有关循环的地形错误。
locals {
instances = {
s1 = {
private_ip = "192.168.47.191"
},
s2 = {
private_ip = "192.168.47.192"
},
}
}
provider "aws" {
profile = "default"
region = "us-east-1"
}
resource "aws_instance" "example" {
for_each = local.instances
ami = "ami-032138b8a0ee244c9"
instance_type = "t2.micro"
availability_zone = "us-east-1c"
private_ip = each.value["private_ip"]
ebs_block_device {
device_name = "/dev/sda1"
volume_size = 2
}
provisioner "local-exec" {
command = "echo ${aws_instance.example[each.key].public_ip} >> ip_address.txt"
}
}
但是得到这个错误。
./terraform apply
Error: Cycle: aws_instance.example["s2"], aws_instance.example["s1"]
for_each each.key 变量是否应该在配置步骤中起作用?稍后还有其他方法可以通过使用遗嘱文件或查询给定实例 ID 的 aws 来获取 public_ip,但是在 local-exec 配置中访问资源变量似乎在很多方面都派上用场。
尝试使用 self
变量:
provisioner "local-exec" {
command = "echo ${self.public_ip} >> ip_address.txt"
}
请读者注意,资源级别 for_each
是 Terraform 中相对较新的功能,需要版本 >=0.12.6
。
Terraform v0.12.6,provider.aws v2.23.0
我正在尝试使用新的 for_each 结构创建两个 aws 实例。实际上不要认为这是一个 aws 提供商问题,更多的是 terraform/for_each/provisioner 问题。
在我尝试添加一个 local-exec 配置步骤之前,一直按照宣传的方式工作。 不知道如何修改 local-exec 示例以使用 for.each 变量。收到有关循环的地形错误。
locals {
instances = {
s1 = {
private_ip = "192.168.47.191"
},
s2 = {
private_ip = "192.168.47.192"
},
}
}
provider "aws" {
profile = "default"
region = "us-east-1"
}
resource "aws_instance" "example" {
for_each = local.instances
ami = "ami-032138b8a0ee244c9"
instance_type = "t2.micro"
availability_zone = "us-east-1c"
private_ip = each.value["private_ip"]
ebs_block_device {
device_name = "/dev/sda1"
volume_size = 2
}
provisioner "local-exec" {
command = "echo ${aws_instance.example[each.key].public_ip} >> ip_address.txt"
}
}
但是得到这个错误。
./terraform apply
Error: Cycle: aws_instance.example["s2"], aws_instance.example["s1"]
for_each each.key 变量是否应该在配置步骤中起作用?稍后还有其他方法可以通过使用遗嘱文件或查询给定实例 ID 的 aws 来获取 public_ip,但是在 local-exec 配置中访问资源变量似乎在很多方面都派上用场。
尝试使用 self
变量:
provisioner "local-exec" {
command = "echo ${self.public_ip} >> ip_address.txt"
}
请读者注意,资源级别 for_each
是 Terraform 中相对较新的功能,需要版本 >=0.12.6
。