Terraform:自定义json属性,包括不起作用的点



我正在处理从terraform的json输出中获取特定属性的问题。

这是我的代码:

output "Hostname" {
value = [
for props in sort(vra_deployment.CentOS7VM.resources.*.properties_json) :
jsondecode(props).Custom.VirtualMachine.Network0.Hostname
]
}

以下是terraform show的代码段输出

properties_json = jsonencode(
{
Custom.VirtualMachine.Network0.Hostname = "myhost.foo.bar"
Custom.VirtualMachine.Network0.Network  = "192.168.111.0/24"
VirtualMachine.Network0.Address         = "192.168.111.39"
VirtualMachine.Network0.SubnetMask      = "255.255.255.0"
account                                 = "vsan-yay"
address                                 = "192.168.111.39"
...
}

我可以输出";地址";例如或甚至";账户";,但没有以";自定义";,我需要输出中的主机名,它是这样的属性:Custom。虚拟机。网络0。主机名

错误:

Error: Unsupported attribute
on main.tf line 49, in output "Hostname":
49:     jsondecode(props).Custom.VirtualMachine.Network0.Hostname
This object does not have an attribute named "Custom".

我在这里做错了什么?

感谢

Dan

通过使用点表示法,您可以说它有一个名为"自定义";,其具有称为";VirtualMachine";,其具有称为";Network0";,等等。试着使用括号表示法:

... jsondecode(props)["Custom.VirtualMachine.Network0.Hostname"]

在一个(或多个(属性名称包含点之前,点表示法是可以的;到那时它就坏了。事实上,在更糟糕的情况下,可以想象有一个名为"one.two"的条目和另一个名为主属性"two""one"的条目——如果在这种情况下使用点符号,它将选择后一个条目,而不是出现错误,您只会得到一个意外的值。

最新更新