티스토리 뷰
반응형
helm chart 2.x 에서 작업을 했는데, 외부파일에 있는 값을 로딩해서 dict 로 만들고 싶었다.
사실 바인딩될 값은 values.yaml 에 정의해서 쓰는게 자연스러운데, 왜 이런 방법이 필요했냐하면
airflow 의 수많은 설정값을 values.yaml 에 선언하게 하는건 너무 장황했다. (너무 많기도 하고)
하지만, executor 타입이나 kerberos 인증 여부에 따라 선언되어야할 pod 구성이 다르기 때문에 조건분기를 해야했고 이를 위해서는 dict 로 로딩해서 사용해야 하는 방법이 필요했다.
1. File 을 읽어서 dict 로 만들기
우선 로딩할 파일은 configs/{.Values.profile}/airflow-config.yaml 에 존재한다고 가정했다.
여기서 가장 핵습은 key value 로 파싱한후, 해당 값을 toJson 으로 변환한 결과로 출력하게 구성하고, 실제 호출하는곳에서는 fromJson 을 써서 사용하면 된다.
예를 들면, 아래와 같이 사용가능하다.
1.1 chart/templates/_helpers.tpl
{{/*
chart/{profile}/airflow-config.yaml 설정을 로딩함
사용할 땐 아래와 같이 사용할 수 있음
{{ $airflow_config := include "airflow_config" . | fromJson }}
*/}}
{{- define "airflow_config" -}}
{{- $airflow_config := dict -}}
{{- $template := tpl (printf "configs/%s/airflow-config.yaml" .Values.profile | .Files.Get) . -}}
{{- range ( split "\n" $template ) -}}
{{- if not (. | trim | empty) -}}
{{- $kv := . | splitn ":" 2 -}}
{{- $_ := set $airflow_config $kv._0 ($kv._1 | trim | trimAll "\"") -}}
{{- end -}}
{{- end -}}
{{- toJson $airflow_config -}}
{{- end -}}
1.2 chart/configs/dev/airflow-config.yaml (로딩할 파일)
AIRFLOW__CORE__EXECUTOR: "LocalKubernetesExecutor"
AIRFLOW__CORE__SECURITY: "kerberos"
...
1.3 chart/templates/deployment.yaml (사용할 곳)
{{- $airflow_config := include "airflow_config" . | fromJson -}}
{{- $security := default "none" (pluck "AIRFLOW__CORE__SECURITY" $airflow_config | first) -}}
{{- if and (eq "kerberos" $security) -}}
kerbeors 인증 세팅일때 구성할 값들
{{- end -}}
마치며
helm chart 의 go template 에서 return 값을 어떻게 만들어야 하는가? 이 방법을 찾기위해 삽질을 하다가 정리한 코드이다.
default 값을 미지정하면 타입이 안맞다며 오류가 나기도 해서 삽질했는데 예시를 보면 "none" 을 대체값으로 써서 해결했다.
반응형
'docker & k8s > helm chart' 카테고리의 다른 글
[Helm 2.x] ConfigMap 에 서브폴더가 있는 파일을 마운트하기 (1) | 2024.10.18 |
---|---|
[helm chart] range 하위에서 include 사용시 오류 해결 방법 : error calling include (0) | 2024.08.21 |
[Helm Chart] 문자열에서 "파일명" 혹은 "파일경로" 만 추출하기 (0) | 2024.06.21 |
[Helm Chart] 파일을 include 와 values.yaml 바인딩 같이 하기 (0) | 2024.06.11 |
[Helm Chart] couldn't parse image reference 문제 : float64 문제 (0) | 2024.06.10 |
댓글