본문 바로가기
software engineering/k8s

Helm - Developing Templates - Named Templates

by _블로그 2021. 2. 18.

Named Templates

partial 혹은 subtemplate이라고도 불리는데 이게 더 직관적인 듯. template name은 전역이라 중복이 되면 가장 나중에 로드된 것만 쓰이므로 조심.

PARTIALS AND _ FILES

NOTES.txt를 제외하고 templates/ 이하의 파일들은 k8s 파일로 간주됨. 그리도 _로 시작하는 파일도 k8s 파일로 간주되지 않음. 주로 chart subtemplates으로써의 helpers로 사용된다. 

DECLARING AND USING TEMPLATES WITH DEFINE AND TEMPLATE

define action으로 template 정의 가능. 그리고 template action으로 사용한다.

{{- define "mychart.labels" }}
  labels:
    generator: helm
{{- end }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
  {{- template "mychart.labels" }}
...

define으로 정의하는 subtemplates는 _helpers.tpl에 주로 정의한다.

SETTING THE SCOPE OF A TEMPLATE

아래와 같이 Built-in objects를 subtemplate에 사용하고

{{/* Generate basic labels */}}
{{- define "mychart.labels" }}
  labels:
    chart: {{ .Chart.Name }}
{{- end }}

아래와 같이 template action으로 사용하면 기대와 달리 .Chart.Name이 삽입되지 않는다.

{{- template "mychart.labels" }}

scope이 안 맞아서 인데 아래와 같이 scope(.)을 넘겨주면 Built-in objects에 접근이 가능하다.

{{- template "mychart.labels" . }}

THE INCLUDE FUNCTION

template action은 action이라 다른 function과 조합이 불가. template의 function 버전이 include이다. 아래와 같이 nindent와 조합해서 indent를 적용할 수 있음.

apiVersion: v1
kind: ConfigMap
metadata:
...
  labels:
    {{- include "mychart.app" . | nindent 4 }}

nindent는 indent 전 newline을 넣는 function

masterminds.github.io/sprig/strings.html

LIST

댓글