我有 argocd-apps 为我创建了两个 helm 资源。 看起来像:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: "{{ $key }}"
namespace: argocd
labels:
name: "{{ $key }}"
spec:
project: just-test
sources:
- repoURL: https://github.com/blabla.git
targetRevision: "main"
path: this_is/where_the_values_file_is
helm:
ignoreMissingValueFiles: true
releaseName: test
parameters:
- name: secrets
value: "{{ $val.secrets }}"
- repoURL: https://github.com/nginxinc/kubernetes-ingress.git
targetRevision: "0.1.1"
chart: nginx-ingress
helm:
ignoreMissingValueFiles: true
releaseName: test2
version: v3
destination:
name: "{{ $.Values.cluster_name }}"
namespace: "{{ $val.namespace }}"
syncPolicy:
syncOptions:
- Validate=false
- CreateNamespace=true
- PrunePropagationPolicy=foreground
- PruneLast=true
retry:
limit: 5
backoff:
duration: 5s
factor: 2
maxDuration: 3m
revisionHistoryLimit: 10
它应该模板 2 个应用程序,1 个 nginx 和另一个我的应用程序, 这是我的应用程序模板(k8s cm):
---
apiVersion: v1
kind: ConfigMap
metadata:
name: cm
data:
{{ .Values.secrets }}
这是我传递给 .Values.secrts 的值
secrets:
- name: xxxx
value: xxx
- name: yyyy
value: yyy
在第二个模板中,我以字符串映射的形式获取值,
[map[name:xxxx value:xxx]
map[name:yyyy value:yyy]]
我正在尝试获得一个可以使用的普通字典,我需要做什么才能获得像 常规字典 -> $val.name, $val.value 谢谢。
我尝试过 toYaml、toJson、fromYaml、fromJson,构建一个字典,并更改值。
为了迭代字典,您将使用 helm 的 range 函数
apiVersion: v1
kind: ConfigMap
metadata:
name: cm
data:
{{- range $k, $v := .Values.secrets }}
{{ $v.name }}: {{ quote $v.value }}
{{- end }}
运行
helm template .
将输出:
apiVersion: v1
kind: ConfigMap
metadata:
name: cm
data:
xxxx: "xxx"
yyyy: "yyy"