Terraform 012升级-带模块调用的cidrsubnet

Terraform 012升级-带模块调用的cidrsubnet,terraform,Terraform,terraform升级0.12后,我无法再在自定义模块上调用cidrhost 投诉是“前缀”必须是字符串类型 只是尝试通过cidrhost修改自定义模块中的0索引元素,这相当简单 尝试了“tostring”和其他各种操作,但仍然没有解决方案 module "network1_subnets" { inside_subnets = ["1"] inside_subnets_name = ["Networking1"] source = "./insi

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)
  }
}
错误:


这似乎是
子网-a
输出的问题,而不是
cidrhost
调用的问题。具体来说,模块似乎是一个列表列表,而不是字符串列表

您在这里的问题中没有包含
输出“subnets-a”
的定义,但我的猜测是,如果您查看定义,您会发现它包含如下内容:

output "subnets-a" {
  value = [some-other-expression]
}
如果是这样,您可以删除括号以避免创建一个元素列表,而只返回
其他表达式(不管它实际上是什么):

只要您的实际表达式生成一个字符串列表,您就应该得到您想要的结果


有关此问题的更多信息,请参阅升级指南部分。

这似乎是
子网-a
输出的问题,而不是
cidrhost
调用的问题。具体来说,模块似乎是一个列表列表,而不是字符串列表

您在这里的问题中没有包含
输出“subnets-a”
的定义,但我的猜测是,如果您查看定义,您会发现它包含如下内容:

output "subnets-a" {
  value = [some-other-expression]
}
如果是这样,您可以删除括号以避免创建一个元素列表,而只返回
其他表达式(不管它实际上是什么):

只要您的实际表达式生成一个字符串列表,您就应该得到您想要的结果


升级指南部分中有关于这个问题的更多信息。

很有趣-我没有想到输出。事实上,我正在输出到一个列表,该列表需要在以后检索这些值。输出“subnets-a”{value=[aws_subnets.inside_subnets-a.*.cidr_block,]}flatte(),如文档中所示(我查看了该文档,但没有看到),这是正确的答案。有趣的是,我没有想到输出。事实上,我正在输出到一个列表,该列表需要在以后检索这些值。输出“subnets-a”{value=[aws_subnets.inside_subnets-a.*.cidr_block,]}flatte(),如文档中所示(我查看了该文档,但没有看到),这是这里的正确答案。
output "subnets-a" {
  value = some-other-expression
}