Преобразование кода конфигурации Packer 1.6 vsphere-iso из JSON в HCL2 - PullRequest
0 голосов
/ 06 августа 2020

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

Работа в пакере 1.5.6:

JSON

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

Работа в пакере 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» «Тест» : 18: storage = (19: disk_thin_provisioned = true

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

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

Вывод:

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

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

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

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

1 Ответ

0 голосов
/ 06 августа 2020

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

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

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

Кредит предоставляется SwampDragons на Packer форумов за указание на это.

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

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

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

...