HELM-如何使用复数值迭代映射 [英] helm - how to iterate over map with complex values
本文介绍了HELM-如何使用复数值迭代映射的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在舵图中,希望迭代包含结构化值的映射。
我知道如何使用简单的字符串值迭代映射。我还可以遍历包含结构化值的数组(这里没有显示)。但我没有设法迭代包含结构化值的映射。
这是我的目录结构,包含3个文件:
templates/test.yaml
Chart.yaml
values.yaml
一个简单的文件Chart.yaml(仅用于完成展示):
---
apiVersion: v1
appVersion: "1.0"
description: A Helm chart for Kubernetes
name: foochart
version: 0.1.0
包含简单字符串值的映射(标签)和包含结构化值的映射(标签1)的文件values.yaml:
---
label:
fook: foo
bark: bar
label1:
fook:
name: foo
value: foo1
bark:
name: bar
value: bar2
此模板test.yaml有效:
---
env:
{{- range $k, $v := .Values.label }}
- name: {{ $k }}
value: {{ $v }}
{{- end }}
但当我将.Values.label
替换为.Values.label1
时,它不会产生任何输出。
这是我的测试命令:
helm template foochart
问题:是否可以处理具有结构化值的映射?我想使用类似$v.name
的内容。如果是,我如何才能做到这一点?
推荐答案
如果您知道$v
是保存对象的变量,则实际上可以使用类似$v.name
的语法。
env:
{{- range $k, $v := .Values.label1 }}
- name: {{ $k }}_{{ $v.name }}
value: {{ $v.value }}
{{- end }}
如果您知道它具有您想要的语法,那么有一个文档不足的toYaml
函数,它接受任意对象并将其作为未缩进的YAML返回。在您的示例中,每个值都具有env:
项的形式,如果您知道(或指定)这一点,您可以逐字写出:
env:
{{- range .Values.label1 }}
- {{ . | toYaml | indent 4 | trim }}
{{- else }}
[]
{{- end }}
(在最后一个示例中:我没有赋值,因此.
被临时重新赋值给映射中的每个值,键丢失;对于每个项,我将其转换为YAML,缩进4个空格,但随后删除前导空格和尾随空格;如果没有值,则显式写出一个空列表。)
通常更容易指定您希望值采用的格式,并使用该格式。如果您出于某种原因不能确定您拥有的是哪种表单,模板语言包含functions to test on a value's type,因此原则上您可以测试:
env:
{{- range $k, $v := .Values.labelN }}
{{- if kindIs "string" $v }}
- name: {{ $k }}
value: {{ $v }}
{{- else }}
- name: {{ $v.name }}
value: {{ $v.value }}
{{- end }}
{{- else }}
[]
{{- end }}
这篇关于HELM-如何使用复数值迭代映射的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文