我正在使用圖表模板來管理不同微服務應用程式的部署。
在值檔案中,容器應用程式在串列中宣告,如您所見:
# values.yaml
containerApps:
- name: app1
replicaCount: 1
...
- name: app2
replicaCount: 1
...
- name: app3
replicaCount: 1
...
模板在輸出 K8S YAML 檔案的回圈中讀取值檔案定義。
{{- range $containerApp := .Values.containerApps }}
{{- with $containerApp }}
...
containers:
- name: {{ .name }}
image: "{{ printf "$.Values.%s.image_repository" .name }}:{{ printf "$.Values.%s.image_tag" .name }}"
replicas: {{ .replicaCount }}
...
...
除了值檔案之外,我們還使用命令式方法通過--set-string引數宣告了一些值。
helm template . --name-template my-app --namespace dev \
--set-string app1.image_repository=my-registry/image-app-1 \
--set-string app1.image_tag=073f799 \
--set-string app2.image_repository=my-registry/image-app-2 \
--set-string app2.image_tag=934df33 \
--set-string app3.image_repository=my-registry/image-app-3 \
--set-string app3.image_tag=k393caf... \
--values values.yaml
問題是 helm 似乎無法呈現解釋 的模板$.Values.%s.image_repository" .name,從而生成錯誤的輸出:
# What we expected:
image: my-registry/image-app-1:073f799
...
image: my-registry/image-app-2:934df33
...
image: my-registry/image-app-3:k393caf
...
# What we get...
...
image: $.Values.app1.image_repository:$.Values.app1.image_tag
...
image: $.Values.app2.image_repository:$.Values.app2.image_tag
...
image: $.Values.app3.image_repository:$.Values.app3.image_tag
...
我們知道這可能printf不是要走的路,我也嘗試過index,但效果不佳。
如果您有人能給我們提供有關如何使其作業的線索,我們將不勝感激。
歡迎任何想法。
uj5u.com熱心網友回復:
正如您所觀察到的,printf將生成一個字串但不會對其進行評估,這就是您直接在輸出中獲取模板運算式的原因。
我實際上會在index這里使用。我可能會通過查找頂級值一次,然后在其中索引來做到這一點。
{{- range .Values.containerApps }}
{{- $image := index $.Values .name }}
containers:
- name: {{ .name }}
image: "{{ $image.image_repository }}:{{ $image.image_tag }}"
replicas: {{ .replicaCount }}
{{- end }}
range已經將特殊變數重置為.串列項,因此您不需要內部with(除非您希望串列項可能為空)。我$image從 中設定為頂級項.Values,然后當你需要使用它時,你可以參考其中的欄位,如$image.image_tag.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/495021.html
