Helm charts: 无法访问子图表中定义的命名模板

50次阅读
没有评论

问题描述

在使用Helm charts时遇到了一个问题,他无法从子图表中访问主图表中定义的一些命名模板。根据文档,每个定义的命名模板都是全局的,他想知道自己在这里做错了什么。
以下是主图表中在_helper.tpl中定义的命名模板,他试图在子图表的configMap中访问它,但结果是模板不存在的错误。

_helper.tpl inside chart/templates
{{- define "main.postgres"}}
    POSTGRES_URL: 172.30.30.39
    POSTGRES_PORT: 5432
{{- end }}
configMap.yaml inside chart/subchart/templates
apiVerions: v1
kind: ConfigMap
metadata:
  name: subchart-config
data:
  {{- template "main.postgres" .}}

错误信息:

error calling include: template: no template "main.postgres" associated with template "gotpl"

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

根据你提供的信息,我发现了Helm模板中的问题。Helm图表中的charts目录应该是charts,而不是chart。我尝试模拟了你的问题,并成功修复了它。
我重新组织了目录结构如下:

.
├── Chart.yaml
├── charts
│   └── subchart
│       ├── Chart.yaml
│       ├── charts
│       ├── templates
│       │   └── configMap.yaml
│       └── values.yaml
├── templates
│   └── _helper.tpl
└── values.yaml

我使用了你提供的_helper.tpl文件。

{{- define "main.postgres"}}
    POSTGRES_URL: 172.30.30.39
    POSTGRES_PORT: 5432
{{- end }}

当我运行helm template .命令时,我得到了你期望的正确结果。

helm template .
---
# Source: test/charts/subchart/templates/configMap.yaml
apiVerions: v1
kind: ConfigMap
metadata:
  name: subchart-config
data:
  POSTGRES_URL: 172.30.30.39
  POSTGRES_PORT: 5432

方案2

请注意以下操作注意版本差异及修改前做好备份。
另一种可能的问题是目录结构不正确。请确保目录名为templates,而不是template

templates
└── _helper.tpl

希望这些解决方案能帮助到你解决问题。如果还有其他问题,请随时提问。

正文完