windows-restart 프로비저너

windows-restart 프로비저너

windows-restart 프로비저너는 Windows 머신에서 재부팅을 시작하고, 머신이 다시 온라인 상태가 될 때까지 기다려 주는 프로비저너예요. Windows 프로비저닝 과정에서 자주 필요한 재부팅을 편리하게 처리해 줍니다.

출처: Packer 공식 문서

본문

windows-restart 프로비저너는 Windows 머신에서 재부팅을 시작하고 머신이 다시 온라인 상태로 돌아올 때까지 기다립니다.

Windows 프로비저닝 과정은 종종 여러 번의 재부팅을 필요로 하는데, 이 프로비저너가 그 과정을 수월하게 만들어 줘요.

Packer는 재부팅 후 머신이 프로비저닝을 계속할 준비가 되어 있기를 기대합니다. Packer는 ACPI 함수가 아니라 Windows 원격 관리(WinRM) 서비스를 통한 RPC 호출로 재부팅이 완료됐는지 감지해요. 따라서 계속 진행하려면 Windows가 완전히 부팅되어야 합니다.

기본 예제 (Basic Example)

아래 예시는 완전히 동작합니다.

provisioner "windows-restart" {}
{
  "type": "windows-restart"
}

설정 레퍼런스 (Configuration Reference)

사용 가능한 설정 옵션의 레퍼런스는 아래와 같습니다.

선택 매개변수:

  • check_registry (bool) - true면 시스템이 재부팅하려 한다는 것을 나타내는 여러 레지스트리 키를 검사해요. 설치가 재부팅을 시작하고, 프로비저너가 재연결 전에 그 재부팅이 완료되기를 기다리게 하고 싶을 때 유용합니다. 이 옵션은 베타 기능이며, winrm 프로비저너가 연결되기 전에 autounattend 단계에서 Windows 업데이트처럼 자동 재부팅되는 설치를 끝내 두는 것을 일반적으로 권장해요.
  • registry_keys (array of strings) - check-registry가 true면 windows-restart는 나열된 모든 키가 레지스트리에서 더 이상 존재하지 않게 될 때까지 재연결하지 않아요.
  default:
      var DefaultRegistryKeys = []string{
        "HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending",
        "HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\PackagesPending",
        "HKLM:Software\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootInProgress",
      }
  • restart_command (string) - 재시작을 시작하기 위해 실행할 커맨드. 기본값은 shutdown /r /f /t 0 /c "packer restart"입니다.
  • restart_check_command (string) - restart_command를 실행한 뒤 게스트 머신이 재시작됐는지 확인하기 위해 실행할 커맨드. 이 커맨드는 게스트 머신에 대한 연결이 복원되거나 restart_timeout이 초과할 때까지 재시도해요.
provisioner "windows-restart" {
  restart_check_command = "powershell -command \"& {Write-Output 'restarted.'}\""
}
{
  "type": "windows-restart",
  "restart_check_command": "powershell -command \"& {Write-Output 'restarted.'}\""
}
  • restart_timeout (string) - 재시작을 기다리는 타임아웃. 기본값은 5분입니다. 예시 값: 5m. 업데이트를 설치 중이거나 시작 서비스가 많다면 이 시간을 늘려야 할 가능성이 높아요.

모든 프로비저너에 공통인 매개변수:

  • pause_before (duration) - 실행 전에 duration만큼 대기해요.
  • max_retries (int) - 실패 시 프로비저너가 재시도할 최대 횟수. 기본값은 0입니다. 0은 오류를 재시도하지 않음을 의미해요.
  • only (array of string) - 이름으로 나열된 빌더에 대해서만 프로비저너를 실행해요.
  • override (object) - 특정 빌더에 대해 다른 설정으로 빌더를 재정의해요. 예: HCL2에서: JSON에서:
  • timeout (duration) - 프로비저너가 예를 들어 1h10m1s나 10m보다 오래 걸리면 프로비저너는 타임아웃되어 실패해요.