【问题标题】:Terraform conditionals - if variable does not existTerraform 条件 - 如果变量不存在
【发布时间】:2019-04-11 12:56:31
【问题描述】:

我有以下情况:

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 将失败,因为从未定义过变量。
我怎样才能让它工作,而不必定义该变量?

【问题讨论】:

  • 你的意思是不用定义默认值?

标签: terraform


【解决方案1】:

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

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

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

【讨论】:

  • 但是以后如何检查它是否未设置?
  • 显然你可以查看var.env == null
【解决方案2】:

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

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

【讨论】:

  • delete_source_from_s3 = var.env != "production" 一样
【解决方案3】:

似乎这些天你也可以使用try 来检查是否设置了某些内容。

try(var.env, false)

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

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

【讨论】:

  • 这个答案帮助我完成了我当前的项目,为安全组和规则创建了一个模块。我还没有完全工作,但这允许我在展平由复杂地图构建的列表时将值设置为 null。
  • 不知道这存在。惊人的。非常感谢。
  • 正是我需要的,谢谢!
猜你喜欢
  • 2018-01-15
  • 2021-11-05
  • 1970-01-01
  • 2021-09-18
  • 2018-09-09
  • 2022-11-14
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多