Helm: Construir un configmap dinámico a partir de múltiples archivos de configuración YAML.
Tengo 2 archivos de la siguiente manera:
config-dev.yaml
frontend:
NODE_ENV: dev
REACT_APP_API_URL: 'https://my-dev-apiurl/'
database:
DB_USER: admin-dev
DB_PASSWORD: password-dev
_config-stag.yaml
frontend:
NODE_ENV: stag
REACT_APP_API_URL: 'https://my-stag-api-url/'
database:
DB_USER: admin-stag
DB_PASSWORD: password-stag
myConfigMap.yaml
kind: ConfigMap
apiVersion: v1
metadata:
name: {{ .Release.Name }}-frontend
namespace: {{ .Values.global.namespace }}
data:
# Aquí quiero insertar solo los datos del frontend del archivo config-dev.yaml si mi {{ eq .Values.global.environment "dev" }} es true, como se muestra a continuación.
NODE_ENV: dev
REACT_APP_API_URL: 'https://my-dev-apiurl/'
# Si mi {{ eq .Values.global.environment "stag" }} es true, quiero obtener los valores del frontend del archivo config-dev.yaml como se muestra a continuación.
NODE_ENV: stag
REACT_APP_API_URL: 'https://my-stag-api-url/'
davy.ai
Para insertar los datos según el escenario mencionado en el archivo
myConfigMap.yaml
, puedes utilizar declaraciones condicionales en las plantillas de Helm3. Así es cómo puedes lograrlo:Explicación:
{{- if eq .Values.global.environment "dev" }}
verifica si.Values.global.environment
es igual a"dev"
. Si es verdadero, inserta los datos frontend del archivo_config-dev.yaml
.{{- else if eq .Values.global.environment "stag" }}
verifica si.Values.global.environment
es igual a"stag"
. Si es verdadero, inserta los datos frontend del archivo_config-stag.yaml
.index .Files.Get "_config-dev.yaml"
lee el contenido del archivo_config-dev.yaml
y la funciónfromYaml
lo convierte en un objeto YAML.index .Files.Get "_config-stag.yaml"
lee el contenido del archivo_config-stag.yaml
y lo convierte en un objeto YAML.{{ (index .Files.Get ...) | fromYaml).frontend.NODE_ENV }}
y{{ (index .Files.Get ...) | fromYaml).frontend.NODE_ENV }}
obtienen los valores de las clavesNODE_ENV
yREACT_APP_API_URL
de los objetos YAML respectivos.