Terraform条件-如果变量不存在

seb*_*ian 3 terraform

我有以下情况:

resource "aws_elastic_beanstalk_application" "service" {
  appversion_lifecycle {
    service_role          = "service-role"
    delete_source_from_s3 = "${var.env == "production" ?   false : true}"
  }
}
Run Code Online (Sandbox Code Playgroud)

如果var.env设置为生产,我会得到想要的结果。

谢谢!

但是,如果未定义var.env,则terraform计划将失败,因为从未定义该变量。我如何才能使它工作而不必定义该变量?

小智 17

似乎这些天您还可以使用“尝试”来检查是否设置了某些内容。

try(var.env, false)
Run Code Online (Sandbox Code Playgroud)

之后您的代码将工作,因为 var.env 现在定义为值“false”,即使“var.env”从未在某处定义。

https://www.terraform.io/docs/configuration/functions/try.html


Shi*_*wat 6

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

variable "env" {
    type = "string"
    default = null
}
Run Code Online (Sandbox Code Playgroud)

您只能将其留空,而不是使用当前版本。

  • 显然你可以检查 `var.env == null` (12认同)
  • 但稍后如何检查它是否未设置? (11认同)

Kon*_*rov 6

您可以将变量的默认值设置为空字符串:

variable "env" {
  description = "Env where the module is deployed."
  type        = string
  default     = ""
}
Run Code Online (Sandbox Code Playgroud)

完成后,您的检查var.env == "production"将产生false并且参数 delete_source_from_s3 将被分配给 value true

旁注,语句中不需要插值,

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

随走随走

delete_source_from_s3 = var.env == "production" ? false : true
Run Code Online (Sandbox Code Playgroud)

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

  • `delete_source_from_s3 = var.env != "生产"` 是相同的 (6认同)