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로 제어할 수 있어요.