작업 명세의 change_script 블록

작업 명세의 change_script 블록 (change_script block in the job specification)

배치 job -> group -> task -> template -> **change_script**

change_script 블록은 운영자가 템플릿 변경 시 실행할 스크립트를 구성할 수 있게 해줘요. 이 블록은 템플릿 change_mode가 script로 설정된 경우에만 사용돼요.

job "docs" {
  group "example" {
    task "server" {
      template {
        source      = "local/redis.conf.tpl"
        destination = "local/redis.conf"
        change_mode = "script"
        change_script {
          command       = "/bin/foo"
          args          = ["-verbose", "-debug"]
          timeout       = "5s"
          fail_on_error = false
        }
      }
    }
  }
}

출처: 문서

본문

change_script 매개변수 (change_script Parameters)

  • command (string: "") — 템플릿 변경 시 실행될 스크립트 또는 실행 파일의 전체 경로를 지정해요. 명령이 성공으로 간주되려면 종료 코드 0을 반환해야 해요. 경로는 드라이버에 상대적이에요. 예를 들어 컨테이너 드라이버로 실행한다면 경로가 컨테이너 안에 존재해야 해요. change_mode가 script라면 이 옵션이 필요해요.

  • args (array<string>: []) — 템플릿 변경 시 실행될 스크립트에 전달되는 인수 목록.

  • timeout (string: "5s") — "30s"나 "1h" 같은 레이블 접미사를 사용해 지정하는 스크립트 실행 타임아웃.

  • fail_on_error (bool: false) — true면 스크립트 실행이 실패할 때 Nomad가 태스크를 종료해요. false면 스크립트 실패가 로그로 기록되지만 태스크는 중단 없이 계속돼요.

  • run_on_first_render (bool:false) — true면 구성된 스크립트가 템플릿 변경 시 실행될 뿐만 아니라 초기 렌더 후에도 실행돼요.

예제 (Example)

아래는 스크립트가 다른 template 블록의 data 블록에 어떻게 내장될 수 있는지 보여주는 예제예요:

job "docs" {
  group "example" {
    task "server" {
      template {
        data        = "{{key \"my_key\"}}"
        destination = "local/test"
        change_mode = "script"

        change_script {
          command = "/local/script.sh"
        }
      }

      template {
        data        = <<EOF
#!/usr/bin/env bash
echo "Running change_mode script"
sleep 10
echo "Done"
EOF
        destination = "local/script.sh"
        perms       = "777"
      }
    }
  }
}

더 알아보기 (Learn more)