Kubernetes Helm define multiline init container command



我正在尝试组织我的图表并将所有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.

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

_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来检查模板是否真的有效:

' {{- include "pulsar.waitBrokerReady" . | squote | 缩进 10 | 替换 "'" " }}

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

最新更新