init
命令
~> 注意:Packer 的 init
命令不适用于旧版 JSON 模板。您可以使用 hcl2_upgrade
命令将 JSON 配置文件升级到 HCL。
~> 注意:Packer 的 init
命令仅适用于多组件插件 —— 也就是名字带有 packer-plugin- 前缀的插件。要安装单组件插件 —— 就是名字带有 packer-provisioner-、packer-builder-* 等前缀的插件 —— 您必须手动安装插件。
packer init
命令用于下载 Packer 插件二进制可执行文件。使用模板时应首先执行该命令。多次运行此命令总是安全的。尽管运行过程可能会出错,但此命令永远不会删除任何内容。
Packer 目前没有像 Terraform 那样的状态概念。也就是说,目前 packer init
只负责安装Packer插件。
目前,packer init
只能从 GitHub 上的公开项目中下载二进制文件。 GitHub 的公共 API 对每个 IP 每小时可以执行的未经身份验证的请求数做了限制。 Packer 将尽最大努力避免达到这些限制,在本机运行 Packer 的一般场景中,这应该不是问题。否则,您可以设置 PACKER_GITHUB_API_TOKEN
这个环境变量,以便每小时发起更多请求。前往您的个人访问令牌页面以生成新的 Github 令牌。
packer init
将列出所有已安装的插件,然后下载当前缺少的插件的最新版本。
packer init -upgrade
将尝试获取所有插件的最新版本。
使用 required_plugin
块引用一个插件:
packer {
required_plugins {
happycloud = {
version = ">= 2.7.0"
source = "github.com/azr/happycloud"
}
}
}
HashiCorp 官方没有对第三方 Packer 插件以及命名空间不在 hashicorp/*
下的插件进行验证;与所有开源工具一样,在使用新工具时请自行尽职调查。
插件的选择
插件的选择取决于 required_plugins
块中定义的源和版本约束。对于 github.com/azr/happycloud
这个声明所引用的插件,Packer 将查询其完全限定地址 https://github.com/azr/packer-plugin-happycloud
以查找与主机操作的版本约束相匹配的插件系统。
packer init
将安装与 required_plugins
部分中的定义的版本约束相匹配的最新版本。确保设置正确的版本约束。插件将被安装在插件目录中。
如果想要了解更多插件安装的原理,请阅读相关文档。
隐式引用插件
这是为将 Packer 发布与插件发布解耦而进行的一系列重大破坏性变更的一部分。为了使转换更容易,我们将把这些插件的组件标记为“已移出(moved out)”。如果在配置文件中引用了某个属于已移出插件的组件,但在 required_plugin
块中没有引用该插件,那么 packer init
将自动下载并安装该插件。然后 Packer 将显示警告并建议您将插件添加到 required_plugin
块中。我们建议您使用 required_plugin
块,即使您只使用官方插件,因为它允许您限制插件版本以避免将来出现意外。
选项
-upgrade
- 除了安装缺少的插件,还会将已安装的插件更新到最新的可用版本(如果有新的更高版本)。请注意,升级行为仍然是遵守配置的版本约束的。