在 Terraform v0.11.14 中按名称对子网进行排序
Sorting subnets by name in Terraform v0.11.14
我正在尝试按名称获取子网列表,过滤掉以“d”结尾的子网(对于“d”可用区),然后获取 Terraform v0 中剩余子网的 ID .11.14.这就是我创建子网的方式:
resource "aws_subnet" "private" {
vpc_id = "${var.vpc_id}"
cidr_block = "${element(split(",", var.cidrs), count.index)}"
availability_zone = "${element(split(",", var.azs), count.index)}"
count = "${length(split(",", var.cidrs))}"
tags { Name = "${var.name}.${element(split(",", var.azs), count.index)}" }
lifecycle { create_before_destroy = true }
}
我知道如何在 Terraform v1.0.0 中实现我的结果:
output "subnet_ids" { value = "${join(",", list(for subnet in aws_subnet.private.*: subnet.id if substr(subnet.name, -1, 1) != "d" ))}" }
我试图在 Terraform v0.11.14 中做同样的事情,只是切断最后一个子网,希望子网默认按名称排序,但它们不是:
output "subnet_ids" { value = "${join(",", slice(aws_subnet.private.*.id, 0, length(aws_subnet.private.*.id) - 1))}" }
有人知道如何使用 Terraform v0.11.14 实现我想要做的事情吗?
您可以查看以下内容。据我了解,您的过滤是基于 AZ 名称的最后一个字母。因此,也许您可以按 AZ 排序,并删除最后一个,就像您尝试的那样:
locals {
sorted_az = "${sort(aws_subnet.private.*.availability_zone)}"
length_az_minus_1 = "${length(local.sorted_az)-1}"
azs_without_last = "${slice(local.sorted_az, 0, local.length_az_minus_1)}"
}
output "subnet_ids" {
value = "${ matchkeys(aws_subnet.private.*.id, aws_subnet.private.*.availability_zone, local.azs_without_last)}"
}
我正在尝试按名称获取子网列表,过滤掉以“d”结尾的子网(对于“d”可用区),然后获取 Terraform v0 中剩余子网的 ID .11.14.这就是我创建子网的方式:
resource "aws_subnet" "private" {
vpc_id = "${var.vpc_id}"
cidr_block = "${element(split(",", var.cidrs), count.index)}"
availability_zone = "${element(split(",", var.azs), count.index)}"
count = "${length(split(",", var.cidrs))}"
tags { Name = "${var.name}.${element(split(",", var.azs), count.index)}" }
lifecycle { create_before_destroy = true }
}
我知道如何在 Terraform v1.0.0 中实现我的结果:
output "subnet_ids" { value = "${join(",", list(for subnet in aws_subnet.private.*: subnet.id if substr(subnet.name, -1, 1) != "d" ))}" }
我试图在 Terraform v0.11.14 中做同样的事情,只是切断最后一个子网,希望子网默认按名称排序,但它们不是:
output "subnet_ids" { value = "${join(",", slice(aws_subnet.private.*.id, 0, length(aws_subnet.private.*.id) - 1))}" }
有人知道如何使用 Terraform v0.11.14 实现我想要做的事情吗?
您可以查看以下内容。据我了解,您的过滤是基于 AZ 名称的最后一个字母。因此,也许您可以按 AZ 排序,并删除最后一个,就像您尝试的那样:
locals {
sorted_az = "${sort(aws_subnet.private.*.availability_zone)}"
length_az_minus_1 = "${length(local.sorted_az)-1}"
azs_without_last = "${slice(local.sorted_az, 0, local.length_az_minus_1)}"
}
output "subnet_ids" {
value = "${ matchkeys(aws_subnet.private.*.id, aws_subnet.private.*.availability_zone, local.azs_without_last)}"
}