HCL 配置语言
注意:此页面是关于 Packer 的 HCL2 模板的。 HCL2 模板最初作为 Beta 功能被 Packer 1.5 版引入。从 v1.7 开始,HCL2 支持不再处于测试阶段,并且是编写 Packer 配置的首选方式。对于稳定的旧风格配置语言,请参阅模板文档。从 v1.6.2 开始,您可以使用 hcl2_upgrade
命令将遗留的 JSON 模板转换为 HCL2 配置文件。
Packer 使用 HashiCorp 配置语言 - HCL - 来对获取构建文件所需的步骤进行简明描述。本页详尽描述了 HCL2 的特性,如果您想快速尝试 HCL2,您还可以阅读 HCL2 入门指南。
构建(Builds)
使用 HCL 的主要目的是定义构建和构建源(sources)。所有其他语言特性的存在只是为了使构建的定义更加灵活和方便。
packer build
需要一个参数。当参数是目录时,将使用 HCL2 格式解析文件夹中名称以 .pkr.hcl
或 .pkr.json
结尾的所有文件。当参数是以 .pkr.hcl
或 .pkr.json
结尾的文件名时,将使用 HCL2 模式对其进行解析。对于所有其他情况;将使用仅解析 JSON 格式的 Packer 旧模式。
参数、块和表达式
HCL 语言的语法由几个基本元素组成:
source "amazon-ebs" "main" {
ami_name = "main-ami"
}
<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {
# Block body
<IDENTIFIER> = <EXPRESSION> # Argument
}
- 块(Blocks)是其他内容的容器,通常表示某种对象的配置,如
soruce
。块有一个块类型,可以有零个或多个标签,并且有一个包含任意数量的参数和嵌套块的主体。Packer 的大部分功能都由配置文件中的顶级块控制。 - 参数(Arguments)为名称分配一个值。它们出现在块内。
- 表达式(表达式)表示一个值,可以是字面值,也可以是通过引用和组合其他值来表示的。它们作为参数的值出现,或出现在其他表达式中。
有关 Packer 语法的完整详细信息,请参阅:
代码组织
HCL 语言使用以 .pkr.hcl
文件扩展名命名的配置文件。还有一种基于 JSON 的语言变体,以 .pkr.json
文件扩展名命名。
配置文件必须始终使用 UTF-8 编码,并且按照惯例通常使用 Unix 样式的行结尾 (LF) 而不是 Windows 样式的行结尾 (CRLF) 进行维护,尽管两者都被接受。
配置顺序
顶级块的顺序并不重要。build
块中 provisioner
块或 post-processor
块的顺序是唯一需要注意排序的例子。