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

时间:2019-08-29 13:46:51

标签: terraform

在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.

1 个答案:

答案 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中有关于此问题的更多信息。