Windows Shell 配置器

原文


类型:windows-shell

Packer 的 windows-shell 配置器使用 cmd 在 Windows 机器上运行命令。该配置器假定它正通过 WinRM 运行。

基础用法

HCL2:

provisioner "windows-shell" {
  inline = ["dir c:\\"]
}

Json:

{
  "type": "windows-shell",
  "inline": ["dir c:\\"]
}

配置参数

下面列出了可用配置选项的参考。唯一必须的元素是 inlinescript。其他选项都是可选的。

以下参数必须选一配置:

  • 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 是要运行的脚本的路径
    • Varsenvironment_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)- 如果配置器完成时间超过配置值(例如 1h10m1s10m),则配置器将超时并失败。

默认的环境变量

除了能够使用 environment_vars 配置自定义环境变量外,配置器还会自动定义某些常用的环境变量:

  • PACKER_BUILD_NAME 值为 Packer 正在运行的构建的名称。这在 Packer 进行多个构建并且您希望将它们彼此能有所区分时最有用。
  • PACKER_BUILDER_TYPE 是用于创建运行脚本的机器的构建器类型。如果您只想在使用特定构建器构建的系统上运行脚本的特定部分,这将很有用。
  • PACKER_HTTP_ADDR 如果使用为文件传输提供 HTTP 服务器的构建器(例如 hypervparallelsqemuvirtualboxvmware),这将被设置为 HTTP 服务器地址。您可以在配置器中使用此地址通过 HTTP 下载大文件。如果您在使用默认文件配置器时遇到较慢的速度,这可能很有用。使用 winrm 通信器的 file 配置器可能会遇到这些类型的困难。

results matching ""

    No results matching ""