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)
- 이 페이지는 Packer 공식 문서에서 가져왔어요.