0

随着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。我无法弄清楚支持 Packer 1.6.0 中所做更改的 HCL2 语法。

我尝试了以下方法:

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:存储 =(19:disk_thin_provisioned = true

需要一个右括号来终止表达式。


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

输出:

错误:缺少项目分隔符

在 .\Packer\ConfigFileName.pkr.hcl 第 19 行,在源“vsphere-iso”“测试”中:18:存储 = [ 19:disk_thin_provisioned = true,

应使用逗号来标记下一项的开始。

到目前为止,我还尝试了其他几种不同集合语法的排列,但没有运气。任何建议或提示将不胜感激

4

1 回答 1

1

正确的语法如下:

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

network_adapters请注意,它没有在and之间使用赋值运算符 ={

归功于 Packer 论坛上的 SwampDragons 指出了这一点。


如果您有兴趣了解原因:2020 年 5 月,随着 Packer 1.5.6 的发布,HCL2 中地图的处理方式发生了变化

core/hcl2:地图现在被视为可设置的参数,而不是块。例如标签 = {} 而不是标签 {} [GH-9035]

参考:https ://github.com/hashicorp/packer/blob/master/CHANGELOG.md#156-may-1-2020

于 2020-08-06T16:38:52.493 回答