Terraform: Custom json свойств, включая точки, не работают - PullRequest
1 голос
/ 09 июля 2020

У меня проблемы с получением определенного свойства c из json вывода из terraform.

Вот мой код:

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», мне нужно имя хоста в моем выводе, которым является это свойство: Custom.VirtualMachine.Network0.Hostname

Ошибка:

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".

Что я здесь делаю не так?

Спасибо

Дэн

1 Ответ

1 голос
/ 10 июля 2020

Используя точечную нотацию, вы говорите, что у него есть атрибут под названием «Custom», у которого есть атрибут под названием «VirtualMachine», у которого есть атрибут под названием «Network0» и т. Д. c. Вместо этого попробуйте использовать скобки:

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

Точечная запись допустима до тех пор, пока одно (или несколько) имен атрибутов не будет содержать точку; в этот момент он ломается. Фактически, в худшем сценарии вы могли бы иметь запись с именем "one.two" и другую запись с именем "one" с податрибутом, называемым "two" - если вы используете точечную нотацию в этом случае, он выберет последний элемент , а вместо ошибки вы получите неожиданное значение.

...