windows-shell 프로비저너

windows-shell 프로비저너 (windows-shell provisioner)

Official

windows-shell Packer 프로비저너는 cmd 를 사용해 Windows 머신에서 커맨드를 실행해요. 이 프로비저너는 WinRM을 실행하는 머신과 통신하도록 설계됐어요.

출처: Packer 공식 문서

본문

Basic Example (기본 예시)

아래 예시는 완전히 동작해요.

HCL2 / JSON

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

Configuration Reference (설정 참조)

사용 가능한 구성 옵션 참조는 아래에 나열돼요. 필수 요소는 "inline" 또는 "script" 중 하나뿐이에요. 다른 모든 옵션은 선택이에요.

다음 중 정확히 하나가 필요해요:

  • inline (array of strings) — 실행할 커맨드 배열이에요. 커맨드들은 줄바꿈으로 연결되어 단일 파일이 되므로 모두 같은 컨텍스트에서 실행돼요. 이를 통해 한 커맨드에서 디렉터리를 바꾸고 다음 커맨드에서 그 디렉터리의 무언가를 사용하는 식으로 할 수 있어요. 인라인 스크립트는 머신 안에서 간단한 작업을 수행하는 가장 쉬운 방법이에요.
  • script (string) — 머신에 업로드해 실행할 스크립트의 경로. 절대 또는 상대 경로일 수 있어요. 상대 경로라면 Packer가 실행될 때 작업 디렉터리를 기준으로 해요.
  • scripts (array of strings) — 실행할 스크립트 배열. 스크립트들은 지정된 순서대로 업로드되고 실행돼요. 각 스크립트는 격리되어 실행되므로 한 스크립트의 변수 같은 상태가 다음 스크립트로 넘어가지 않아요.

Optional parameters (선택 파라미터):

  • binary (boolean) — true면 스크립트가 이진 파일임을 지정해요. 따라서 Packer가 Windows 줄바꿈을 Unix 줄바꿈으로 변환하지 않아야 해요(있을 경우). 기본값은 false예요.
  • valid_exit_codes (list of ints) — 스크립트의 유효한 종료 코드. 기본값은 0뿐이에요.
  • env (map of strings) — execute_command 앞에 주입할 key/value 쌍의 맵. Packer는 기본적으로 몇 가지 환경 변수도 주입하는데, 아래 섹션에서 다뤄요. 중복되는 env 설정이 environment_vars 설정을 덮어써요.
  • environment_vars (array of strings) — execute_command 앞에 주입할 key/value 쌍의 배열. 형식은 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분이에요. 이 설정은 시스템 재부팅처럼 SSH가 재시작될 수 있는 때를 다루기 위해 존재해요. 재부팅이 더 오래 걸리면 더 높은 값으로 설정하세요.

Parameters common to all provisioners (모든 프로비저너 공통 파라미터):

  • pause_before (duration) — 실행 전에 duration만큼 잠자요.
  • max_retries (int) — 실패 시 프로비저너가 재시도할 최대 횟수. 기본값은 0. 0이면 오류가 재시도되지 않아요.
  • only (array of string) — 나열된 빌더(이름 기준)에 대해서만 프로비저너를 실행해요.
  • override (object) — 특정 빌더에 대해 빌더를 다른 설정으로 재정의해요. 예:

In 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"]
      }
    }
  }
}

In 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 보다 오래 걸리면 타임아웃되어 실패해요.

Default Environmental Variables (기본 환경 변수)

environment_vars 구성으로 사용자 정의 환경 변수를 지정할 수 있을 뿐만 아니라, 프로비저너는 특정 일반적으로 유용한 환경 변수도 자동으로 정의해요.

  • PACKER_BUILD_NAME 은 Packer가 실행 중인 빌드의 이름으로 설정돼요. Packer가 여러 빌드를 만들 때 공통 프로비저닝 스크립트에서 빌드들을 약간 구별하고 싶을 때 가장 유용해요.
  • PACKER_BUILDER_TYPE 은 스크립트가 실행되고 있는 머신을 만드는 데 사용된 빌더의 타입이에요. 특정 빌더로 만든 시스템에서만 스크립트의 특정 부분을 실행하고 싶을 때 유용해요.
  • PACKER_HTTP_ADDR — 파일 전송용 HTTP 서버를 제공하는 빌더(예: hyperv, parallels, qemu, virtualbox, vmware)를 사용한다면 이 값이 주소로 설정돼요. 이 주소를 프로비저너에서 사용해 HTTP로 큰 파일을 다운로드할 수 있어요. 기본 file 프로비저너를 사용할 때 더 느린 속도를 경험한다면 유용할 수 있어요. winrm 커뮤니케이터를 사용하는 file 프로비저너가 이런 종류의 어려움을 겪을 수 있어요.

더 알아보기 (Learn more)