6
votes

Comment passer toute la chaîne JSON à la valeur du graphique Helm?

Comment puis-je transmettre la chaîne JSON entière à une valeur de graphique Helm?

J'ai values.yml où la valeur de configuration doit contenir le JSON entier avec une configuration d'une application

{{- $env := default "integration" .Values.env}}
apiVersion: v1
kind: Secret
metadata:
  name: {{ .Release.Name }}-{{ $env }}
type: Opaque
data:
  config.json: {{ .Values.config | b64enc | quote }}

et je dois transmettre cette valeur à un modèle secret, puis le monter en tant que volume dans un pod Kubernetes.

...
config: some JSON here
...

Cependant l'approche évidente consistant à passer une chaîne entre guillemets simples comme '{"redis": "localhost: 6379"}' échoue car Helm pour une raison quelconque supprime tous les guillemets dans la chaîne (même si je les échappe). Je me retrouve avec {redis: localhost: 6379} qui n'est pas un JSON valide.

Y a-t-il une autre possibilité de transmettre la configuration au pod en une seule fois sans charger le modèle fichiers avec la fonction tpl et rendant tous les champs nécessaires accessibles via values.yml séparément?


0 commentaires

3 Réponses :


14
votes

Si .Values.config contient json, vous pouvez l'utiliser dans votre modèle de secret avec {{.Values.config | toJson | b64enc | quote}} . Il peut sembler étrange d'utiliser toJson pour convertir json en json mais helm ne le traite pas nativement comme json tant que vous ne le lui dites pas. Voir la question SO Comment utiliser les variables json dans un fichier yaml (Helm) pour un exemple de cette opération.


2 commentaires

Une autre façon de le faire est de mettre le json dans un fichier à la base de votre graphique et de le charger avec {{.Files.Get "config.json" | b64enc | quote} ou utilisez .Files.Glob avec AsSecrets mais je suppose que vous voulez spécifiquement le contenu dans le fichier de valeurs.


Oui, j'ai besoin du JSON dans .Values.config car nous utilisons rancher. Par conséquent, nous avons questions.yml dans le graphique et la valeur est remplie de manière interactive via la CLI de rancher ou l'interface graphique



3
votes

Voici une autre suggestion si vous souhaitez éviter le codage:

env:
  - name: MYCONFIG
  value: {{ .Files.Get "config.json" | toPrettyJson }}

Selon le helm docs , helm utilise des fonctions de modèle telles que toPrettyJson qui sont fournies par le package Go text / template intégré et Bibliothèque de fonctions de modèle Sprig .


0 commentaires

0
votes

lorsque vous passez quelque chose à --set ou --set-string et que vous ne voulez pas que helm l'interprète, vous voulez échapper à chaque élément de =

--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\\\"\}'

avec une barre oblique inverse. Souvenez-vous de votre shell qui pourrait interpréter \ donc parfois vous voudrez peut-être \ ou utiliser la valeur dans des quotas uniques à la place. Quelque chose comme ça fonctionne pour moi dans bash:

{
[
,
.
]
}


0 commentaires