【问题标题】:Kubernetes Helm define multiline init container commandKubernetes Helm 定义多行初始化容器命令
【发布时间】:2020-02-18 21:10:36
【问题描述】:

我正在尝试组织我的图表并将所有 initContainers 迁移到一个名为 chart _scripts.tlp 的帮助程序中。

我在 proxy-deployment.yaml 中有一个 initContainers 步骤,它正在等待我的代理服务初始化,如下所示:

      # 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

【问题讨论】:

    标签: kubernetes kubernetes-helm go-templates


    【解决方案1】:

    以下解决方案似乎对我有用:

    _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-deployment.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 |替换 "'" "" }}

    一旦做了模板,你就可以删除squotereplace

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-21
      • 2020-02-14
      • 1970-01-01
      相关资源
      最近更新 更多