在 Terraform 中是否有等同于 omit 的东西?

Is there an equivalent to omit in Terraform?

我正在处理我的 Terraform 代码,我想使用相同的代码,无论变量是否设置或等于 ""。 但是,如果我在 aws_vpc 模块中传递带有 "" 的变量,则会引发异常,说明需要有效的 cidr。

如果它是 Ansible,我会使用 | omit 过滤器,它会省略参数并且如果未设置变量则不会将其传递给模块。

有代码。

module "server_vpc" {
  source = "terraform-aws-modules/vpc/aws"

  name = "servers_vpc"
  cidr = var.main_cidr
  secondary_cidr = [var.secondary_cidr]

  azs             = var.azs
  public_subnets  = local.public_subnets
  private_subnets = var.private_subnets

  enable_nat_gateway = true
  create_igw         = true
}

在此代码中,如果变量等于 ""(默认),则 public_subnets 等于 [var.main_cidr],如果变量已设置,则 public_subnets 等于 [var.main_cidr, var.secondary_cidr].

但是没有像我希望的那样工作的部分是带有 secondary_cidr = [var.secondary_cidr] 的那一行。
当变量包含有效的 cidr 时,它可以工作,但是当变量未设置且等于默认值时 "",Terraform 从 aws vpc 模块引发错误,解释需要有效的 cidr。

所以我想要一种使用模块创建此 vpc 的方法,但如果变量等于 "".

,则不设置参数 secondary_cidr

希望我说清楚了:)

根据此特定模块的 documentationsecondary_cidr 不是必需的参数。在这种情况下,您不必提供空字符串。您要么完全省略 secondary_cidr,要么将 null 分配给它。由于 secondary_cidr 需要一个数组,很可能空数组 [] 也可以。