Authoring and Shipping Helm Charts
Quiz: Scope, Whitespace, and Quoting
한국어 원문으로 표시합니다.
{{- with .Values.app }} 블록 안에서 {{ .Release.Name }} 을 쓰면 어떻게 되나요?
- with 는 점을 바꾸지 않으므로 릴리스 이름이 정상 렌더된다
- 빈 문자열이 되어 조용히 넘어간다
- with 블록 안에서는 내장 오브젝트 접근이 아예 금지되어 문법 오류가 난다
nil pointer evaluating interface {}.Name오류로 렌더가 멈춘다
annotations: 바로 아래 줄에 맵 하나를 꽂으려 합니다. 알맞은 것은?
{{ toYaml .Values.notes | indent 4 }}— indent 가 줄바꿈까지 처리한다{{- toYaml .Values.notes | nindent 4 }}— nindent 가 줄바꿈을 먼저 넣는다{{- toYaml .Values.notes | indent 4 -}}— 양쪽 공백을 모두 지운다{{ toYaml .Values.notes }}— 들여쓰기는 YAML 파서가 알아서 맞춘다
error converting YAML to JSON: yaml: line 5: mapping values are not allowed in this context 를 만났을 때 가장 먼저 할 일은?
- 템플릿 파일의 5번째 줄을 열어 문법을 확인한다
- values.yaml 에서 5번째 줄의 값을 따옴표로 감싼다
--debug를 붙여 렌더된 결과를 그대로 출력해 어느 줄이 붙었는지 본다helm lint --strict를 돌려 경고를 모두 없앤다
values 에 tag: "1.10" 이 있고 템플릿에 tag: {{ .Values.tag }} 라고 썼습니다. ConfigMap 의 data 에 들어갈 때 생기는 문제는?
- 따옴표가 사라져 숫자로 읽히고 끝의 0 을 잃어 1.1 이 되며, data 는 문자열만 받으므로 거절된다
- 렌더 단계에서 타입 오류가 나 helm template 이 실패한다
- 헬름이 원래 타입을 기억하므로 문자열 그대로 전달되어 문제가 없다
- 값이 비어 있는 것으로 처리되어 키가 통째로 사라진다
required 와 fail 의 차이로 알맞은 것은?
- required 는 렌더를 멈추고 fail 은 경고만 내고 계속 진행한다
- required 는 values.schema.json 이 있어야 동작하고 fail 은 언제나 동작한다
- fail 은 설치 시점에만 동작하고 required 는 렌더 시점에 동작한다
- required 는 값이 비었을 때 멈추고, fail 은 조건을 직접 써서 멈출 자리를 정한다
오브젝트 이름이 Bad_Name 인 차트를 helm lint 와 helm lint --strict 로 각각 검사하면?
- 둘 다 실패한다 — 이름 규칙 위반은 언제나 오류다
- 기본 린트는 경고를 내고 0 으로 끝나지만, 엄격 모드는 같은 경고를 실패로 세어 1 로 끝난다
- 둘 다 통과한다 — 이름 검사는 린트가 아니라 API 서버의 일이다
- 기본 린트는 실패하고 엄격 모드는 INFO 만 보므로 통과한다