没有引号就无法呈现头盔模板

问题描述

我几乎使用了所有可能的方式来渲染头盔模板。但是现在我没主意了,正在寻求帮助:

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...