Terraform错误:空变量需要字符串



在我们的模块模板中有一个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

相关内容

  • 没有找到相关文章

最新更新