问题描述
我几乎使用了所有可能的方式来渲染头盔模板。但是现在我没主意了,正在寻求帮助:
values.yaml:
rollout:
namespace: xyz
project: default
baseDomain: "stage.danger.zone"
clusterDomain: cluster.local
manifest.yaml
apps:
certmanager:
source:
repoURL: 'https://artifactory.intern.example.io/artifactory/helm'
targetRevision: 0.0.6
chart: abc
helm:
releaseName: abc
values:
global:
imagePullSecrets:
- name: artifactory
baseDomain: "{{ .Values.rollout.baseDomain }}"
当我尝试在main.yaml文件中使用以下命令渲染模板时,将产生最终结果:
values: {{- tpl (toYaml $appValue.values | indent 6) $ }}
预期结果:
baseDomain:stage.danger.zone
(不带引号)
我得到的是:
baseDomain:'stage.danger.zone'
如果我尝试从 baseDomain: "{{ .Values.rollout.baseDomain }}"
中删除双引号,则会出现以下错误:
[debug] error converting YAML to JSON: yaml: invalid map key: map[interface {}]interface {}{".Values.baseDomain":interface {}(nil)}
有什么帮助或想法可以实现相同目标吗?
解决方法
这是YAML的预期行为。
一个肮脏又糟糕的黑客入侵会
values: {{- tpl (toYaml $appValue.values | fromYaml | toYaml | indent 6) $ }}
,然后您将看不到单引号。
但是,即使您的值中包含'
单引号,也根本不是问题。例如,您可以在下面添加该变量,例如:
hosts:
- host: some-gateway.{{ .Values.rollout.baseDomain }}
serviceName: gateway
servicePort: 8080
path: /
然后它将显示您的变量值,不带'
单引号。
渲染输出示例:
hosts:
- host: some-gateway.stage.danger.zone
path: /
serviceName: gateway
servicePort: 8080