在 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
希望我说清楚了:)
根据此特定模块的 documentation,secondary_cidr
不是必需的参数。在这种情况下,您不必提供空字符串。您要么完全省略 secondary_cidr
,要么将 null
分配给它。由于 secondary_cidr
需要一个数组,很可能空数组 []
也可以。
我正在处理我的 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
希望我说清楚了:)
根据此特定模块的 documentation,secondary_cidr
不是必需的参数。在这种情况下,您不必提供空字符串。您要么完全省略 secondary_cidr
,要么将 null
分配给它。由于 secondary_cidr
需要一个数组,很可能空数组 []
也可以。