在 Terraform 中,变量中是否可以有局部变量?

问题描述 投票:0回答:1

我有这个代码:

locals {
  pet_name = dog
}
variable "colors" {
  default = "${local.pet_name}"

当我尝试申请时,收到“此处可能无法使用变量”错误消息。

variables terraform local-variables
1个回答
1
投票

输入变量的默认值必须是文字值,因为它是模块 API 文档的一部分,因此模块的用户可以理解它,而无需查看模块源代码的其余部分.

如果您想以更动态的方式处理未设置的变量,最好的方法是将默认值设置为

null
,然后在模块的实现中处理这种情况。

例如:

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

locals {
  default_example_thing = "dog"
  actual_example_thing  = coalesce(var.example_thing, local.default_example_thing)
}

然后,您可以在模块中的其他位置使用

local.actual_example_thing
而不是
var.example_thing
来获得应用默认值的最终结果。在这种情况下,这种方法不会添加任何内容,因为
"dog"
是在变量声明中分配给
default
的一个很好的值,但我假设在实践中您打算使用动态值,例如
data
块结果填充默认值。如果这是真的,那么您可能还想向
count
块添加条件
data
,以避免每次
var.example_thing != null
时获取默认值。

这种方法确实意味着模块的用户将无法仅从

variable
块中看到变量设置时发生的情况,因此我建议还添加一个
description
参数,它以自然语言总结行为,作为显式默认值的替代。

© www.soinside.com 2019 - 2024. All rights reserved.