Flow Control
다음의 control structures를 제공
- if / else : 조건부 blocks 생성
- with : scope 정의
- range : for each 스타일의 loop
그리고 named template를 선언하거나 사용할 때 사용하는 몇가지 actions가 있음
define : 새로운 named template 선언
template : named template 가져오기
block : ?
IF/ELSE
일반적인 if else 문법의 그것. 단, 조건부가 false가 되는 조건이 조금 특별하다.
- a boolean false
- a numeric zero
- an empty string
- a nil (empty or null)
- an empty collection
한마디로 0을 포함해 empty일 경우도 모두 false로 본다.
CONTROLLING WHITESPACE
IF/ELSE를 사용하면 해당 문법을 사용한 line이 whitespace로 붕 뜰 수 있잖아? 그걸 제거하는 방법에 대한 얘기다. 아래처럼 된다는 얘기지.
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
drink: {{ .Values.favorite.drink | default "tea" | quote }}
food: {{ .Values.favorite.food | upper | quote }}
{{if eq .Values.favorite.drink "coffee"}}
mug: true
{{end}}
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: telling-chimp-configmap
data:
myvalue: "Hello World"
drink: "coffee"
food: "PIZZA"
--> 여기 빈 줄이 생겼다.
mug: true
이걸 해결하려면 - 요걸 쓰면 된다. 앞에다 쓰면 앞 쪽, close directive 앞에 쓰면 뒤 쪽 whitespace를 trim 해준다.
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
drink: {{ .Values.favorite.drink | default "tea" | quote }}
food: {{ .Values.favorite.food | upper | quote }}
{{- if eq .Values.favorite.drink "coffee"}}
mug: true
{{- end}}
MODIFYING SCOPE USING WITH
current scope(.) 지시자를 특정 object로 설정해준다. 아래 예제는 .Values.favorites를 .으로 변경해주는 것.
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
{{- with .Values.favorite }}
drink: {{ .drink | default "tea" | quote }}
food: {{ .food | upper | quote }}
{{- end }}
LOOPING WITH THE RANGE ACTION
아래 values.yaml의 list 데이터를 ConfigMap에 넣는 예제.
favorite:
drink: coffee
food: pizza
pizzaToppings:
- mushrooms
- cheese
- peppers
- onions
apiVersion: v1
...
data:
...
toppings: |-
{{- range .Values.pizzaToppings }}
- {{ . | title | quote }}
{{- end }}
toppings 에 |-가 보이는데 이건 yaml 파일에서 multi-line string을 정의할 때의 문법이다. 리스트를 왜 string으로? 그건 ConfigMap의 data가 key/value pairs라서 그럼. map 형태만 지원한다는 얘기.
LIST
'software engineering > k8s' 카테고리의 다른 글
Helm - Developing Templates - Named Templates (0) | 2021.02.18 |
---|---|
Helm - Developing Templates - Variables (0) | 2021.02.18 |
Helm - Developing Templates (0) | 2021.02.17 |
Helm - Developing Templates - Template Functions and Pipelines (0) | 2021.02.17 |
Deployments - Writing a Deployment Spec (0) | 2021.02.16 |
댓글