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.

El gráfico de Helm nunca entra en la condición “if”.

archivo yaml y en ese se definen los siguientes valores, incluido un valor específico llamado “environment”

image:
  repository: my_repo_url
  tag: my_tag
  pullPolicy: IfNotPresent

releaseName: cron_script
schedule: "0 10 * * *"
namespace: deploy_cron
rav_admin_password: asdf
environment: testing
testing_forwarder_ip: 10.2.71.21
prod_us_forwarder_ip: 10.2.71.15

Ahora, en mi plantilla Helm basada en este valor de entorno, necesito asignar un valor a una nueva variable y para eso he escrito el código de la siguiente manera, pero nunca entra en el bloque if-else en sí:

{{- $fwip := .Values.prod_us_forwarder_ip }}
{{- if contains .Values.environment "testing" }}
  {{- $fwip := .Values.testing_forwarder_ip }}
{{- end }}
---
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: "{{ .Values.releaseName }}"
  namespace: "{{ .Values.namespace }}"
  labels:
    ....................................
    ....................................
    ....................................
spec:
  restartPolicy: Never
  containers:
  - name: "{{ .Values.releaseName }}"
    image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
    imagePullPolicy: IfNotPresent
    args:
      - python3
      - test.py
      - --data
      - 100
      - {{ $fwip }}

En el código anterior, siempre obtengo el valor de $fwip como 10.2.71.21, sin importar cuál sea el valor del entorno: ya sea testing o producción, obtengo el mismo valor.

Y si no declaro la variable $fwip antes de la declaración if-else, me aparece el error de variable $fwip no definida. Por lo tanto, no estoy seguro de por qué exactamente la declaración if-else no se está utilizando en absoluto. ¿Cómo puedo depurar más a fondo?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el bloque if else no está funcionando como se esperaba y la variable $fwip siempre está obteniendo un valor de .Values.testing_forwarder_ip. Una posible razón para esto podría ser el alcance de la variable.

    En la primera línea, estás asignando un valor a la variable $fwip usando el archivo de valores. Más tarde, dentro del bloque if else, estás declarando una nueva variable $fwip con el mismo nombre pero dentro de un alcance local. Esta variable local no es accesible fuera del bloque if else.

    Para resolver este problema, puedes eliminar la declaración de $fwip dentro del bloque if else y simplemente asignar el valor directamente a la variable $fwip existente. Esto actualizará el valor de la variable $fwip basado en la condición.

    Tu código actualizado se vería así:

    {{- $fwip := .Values.prod_us_forwarder_ip }}
    {{- if contains .Values.environment "testing" }}
      {{- $fwip = .Values.testing_forwarder_ip }}
    {{- end }}
    ---
    apiVersion: batch/v1beta1
    kind: CronJob
    metadata:
      name: "{{ .Values.releaseName }}"
      namespace: "{{ .Values.namespace }}"
      labels:
      ....................................
      ....................................
      ....................................
    spec:
        restartPolicy: Never
        containers:
        - name: "{{ .Values.releaseName }}"
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: IfNotPresent
          args:
            - python3
            - test.py
            - --data
            - 100
            - {{ $fwip }}
    

    Este cambio actualizará el valor de la variable $fwip basado en la condición y usará el valor actualizado en la especificación de CronJob.

Comments are closed.