[英]Hierarchy of values for dynamic helm chart configuration
我想在values.yaml
具有一些默認設置和選項,然后是不同實例的哈希圖,這些哈希圖將轉換為服務和部署,其單個設置將覆蓋默認設置。
values.yaml
someSetting: TheDefault
deployments:
one:
role: XYZ
two:
role: ABC
someSetting: Overridden
在上述情況下,將有兩個部署和服務, one
和two
。 someSetting
的值one
將是TheDefault
,而two
將被Overridden
。
actual template yaml
我正在嘗試-構建字典$p
,其中具有根范圍的Chart
和Release
對象,然后將根作用域值合並到其中,然后合並當前部署值。
{{- range $deploymentKey, $deploymentVal := .Values.deployments }}
{{- $p := dict "deploymentKey" $deploymentKey }}
{{- $_ := set $p "Chart" $.Chart }}
{{- $_ := set $p "Release" $.Release }}
{{- $_ := merge $p $.Values }}
{{- $_ := merge $p . }}
...
{{- end }}
包含Chart
和Release
的原因是,盡管文檔中有說明,但是$.Chart
並不總是可用-當我將范圍傳遞到模板中並且該模板嘗試使用$.
時,它實際上是空的$.
指根范圍。
所以我正在做類似的事情:
name: {{ template "my-app.fullname" $p }}
和
image: {{ $p.image.name }}
問題在於,雖然helm lint
返回錯誤,但helm template .
(或空運行)收益:
Error: rendering template failed: runtime error: invalid memory address or nil pointer dereference
merge
以嘗試縮小崩潰的范圍-它們似乎並沒有導致崩潰 $
合並到字典中 如何解決此崩潰?
或者,我怎樣才能實現我想要的目標?
您可以改為使用默認值創建普通的基礎圖表,並使用普通服務和部署,然后創建一個包含該基礎圖表的總括圖表兩次,別名分別為“一”和“二”。 然后,傘形圖的值文件將覆蓋默認值,並且您不需要任何字典。
作為示例,這里是一個基礎圖表-https: //github.com/ryandawsonuk/configmaps-transformers/tree/master/helm/transformers/charts/transformer ,而傘形圖在不同別名下多次包含該圖表-https:// github.com/ryandawsonuk/configmaps-transformers/blob/master/helm/transformers/requirements.yaml 。 傘形圖的值文件為包含的基本圖的每個實例插入不同的值。 在保護傘值中,每個實例均由其別名引用-https: //github.com/ryandawsonuk/configmaps-transformers/blob/master/helm/transformers/values.yaml#L14
嘗試這個:
deployment.yaml:
{{- range $deploymentKey, $deploymentVal := .Values.deployments }}
{{- $p := dict "deploymentKey" $deploymentKey }}
{{- $_ := set $p "Chart" $.Chart }}
{{- $_ := set $p "Release" $.Release }}
{{- $_ := merge $p . }}
{{- $_ := merge $p $.Values }}
...
{{ end }}
_helpers.tpl:
{{- define "repro.fullname" -}}
{{- printf "%s" .Chart.Name }}
{{- end -}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.