无法在没有引号的情况下呈现 helm 模板

Not able to render the helm template without quotes

helm模板的渲染方法我几乎都用过了。但是现在我没有想法并寻求帮助:

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 (不带引号)

我得到的是:

基础域:'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