Packer 配置
注意:此页面是关于 Packer 的 HCL2 模板的。 HCL2 模板最初作为 Beta 功能被 Packer 1.5 版引入。从 v1.7 开始,HCL2 支持不再处于测试阶段,并且是编写 Packer 配置的首选方式。对于稳定的旧风格配置语言,请参阅模板文档。从 v1.6.2 开始,您可以使用 hcl2_upgrade
命令将遗留的 JSON 模板转换为 HCL2 配置文件。
请注意:packer
块仅在 Packer v1.6.5 及更高版本中可用。
packer
配置块用于配置 Packer 本身的一些行为,例如运行本配置文件所需的最低要求 Packer 版本。
Packer 块的语法
每个 packer
块都可以包含一些与 Packer 行为相关的设置。在 packer
块中,只能使用常量值; 参数值不能引用命名对象,如资源、输入变量等,也不能使用任何 Packer 语言内建函数。
packer
块支持的各种选项在以下部分中描述。
设定所需要的 Packer 版本
required_version
设置可以设置一个版本约束字符串,它指定哪些版本的 Packer 可以运行当前的配置文件。
如果 Packer 的运行版本与设定的约束不匹配,Packer 将抛出错误并退出而不采取任何进一步的操作。
可以在多人协作环境中使用 Packer 版本约束以确保每个人都使用特定的 Packer 版本,或者限制可以使用的 Packer 的最低版本。
设置插件需求
请注意,required_plugins
块仅在 Packer v1.7.0 及更高版本中可用。
required_plugins
块指定运行当前配置文件所需要的所有插件,每个本地插件名称都映射到对应的源地址和版本约束。
packer {
required_plugins {
happycloud = {
version = ">= 2.7.0"
source = "github.com/hashicorp/happycloud"
}
}
}
可以访问插件获取更多信息。
版本约束字符串
在 Packer 允许为某物设置可接受版本范围的任何地方,都需要使用一个特殊格式的字符串,称为版本约束。
版本约束语法
Packer 的版本约束语法与其他依赖管理系统(如 Bundler 和 NPM)使用的语法非常相似。
required_version = ">= 1.2.0, < 2.0.0"
版本约束是包含一个或多个条件的字符串,这些条件由逗号分隔。
每个条件都包含一个运算符和一个版本号。
版本号应该是一系列由句点分隔的数字(如 1.2.0
),可以选择带有后缀以代表是测试版。
以下是合法的运算符:
=
(或者忽略不写):只允许使用确定的版本号。不能与其他条件结合。!=
:排除指定的版本号。>、>=、<、<=
:与指定版本进行比较,允许计算结果为真的版本。>
/>=
请求较新的版本,<
/<=
请求较旧的版本。~>
:允许指定版本,以及更新的版本,只增加指定版本号的最特定段。例如,~> 0.9
相当于>= 0.9,< 1.0
,而~> 0.8.4
,相当于>= 0.8.4,< 0.9
。这通常称为悲观约束算子(pessimistic constraint operator)。
版本约束的行为
满足所有约束的版本号是可以使用的。
Packer 参考版本约束来确定当前是否有可接受的版本。
预发布版本是一个版本号,其中包含一个减号引入的后缀,例如 1.2.0-beta
。只能通过精确的版本约束(=
运算符或不写运算符)来选择预发布版本。预发布版本无法匹配 >=、~>
等不精确的运算符。