본문으로 바로가기
반응형

Intro

helm chart를 사용하다보면 커스텀하게 변경해야할 경우가 종종 발생합니다. 오늘은 helm chart 문법에서 rage를 사용해서 for구문 처럼 loop 돌리고 정수 값을 0,1,2,3 으로 넘버링 하는 방법을 알아 보겠습니다.

결론 먼저

결론적으로 다음과 같이 {{range $index, $element := until (int .Values.replicas) }} 구문을 사용하면 됩니다.

{{range $index, $element := until (int .Values.replicas) }}
---
apiVersion: v1
kind: Service
metadata:
  name: example-{{ $index }}-svc
  namespace: devops
spec:
  ports:
    - port: 22
      targetPort: 22
      name: example-ssh
  selector:
    "statefulset.kubernetes.io/pod-name": "{{ template "example.fullname" $ }}-{{ $index }}"
  type: ClusterIP
{{ end }}

구문 해석

만약 .Values.replicas 값이 5라고 하면 {{range $index, $element := until 5 }} 가 되고 until 5 가 list 값인 [0, 1, 2, 3, 4] 를 생성하게 되는데 이를 rage 구문에 element로 넣어서 0부터 4까지 loop를 돌리게 됩니다.

{{range $index, $element := until 5 }}{{ end }} 사이에 { $index } 를 사용해서 loop가 도는 동안 list에 있는 값 [0, 1, 2, 3, 4]를 가져올 수 있게 할 수 있습니다.

{{ template "example.fullname" $ }} 이 부분은 define으로 선언한 example.fullname 값을 가져오는 부분입니다. 내가 git 에서 가져온 helm template 부분에 define으로 정의한 부분을 잘 찾아서 어떤 값이 들어가는지 확인해보시면 되겠습니다.

트러블 슈팅

일반적으로 세번째 인자를 $으로 사용하지 않고 . 으로 다음과 같이 사용하게 되는데 {{ template "example.fullname" . }} range와 untill이 int로 돌아가는 loop안에서는 $으로 표현해야 하는걸 확인할 수 있었습니다.

반응형