[英]How to pass entire JSON string to Helm chart value?
如何將整個 JSON 字符串傳遞給 Helm 圖表值?
我有values.yml
,其中配置值應包含整個 JSON 以及應用程序的配置
...
config: some JSON here
...
我需要將此值傳遞給秘密模板,然后將其作為卷安裝到 Kubernetes pod。
{{- $env := default "integration" .Values.env}}
apiVersion: v1
kind: Secret
metadata:
name: {{ .Release.Name }}-{{ $env }}
type: Opaque
data:
config.json: {{ .Values.config | b64enc | quote }}
然而,傳遞像'{"redis": "localhost:6379"}'
這樣的單引號字符串的明顯方法失敗了,因為 Helm 出於某種原因刪除了字符串中的所有雙引號(即使我將它們轉義)所以我最終得到{redis: localhost:6379}
這不是一個有效的 JSON。
是否有任何其他可能性如何一次將配置傳遞給 pod,而無需使用tpl
function 加載模板文件並通過values.yml
分別訪問所有需要的字段?
如果.Values.config
包含 json 那么你可以在你的模板化秘密中使用它
{{ .Values.config | toJson | b64enc | quote }}
使用toJson
將 JSON 轉換為 JSON 似乎很奇怪,但是 helm 在您告訴它之前不會本機將其視為 JSON。 有關執行此操作的示例,請參閱 SO 問題如何在 yaml 文件 (Helm) 中使用 json 變量。
如果您想避免編碼,這是另一個建議:
env:
- name: MYCONFIG
value: {{ .Files.Get "config.json" | toPrettyJson }}
根據helm docs ,helm 使用了諸如toPrettyJson
模板函數,這些函數由內置的 Go text/template 包和Sprig 模板函數庫提供。
當將某些內容傳遞給 --set 或 --set-string 並且您不希望 helm 解釋它時,您想轉義每一個 =
{
[
,
.
]
}
帶反斜杠。 請記住您的 shell 可能會解釋 \\,因此有時您可能希望在單個配額中使用 \\ 或 value。 像這樣的東西在 bash 中對我有用:
--set airflow.config.AIRFLOW__SECRETS__BACKEND_KWARGS='\{\\\"variables_prefix\\\": \\\"/here-is-my-prefix/'${bamboo_deploy_environment}'/airflow/variables\\\"\, \\\"connections_prefix\\\": \\\"/here-is-my-prefix/'${bamboo_deploy_environment}'/airflow/connections\\\"\}'
不要忘記轉義此 JSON:
在 Notepad++ 正則表達式中,將{{(\\w+)}}
替換為{{
{{ }}$1{{
}} }}
有點幫助。
你可以從yaml
文件中做到這一點很容易像這樣
# ... values.yaml
myspecialvalue:
somefield: 'some string'
# ... more stuff if you'd like
然后在您的 helm 文件之一中,您可以像這樣引用它
# ... cron.yaml
kind: CronJob
metadata:
name: ...
namespace: ...
spec:
schedule: ...
jobTemplate:
spec:
template:
spec:
containers:
- name: some-container
image: ...
command: ...
env:
- name: SOME_ENVIRONMENT_VARIABLE
value: {{ .Values.myspecialvalue | toJson | quote }}
# ... more stuff if you'd like
這會將適當引用的json
字符串作為環境變量傳遞給您的 pod,如下所示
'{"somefield: "some string"}'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.