Packer 命令行 (CLI)
我们通过命令行界面操作 Packer,所有与 Packer 的交互都是通过 packer
工具完成的。与许多其他命令行工具一样,packer
工具需要一个子命令,并且该子命令也可能有其他选项。子命令使用 packer SUBCOMMAND
执行,其中 SUBCOMMAND
是您希望执行的实际命令。
如果单独运行 packer
,将显示所有可用的子命令和它们所做的简要概要的帮助信息。除此之外,您还可以运行带有 -h
标志的任意 packer
命令来为特定子命令输出更详细的帮助。
本书将包含有关每个子命令的信息。
机器可读的输出
默认情况下,Packer 的输出非常易于人类阅读。它使用漂亮的格式、间距和颜色,以使 Packer 易于使用。但是,Packer 也考虑到了自动化场景。为此,Packer 也支持机器可读的输出设置,允许您在自动化环境中使用 Packer。
因为机器可读的输出格式是面向 Unix 工具设计的,所以它是易于被 awk
/sed
/grep
以及其他工具处理的,并提供了熟悉的接口,无需您学习新格式。
启用机器可读输出
可以通过对任意 Packer 命令添加 -machine-readable
标志位来启用机器可读的输出格式。这立即使所有输出在标准输出流上的信息变为机器可读的。日志信息(如果启用)会继续出现在标准错误流上。输出示例如下所示:
$ packer -machine-readable version
1498365963,,version,1.0.2
1498365963,,version-prelease,
1498365963,,version-commit,3ead2750b+CHANGES
1498365963,,ui,say,Packer v1.0.2
我们将在后面的章节种将更详细地介绍该格式。但正如您所见,输出立即变得对机器友好。尝试其他的一些带有 -machine-readable
标志的命令看看!
备注:-machine-readable
标志是为自动化环境设计的,并且与 -debug
标志是互斥的,后者是为交互式环境设计的。
机器可读的格式
机器可读格式是面向行的、以逗号分隔的文本格式。这使得使用标准 Unix 工具(例如 awk
或 grep
)以及通用编程语言(例如 Ruby 或 Python)更加方便地进行解析。
格式为:
timestamp,target,type,data...
每个组件解释如下:
timestamp
- 是消息打印时的 UTC Unix 时间戳。target
- 当调用packer build
时,target
可以为空,也可以指定构建的名称,例如:amazon-ebs
。当构建正在进行时它通常是空的,当引用特定构建的制品时它是构建名称。type
- 是正在输出的机器可读消息的类型。最常见的两种类型是ui
和artifact
。data
- 是零个或多个与先前type
关联的用逗号分隔的值。该数据的数量和含义取决于type
,因此我们必须阅读与类型相关的文档才能完全理解。
在格式化的过程中,如果数据包含逗号,它将替换为 %!(PACKER_COMMA)
。这比用诸如 \'
之类的转义字符要更好,因为它对 awk
之类的工具更友好。
格式化中遇到的换行符被替换为各自的标准转义序列。换行符在输出中变为 \n
。回车变为 \r
。
机器可读消息的类型
以下是一份我们可能会在机器可读输出中看到的类型的不完整列表,当你运行 packer build
时,你会看到这些数据类型:
ui
: 这表示所提供的信息是一个人类可读的字符串,即使我们设置成机器可读模式,它也会被发送到 stdout。与此类型相关联的有三种“数据”子类型:say
: 在非机器可读的格式中,该类型表示加粗。通常它用于关于在构建过程中开始新步骤的公告message
: 最常用的消息类型,用于构建过程中的基本更新信息error
: 错误信息
artifact-count
: 该类型数据告诉我们一个特定的构建产生了多少制品artifact
: 该数据类型告诉我们 Packer 在构建期间创建什么。输出的格式模式为:timestamp, buildname, artifact, artifact_number, key, value
,其中key
和value
包含有关制品的信息。 一个例子:1539967803,,ui,say,\n==> Builds finished. The artifacts of successful builds are: 1539967803,amazon-ebs,artifact-count,2 1539967803,amazon-ebs,artifact,0,builder-id,mitchellh.amazonebs 1539967803,amazon-ebs,artifact,0,id,eu-west-1:ami-04d23aca8bdd36e30 1539967803,amazon-ebs,artifact,0,string,AMIs were created:\neu-west-1: ami-04d23aca8bdd36e30\n 1539967803,amazon-ebs,artifact,0,files-count,0 1539967803,amazon-ebs,artifact,0,end 1539967803,,ui,say,--> amazon-ebs: AMIs were created:\neu-west-1: ami-04d23aca8bdd36e30\n 1539967803,amazon-ebs,artifact,1,builder-id, 1539967803,amazon-ebs,artifact,1,id, 1539967803,amazon-ebs,artifact,1,string, 1539967803,amazon-ebs,artifact,1,files-count,0 2018/10/19 09:50:03 waiting for all plugin processes to complete... 1539967803,amazon-ebs,artifact,1,end
运行 packer version
时,会看到这些数据类型:
version
: 正在运行的 Packer 的版本version-prerelease
: 如果当前版本是预发布版该值为dev
,否则为空字符串version-commit
: 当前使用的 Packer 所属分支的 git hash;一般用于 Packer 开发人员
自动补全
packer
命令具有可选的子命令启用自动补全功能,可以运行 packer -autocomplete-install
为您使用的 shell 启用该功能。这样做之后,您可以打开一个新的 shell 并使用该功能。
例如,假如我们在每个提示行的末尾输入一个 tab
:
$ packer p
plugin build
$ packer build -
-color -debug -except -force