我有这个代码:
locals {
pet_name = dog
}
variable "colors" {
default = "${local.pet_name}"
当我尝试申请时,收到“此处可能无法使用变量”错误消息。
输入变量的默认值必须是文字值,因为它是模块 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
参数,它以自然语言总结行为,作为显式默认值的替代。