Kubernetes Helm 定义多行初始化容器命令
Kubernetes Helm define multiline init container command
我正在尝试整理我的图表并将所有 initContainers
迁移到名为图表 _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 -}}
代理-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 }}
起初,我无法弄清楚为什么 include 不起作用,所以我使用 squote
命令的组合来找出对齐方式,然后你可以添加 replace
检查模板是否真的有效:
` {{- 包括 "pulsar.waitBrokerReady" 。 |报价 |缩进 10 |替换 "'" "" }}
一次,它做模板,你可以删除squote
和replace
。
我正在尝试整理我的图表并将所有 initContainers
迁移到名为图表 _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 -}}
代理-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 }}
起初,我无法弄清楚为什么 include 不起作用,所以我使用 squote
命令的组合来找出对齐方式,然后你可以添加 replace
检查模板是否真的有效:
` {{- 包括 "pulsar.waitBrokerReady" 。 |报价 |缩进 10 |替换 "'" "" }}
一次,它做模板,你可以删除squote
和replace
。