Преобразование кода конфигурации Packer 1.6 vsphere-iso из JSON в HCL2

С выпуском Packer 1.6 появилось несколько устаревших полей в сборщике vsphere-iso. Судя по всему, это изменение формата/типа, потому что поля на самом деле все еще существуют, но только как свойства. Примером изменений являются следующие:


Работа в Packer 1.5.6:

JSON

"disk_size": 123456,
"disk_thin_provisioned": true
"network": "VM Network",
"network_card": "vmxnet3"

Работа в Packer 1.6.0:

JSON

"storage": [
    {
        "disk_size": 123456,
        "disk_thin_provisioned": true
    }
],
"network_adapters": [
    {
        "network": "VM Network",
        "network_card": "vmxnet3"
    }
]

Проблема, с которой я сталкиваюсь на данный момент, заключается в том, что я использую Packer 1.6.0 и пытаюсь преобразовать приведенный выше рабочий код JSON в HCL2. Я не могу понять синтаксис HCL2, который поддерживает изменения, внесенные в Packer 1.6.0.

Я пробовал следующее:

network_adapters = {
    network_card = "vmxnet3"
    network = "VM Network"
}

Выход:

Аргумент с именем network_adapter здесь не ожидается.


network_adapters = (
    network_card = "vmxnet3"
    network = "VM Network"
)

Выход:

Ошибка: несбалансированные скобки

в .\Packer\ConfigFileName.pkr.hcl строка 19, в исходном коде vsphere-iso Test: 18: storage = ( 19: disk_thin_provisioned = true

Ожидается, что закрывающая скобка завершит выражение.


network_adapters = [
    network_card = "vmxnet3",
    network = "VM Network"
]

Выход:

Ошибка: отсутствует разделитель элементов

в .\Packer\ConfigFileName.pkr.hcl строка 19, в исходном коде vsphere-iso Test: 18: storage = [ 19: disk_thin_provisioned = true,

Ожидается запятая для обозначения начала следующего элемента.

Я также пробовал несколько других перестановок с другим синтаксисом коллекций, пока безуспешно. Любые предложения или советы будут очень признательны


person HiTech    schedule 06.08.2020    source источник
comment
network_adapters был List(Map) в JSON, поэтому, вероятно, он также должен быть List(Map) в HCL. Обратите также внимание на опечатку в s.   -  person Matt Schuchard    schedule 06.08.2020
comment
@MattSchuchard Спасибо за ответ. Опечатки изолированы от моего кода здесь, в стеке. Я также рассматривал синтаксис List(Map), но это тоже не сработало. Если список (карта) не является следующим в HCL Packer - [ { Key1 = Value1, Key2 = Value2 } ]   -  person HiTech    schedule 06.08.2020


Ответы (1)


Правильный синтаксис следующий:

network_adapters  {
    network_card = "vmxnet3",
    network = "VM Network"
}

Обратите внимание, что здесь не используется оператор присваивания = между network_adapters и {.

Спасибо SwampDragons на форумах Packer за указание на это.


Если вам интересно знать, почему: в мае 2020 года с выпуском Packer 1.5.6 в HCL2 произошли изменения в обработке карт.

core/hcl2: карты теперь рассматриваются как устанавливаемые аргументы, а не как блоки. Например, теги = {} вместо тегов {} [GH-9035]

Ссылка: https://github.com/hashicorp/packer/blob/master/CHANGELOG.md#156-may-1-2020

person HiTech    schedule 06.08.2020