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 块的顺序是唯一需要注意排序的例子。

results matching ""

    No results matching ""