【发布时间】:2022-12-01 01:36:50
【问题描述】:
希望是一个相对简单的。我有一个使用实验性可选属性功能的对象。
这意味着不需要存在对象属性/键之一。然后,我需要使用 for 循环测试对象组合中所述对象键的空值或假值。
在使用 module_variable_optional_attrs 实验时,似乎如果您使用 lookup() 查找不存在的对象键,它将始终返回 null,而不是默认值,正如您可能期望的那样。
我现在必须使用有条件的 (lookup(connection, "auto_accept", false) == false || lookup(connection, "auto_accept", false) == null) 进行测试
这看起来不是很干净。寻找改进建议。
编辑
主程序
terraform { # Optional attributes and the defaults function are # both experimental, so we must opt in to the experiment. experiments = [module_variable_optional_attrs] } variable "example_var" { type = list(object({ name = string auto_accept = optional(bool) })) description = "Some variable" default = [{ name = "example-name" }] }下面的命令是从
terraform console运行的> lookup(var.example_var[0], "auto_accept") false # now lets make the key undefined > lookup(var.example_var[0], "auto_accept") tobool(null) > lookup(var.example_var[0], "auto_accept", false) tobool(null) > tobool(null) null
【问题讨论】:
-
还有
try选项。 -
lookup键不存在时返回默认值,值不存在时不返回。除此之外,@MarkoE 评论是正确答案。 -
@MarkoE
try没有用,因为如果键未定义,try将返回null,如果键已定义但等于false,则返回 false -
@MattSchuchard,我在帖子中添加了一个编辑,这应该可以说明为什么
lookup()也不是合适的解决方案。 -
@David 我的评论解释了为什么
lookup不起作用,以及为什么您观察到您所做的行为。另外,我现在看到您正在寻找基于价值真实性的条件,而不是价值解析。为什么不只是connection.auto_accept == null?
标签: terraform