方法一:
在我们的模块模板中有一个block如下:
...
%{ for ip in int.ip_addr ~}
- type: static
address: ${int.ip}
netmask: ${int.cidr}
%{ endfor ~}
%{ if length(int.routes) != 0 ~}
routes:
%{ for dst in int.routes ~}
- gateway: ${int.routes_to}
network: ${int.routes_via}
%{ endfor ~}
%{ endif ~}
...
在我们的资源中,我们像这样定义,它是有效的。但是,这需要定义空变量。
省略空变量是terraform中的默认表达式吗?
linux_networks = [
{
bridge = "br0"
device = "eth0"
vlan = 11
ips = []
routes = [ "10.20.230.0/24","10.20.231.64/26" ]
route_gateway = "10.20.232.1"
},
{
bridge = "br1"
device = "eth1"
ips = []
routes = []
route_gateway = ""
}
方法一:optional
属性/默认值
从Terraform 1.3开始,你可以在嵌套变量中定义可选属性的默认值。
在本例中,如果没有给定值,linux_networks[*].routes
将被设置为空列表。
variable "linux_networks" {
type = list(object({
# ... other attributes ...
routes = optional(list, [])
}))
default = []
# ... other variable attributes ...
}
查看更多堆栈溢出的答案和相关的Terraform文档
方法二:try
函数如果不能更改变量定义,可以在每个访问该属性的地方检查是否缺少变量。
%{ if length(try(int.routes, [])) != 0 ~}
参见Terraform docs fortry