Go 템플릿 구문

Go 템플릿 구문 (Go template syntax)

Nomad의 template 블록에서 활용하는 Go 템플릿 구문을 알아봐요.

출처: 문서

본문

Nomad의 template 스탠자는 Go 템플릿(Go template) 구문과 Consul Template의 확장 기능을 사용해 구성 파일을 동적으로 렌더링해요. 이 페이지는 Nomad 템플릿에서 사용할 수 있는 Go 템플릿 구문을 안내해요.

템플릿 기본

Go 템플릿은 텍스트와 {{ ... }}로 감싼 동작(action)으로 구성돼요. 동작에는 변수, 조건문, 반복문, 함수 호출 등이 포함될 수 있어요.

template {
  data = <<EOF
server {
  listen {{ env "NOMAD_PORT_http" }};
}
EOF
}

템플릿 동작

주요 템플릿 동작은 다음과 같아요.

  • 값 출력 - {{ value }} 형태로 값을 삽입
  • 주석 - {{/* ... */}} 형태로 주석
  • 파이프라인 - {{ value | function }} 형태로 값 변환
  • 조건문 - {{ if ... }} ... {{ else }} ... {{ end }}
  • 반복문 - {{ range ... }} ... {{ end }}
  • 변수 할당 - {{ $var := value }}

Consul Template 구문

Nomad의 템플릿은 Consul의 서비스, KV, Vault 시크릿 데이터를 조회하는 확장 함수를 제공해요.

  • {{ service "name" }} - 서비스 인스턴스 목록 반환
  • {{ key "key" }} - KV 저장소 값 반환
  • {{ with secret "path" }} - Vault 시크릿 조회

서비스 디스커버리 예시:

template {
  data = <<EOF
{{ range service "redis" }}
server {{ .Address }}:{{ .Port }};
{{ end }}
EOF
}

Nomad 함수

Nomad는 템플릿에 특화된 함수도 제공해요. 예를 들어 env 함수는 작업의 환경 변수를 읽어요.

template {
  data = <<EOF
port = "{{ env "NOMAD_PORT_http" }}"
EOF
}

템플릿 렌더링

Nomad는 템플릿을 렌더링해 destination에 지정된 경로에 파일을 씁니다. 파일 변경 시의 동작(재시작·신호 등)은 change_mode와 change_signal로 제어할 수 있어요.

더 알아보기 (Learn more)