在Terraform升级0.12之后,我不再可以在自定义模块上调用cidrhost。
抱怨是“前缀”必须是字符串类型。
仅尝试通过cidrhost修改自定义模块中的0索引元素,这非常简单。
尝试过“ tostring”和其他各种操作,但仍然没有解决方法。
module "network1_subnets" {
inside_subnets = ["1"]
inside_subnets_name = ["Networking1"]
source = "./inside_subnets"
vpc_cidr = aws_vpc.main.cidr_block
vpc_id = aws_vpc.main.id
dc_name = var.DC_NAME
}
resource "aws_subnet" "inside_subnets-a" {
count = length(var.inside_subnets)
vpc_id = var.vpc_id
availability_zone = data.aws_availability_zones.available.names[0]
cidr_block = cidrsubnet(
cidrsubnet(var.vpc_cidr, 8, element(var.inside_subnets, count.index)),
1,
0,
)
#tags = {
# Name = ${lower(var.dc_name)}-${element(var.inside_subnets_name,
count.index)}-pri
#}
}
data "template_file" "prdfwl00_init" {
template = file("prdfwl00-config.tpl")
vars = {
network1 = cidrhost(element(module.network1_subnets.subnets-
a, 0), 4)
}
}
错误:
Invalid function argument on firewall_launch.tf line 5, in data "template_file" "prdfwl00_init": 5: network1 = cidrhost(element(module.network1_subnets.subnets-a, 0), 4) |---------------- | module.network1_subnets.subnets-a is tuple with 1 element Invalid value for "prefix" parameter: string required.
答案 0 :(得分:0)
这似乎是subnets-a
输出而不是您的cidrhost
调用的问题。具体来说,该模块似乎是列表列表,而不是字符串列表。
您没有在此处的问题中包含output "subnets-a"
的定义,但是我的猜测是,如果您查看该定义,将会发现它包含以下内容:
output "subnets-a" {
value = [some-other-expression]
}
如果是这样,您可以删除方括号以避免创建一个单元素列表,而只需返回some-other-expression
(无论实际上是什么)即可:
output "subnets-a" {
value = some-other-expression
}
只要您的真实表达式产生一个字符串列表,您就应该得到想要的结果。
“升级指南”部分Referring to List Variables中有关于此问题的更多信息。