从values传递整个yaml.Yaml到模板中



我试图将整套yamls从values.yaml传递到templates,以便我传递值的任何yaml输入。Yaml部分按原样放入模板的Yaml中:

例如:

values.yaml

...
...
metallbConfig: |-
apiVersion: metallb.io/v1beta2
kind: BGPPeer
metadata:
creationTimestamp: null
name: peer1
namespace: metallb-system
spec:
holdTime: 3s
keepaliveTime: 0s
myASN: 64026
passwordSecret: {}
peerASN: 65227
peerAddress: 10.252.254.194
status: {}

templates/resources.yaml:

{{ toYaml .Values.metallbConfig }}

当我部署图表时,我想要实现的是整个BGPPeer部分出现在resources.yaml中。

当前我得到这个错误:

# helm template metallbcnf . --output-dir outputs --debug
...
...
Error: YAML parse error on metallb/templates/resources.yaml: error unmarshaling JSON: while decoding JSON: json: cannot unmarshal string into Go value of type releaseutil.SimpleHead
helm.go:84: [debug] error unmarshaling JSON: while decoding JSON: json: cannot unmarshal string into Go value of type releaseutil.SimpleHead

请帮我解决同样的问题。

如果你想完全嵌入html,你不需要|-

例如,在values.yaml

...
probes:
livenessProbe:
httpGet:
path: /ping
port: 80
initialDelaySeconds: 15
periodSeconds: 60
successThreshold: 1
timeoutSeconds: 5
failureThreshold: 3
readinessProbe:
httpGet:
path: /ping
port: 80
initialDelaySeconds: 15
periodSeconds: 60
successThreshold: 1
timeoutSeconds: 5
failureThreshold: 3
...

然后在我的头盔部署中使用:

apiVersion: apps/v1
kind: Deployment
...
spec:
...
template:
...
spec:
...
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag}}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
{{- toYaml .Values.probes | nindent 10 }}
...
...

你会注意到我需要明确使用nindent缩进,否则helm只是在yaml中粘贴values.yaml,这会破坏解析

values。yaml文件包含一个字符串而不是一个有效的yaml对象。您需要在将字符串传递给模板之前将其转换为YAML对象。

您的字符串已经是语法正确的YAML(希望如此!),您可以按原样将其写出来。toYaml将添加额外的引号,将其转换为特定的YAML字符串,您不希望这样。

---
{{ .Values.metallbConfig }}
{{/* without toYaml */}}

(我认为将整个Kubernetes YAML对象存放在Helm值中有点不寻常,特别是作为一个不透明的字符串。考虑将其移动到templates目录下的单独文件中,并仅对需要自定义的特定字段使用模板。

相关内容

  • 没有找到相关文章

最新更新