Terraform 0.11.x空属性检查方法咨询:属性不存在报错问题
Terraform 0.11.x 属性空值检查问题解答
Terraform 0.11.x 不支持直接在属性访问时进行空值检查,当尝试访问不存在或为null的属性时,会直接抛出object does not have an attribute subnet_domain_name这类错误,和你遇到的情况一致。
针对你提供的代码场景,core_subnet.svc_subnet.subnet_domain_name为null是报错的直接原因,在0.11.x版本中可以通过以下方式规避:
方法1:用lookup函数指定默认值
使用lookup函数从对象中获取属性,当属性不存在或为null时返回预设的默认值,避免直接访问属性导致报错:
scaled_node_fqdn_host_names = "${ formatlist("%s.%s", local.scaled_node_host_names, lookup(core_subnet.svc_subnet, "subnet_domain_name", "") )}"
如果subnet_domain_name为null,会用空字符串替代,生成类似hostname.的结果,若需要更严谨的格式,可以结合条件判断调整。
方法2:结合条件判断生成不同格式
如果希望当subnet_domain_name为空时只保留主机名,可在formatlist中加入条件判断:
scaled_node_fqdn_host_names = "${ formatlist( lookup(core_subnet.svc_subnet, "subnet_domain_name", "") != "" ? "%s.%s" : "%s", local.scaled_node_host_names, lookup(core_subnet.svc_subnet, "subnet_domain_name", "") ) }"
这样当属性为空时,直接输出主机名,不为空时才拼接域名后缀。
需要注意的是,更完善的空值处理(如try函数、可选属性校验)是在Terraform 0.12及以后版本才引入的特性,0.11.x无法使用这些高级功能,只能通过上述兼容方法处理空值属性问题。
内容的提问来源于stack exchange,提问作者Inder malviya
相关产品推荐
相关产品推荐

