为什么 Helm 只取范围内地图的最后一个值

Why Helm take only the last value of the map in range

我是 Helm 的新手,如果我不清楚,或者我使用了错误的术语,我深表歉意。

我正在尝试遍历 IP 列表,将它们提供给一个范围并为无头服务创建一个 ip 数组。

这是我的模板:

kind: Endpoints
apiVersion: v1
metadata:
 name: backend-modbile-db-service
 namespace: {{ .Release.Namespace }}
subsets:
 - addresses:
     {{- range $key, $val := .Values.DatabaseEndpoints }}
      - {{ $key }}: {{ $val }}
     {{- end }}
   ports:
     - port: {{ .Values.DatabasePort| default 5984 }}
       name: backend-mobile-db-service

和Value.yaml关于这些IP是这样的:

#backend-mobile-db-service

DatabasePort: 5984
DatabaseEndpoints:
  ip: 192.168.0.50
  ip: 192.168.0.51
  ip: 192.168.0.52
  ip: 192.168.0.55
  ip: 192.168.0.56
  ip: 192.168.0.57

我预计模板会采用值和索引并将它们放入我的服务数组中,但它只采用 Value.yaml 映射中的最后 key:value 对:

# Source: backend-mobile/templates/backend-mobile-db-service.yaml
kind: Endpoints
apiVersion: v1
metadata:
 name: backend-modbile-db-service
 namespace: default
subsets:
 - addresses:
      - ip: 192.168.0.57
   ports:
     - port: 5984
       name: backend-modbile-db-service

然而,我期望这样的输出:

# Source: backend-mobile/templates/backend-mobile-db-service.yaml
kind: Endpoints
apiVersion: v1
metadata:
 name: backend-modbile-db-service
 namespace: default
subsets:
 - addresses:
      - ip: 192.168.0.50
      - ip: 192.168.0.51
       [...]
      - ip: 192.168.0.52
   ports:
     - port: 5984
       name: backend-modbile-db-service

我哪里出错了? 提前致谢:)

因为你在一次又一次的覆盖ip,所以你只看到最后一个。如果你想声明一个ip数组,你应该这样做:

DatabaseEndpoints:
  ip:
  - 192.168.0.50
  - 192.168.0.51
  - 192.168.0.52
  - 192.168.0.55
  - 192.168.0.56
  - 192.168.0.57

因此您的模板应更改为如下所示:

subsets:
 - addresses:
     {{- range .Values.DatabaseEndpoints.ip }}
      - ip: {{ . }}
     {{- end }}