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。只能通过精确的版本约束(= 运算符或不写运算符)来选择预发布版本。预发布版本无法匹配 >=、~> 等不精确的运算符。

results matching ""

    No results matching ""