Kubernetes Helm определяет многострочную команду инициализации контейнера - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь упорядочить свои диаграммы и перенести все initContainers в помощник с именем chart _scripts.tlp .

У меня есть initContainers шаг в proxy-deploy.yaml , который ожидает, пока моя служба брокера инициализируется следующим образом:

      # This init container will wait for at least one broker to be ready before proceeding
      # with deploying the rest of the proxy service
      - name: wait-broker-ready
        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
        imagePullPolicy: {{ .Values.image.pullPolicy }}
        command: ["bash", "-c"]
        args:
          - >-
            for i in {0..10}; do
              broker_pods="$(nslookup -timeout=10 {{ template "service.fullname" . }}-{{ .Values.broker.component }} | grep Name | wc -l)"
              if [[ ${broker_pods} -ge 1 ]]; then
                break
              fi
              sleep 30;
            done;

Я пытаюсь переписать его так:

      # This init container will wait for at least one broker to be ready before proceeding
      # with deploying the rest of the proxy service
      - name: wait-broker-ready
        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
        imagePullPolicy: {{ .Values.image.pullPolicy }}
        command: ["bash", "-c"]
        args:
          - >-
            {{ template  "service.waitBrokerReady"}}

У меня есть следующее шаблон имен _scripts.tlp :

{{/*
Wait until at least one broker instances is initialized
*/}}
{{ define "service.waitBrokerReady" }}
for i in {0..10}; do
  broker_pods="$(nslookup -timeout=10 {{ template "service.fullname" . }}-{{ .Values.broker.component }} | grep Name | wc -l)"
  if [[ ${broker_pods} -ge 1 ]]; then
    break
  fi
  sleep 30;
done;
{{- end }}

К сожалению, тот факт, что это многострочная команда и есть разграничения пробелов, я вижу error converting YAML to JSON: yaml.

Я пробовал несколько вариантов с printf, но не уверен, как передать вложенные шаблоны и часто вижу Error: parse error at (service/templates/_functions.tpl:6): "-p" in command.

1 Ответ

1 голос
/ 13 февраля 2020

Мне кажется, что работает следующее решение:

_scripts.tlp :

{{/*
Wait until at least one broker instances is initialized
*/}}
{{- define "service.waitBrokerReady" }}
- >-
  for i in {0..10}; do
    broker_pods="$(nslookup -timeout=10 {{ template "service.fullname" . }}-{{ .Values.broker.component }} | grep Name | wc -l)"
    if [[ ${broker_pods} -ge 1 ]]; then
      break
    fi
    sleep 30;
  done;
{{- end -}}

proxy-deploy.yaml :

      # This init container will wait for at least one broker to be ready before proceeding
      # with deploying the rest of the proxy service
      - name: wait-broker-ready
        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
        imagePullPolicy: {{ .Values.image.pullPolicy }}
        command: ["bash", "-c"]
        args:
            {{- include "pulsar.waitBrokerReady" . | indent 10 }}

Сначала я не смог выяснить, почему не сработало включение, поэтому я использовал комбинацию команды squote, чтобы выяснить выравнивание, а затем вы можете добавить replace чтобы проверить, будет ли шаблон работать на самом деле:

`{{- включить" pulsar.waitBrokerReady ". | сквот | отступ 10 | заменить "'" ""}}

Как только он сделает шаблон, вы можете удалить squote и replace.

...