Windows Shell 配置器
类型:windows-shell
Packer 的 windows-shell
配置器使用 cmd
在 Windows 机器上运行命令。该配置器假定它正通过 WinRM 运行。
基础用法
HCL2:
provisioner "windows-shell" {
inline = ["dir c:\\"]
}
Json:
{
"type": "windows-shell",
"inline": ["dir c:\\"]
}
配置参数
下面列出了可用配置选项的参考。唯一必须的元素是 inline
或 script
。其他选项都是可选的。
以下参数必须选一配置:
inline
([]string)- 一组要执行的命令。这些命令由换行符连接起来并变成一个文件,因此它们都在相同的上下文中执行。这允许您在一个命令中更改目录,并在下一个命令中使用目录中的内容,依此类推。inline
脚本是在运行 Packer 的机器中完成简单任务的最简单方法。script
(string) - 要执行的脚本的路径。此路径可以是绝对路径或相对路径。如果是相对路径,就是相对于Packer执行时的工作目录。scripts
([]string)- 要执行的脚本数组。脚本将按照指定的顺序执行。每个脚本都是独立执行的,因此一个脚本中的变量等状态不会传递到下一个脚本。
可选参数:
binary
(boolean) - 如果为true
,则指定脚本是二进制文件,因此 Packer 不会将 Windows 换行符转换为 Unix 换行符(如果有的话)。默认为false
。valid_exit_codes
([]int) - 脚本的有效退出代码。默认值为 0。env
(map(string))- 在execute_command
之前注入的键/值对映射。 Packer 也会默认将一些环境变量注入到环境中,这将在下面的部分中介绍。重复的env
设置会覆盖environment_vars
中的设置。environment_vars
([]string)- 在execute_command
之前注入的键/值对数组。格式应为key=value
。 Packer 也会默认将一些环境变量注入到环境中,这将在下面的部分中介绍。execute_command
(string)- 用于执行脚本的命令。 默认值为{ { .Vars } }"{ { .Path } }"
。 该值是一个模板引擎。因此,您可能在此字段中使用用户变量和模板函数。此外,还有三个可用的额外变量:Path
是要运行的脚本的路径Vars
是environment_vars
的列表(如果已配置)。
remote_path
(string) - 脚本将被上传到机器中的路径。默认值为"c:/Windows/Temp/script.bat"
。此值必须是可写位置,并且所有父目录必须已经存在。start_retry_timeout
(string) - 尝试启动远程进程的时间量。默认情况下,这是"5m"
或 5 分钟。存在此设置是为了处理可能重新启动的时间,例如系统重新启动。如果重新启动需要更长的时间,请将此设置为更高的值。
所有配置器共有的参数:
pause_before
(duration) - 执行前休眠一段时间。max_retries
(int) - provisioner 在失败的情况下重试的最大次数。默认为零 (0)。零表示不会重试错误。only
(array of string) - 只运行列表中指定的的配置器程序。override
(object) - 使用特定配置器的不同设置覆盖配置器,例如:
HCL2:
source "null" "example1" {
communicator = "none"
}
source "null" "example2" {
communicator = "none"
}
build {
sources = ["source.null.example1", "source.null.example2"]
provisioner "shell-local" {
inline = ["echo not overridden"]
override = {
example1 = {
inline = ["echo yes overridden"]
}
}
}
}
Json:
{
"builders": [
{
"type": "null",
"name": "example1",
"communicator": "none"
},
{
"type": "null",
"name": "example2",
"communicator": "none"
}
],
"provisioners": [
{
"type": "shell-local",
"inline": ["echo not overridden"],
"override": {
"example1": {
"inline": ["echo yes overridden"]
}
}
}
]
}
timeout
(duration)- 如果配置器完成时间超过配置值(例如1h10m1s
或10m
),则配置器将超时并失败。
默认的环境变量
除了能够使用 environment_vars
配置自定义环境变量外,配置器还会自动定义某些常用的环境变量:
PACKER_BUILD_NAME
值为 Packer 正在运行的构建的名称。这在 Packer 进行多个构建并且您希望将它们彼此能有所区分时最有用。PACKER_BUILDER_TYPE
是用于创建运行脚本的机器的构建器类型。如果您只想在使用特定构建器构建的系统上运行脚本的特定部分,这将很有用。PACKER_HTTP_ADDR
如果使用为文件传输提供 HTTP 服务器的构建器(例如hyperv
、parallels
、qemu
、virtualbox
和vmware
),这将被设置为 HTTP 服务器地址。您可以在配置器中使用此地址通过 HTTP 下载大文件。如果您在使用默认文件配置器时遇到较慢的速度,这可能很有用。使用winrm
通信器的file
配置器可能会遇到这些类型的困难。