Terraform条件语句 - 如果变量不存在

53

我有以下病情:

resource "aws_elastic_beanstalk_application" "service" {
  appversion_lifecycle {
    service_role          = "service-role"
    delete_source_from_s3 = "${var.env == "production" ?   false : true}"
  }
}
如果var.env被设置为production,我就得到了想要的结果。然而如果var.env未定义,terraform plan会失败,因为变量从未被定义过。如何让它工作,而且不需要定义那个变量呢?

你的意思是不需要定义默认值吗? - logicaldiagram
3个回答

89

这个答案帮助了我解决当前项目中创建安全组和规则模块的问题。虽然我还没有完全实现它,但这使我能够在将复杂映射构建的列表展平时将值设置为null。 - jpancoast
1
完全不知道这个存在。太神奇了。非常感谢。 - Noah Sparks
正是我所需要的,谢谢! - Subir

37

如果您使用的是 Terraform 0.12 或更高版本,您可以将特殊值null分配给参数,以将其标记为“未设置”。

variable "env" {
    type = "string"
    default = null
}

当前版本不允许您将其留空。


21
但是如何在以后检查它是否已被取消设置? - Normal
12
显然,您可以检查var.env == null - jchook

18
您可以将变量的默认值设置为空字符串:
variable "env" {
  description = "Env where the module is deployed."
  type        = string
  default     = ""
}

完成这一步骤后,您的检查var.env == "production"将产生false,并且参数delete_source_from_s3将被赋值为true

顺便提一下,在语句中不需要插值,

"${var.env == "production" ? false : true}"

只需使用以下语句即可,

delete_source_from_s3 = var.env == "production" ? false : true

https://discuss.hashicorp.com/t/how-do-write-an-if-else-block/2563


6
delete_source_from_s3 = var.env != "production" 相同。 - Morgan Christiansson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接