es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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/'
Tags:  ,

Answer

  1. Avatar for 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:

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: {{ .Release.Name }}-frontend
      namespace: {{ .Values.global.namespace }}
    data:
      {{- if eq .Values.global.environment "dev" }}
      NODE_ENV: {{ (index .Files.Get "_config-dev.yaml" | fromYaml).frontend.NODE_ENV }}
      REACT_APP_API_URL: {{ (index .Files.Get "_config-dev.yaml" | fromYaml).frontend.REACT_APP_API_URL }}
      {{- else if eq .Values.global.environment "stag" }}
      NODE_ENV: {{ (index .Files.Get "_config-stag.yaml" | fromYaml).frontend.NODE_ENV }}
      REACT_APP_API_URL: {{ (index .Files.Get "_config-stag.yaml" | fromYaml).frontend.REACT_APP_API_URL }}
      {{- end }}
    

    Explicación:

    • El bloque {{- 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.
    • El bloque {{- 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.
    • La función index .Files.Get "_config-dev.yaml" lee el contenido del archivo _config-dev.yaml y la función fromYaml lo convierte en un objeto YAML.
    • De manera similar, la función index .Files.Get "_config-stag.yaml" lee el contenido del archivo _config-stag.yaml y lo convierte en un objeto YAML.
    • Finalmente, las declaraciones {{ (index .Files.Get ...) | fromYaml).frontend.NODE_ENV }} y {{ (index .Files.Get ...) | fromYaml).frontend.NODE_ENV }} obtienen los valores de las claves NODE_ENV y REACT_APP_API_URL de los objetos YAML respectivos.

Comments are closed.