我试图将整套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
目录下的单独文件中,并仅对需要自定义的特定字段使用模板。