helm chart 总是不进入 if 条件

helm chart always not going into the if condition

yaml 文件,其中定义了以下值,包括一个名为“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

现在,在基于此环境值的 helm chart 中,我需要为新变量赋值,为此我编写了如下代码,但它始终不会进入 if else 块本身

{{- $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 }}

在上面的代码中,我总是得到 $fwip 值 10.2.71.21 无论环境值是测试还是生产,我都得到相同的值

如果我没有在 if else 语句之前声明变量 $fwip 那么它会说 $fwip 变量未定义错误,所以我不确定为什么 if else 语句根本没有被使用,如何进一步调试 ?

这是变量和局部变量的语法问题。

if中的fwip应该使用=而不是:=

{{- $fwip := .Values.prod_us_forwarder_ip }}
{{- if contains .Values.environment  "testing" }}
  {{- $fwip = .Values.testing_forwarder_ip }}
{{- end }}

为了方便大家理解,我翻译成了go代码。

(在go语言中,:=表示定义赋值,=表示赋值)

// := 
env := "testing"
test := "10.2.71.21"
prod := "10.2.71.15"

fwip := prod
if strings.Contains(env,"testing"){
    fwip := test
    fmt.Println(fwip) // 10.2.71.21
}
fmt.Println(fwip) // 10.2.71.15
// =
env := "testing"
test := "10.2.71.21"
prod := "10.2.71.15"

fwip := prod
if strings.Contains(env,"testing"){
    fwip = test
    fmt.Println(fwip) // 10.2.71.21
}
fmt.Println(fwip) // 10.2.71.21