簡體   English   中英

如何將整個 JSON 字符串傳遞給 Helm 圖表值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM