我正在尝试升级头盔图表,
我得到了没有定义的错误函数“ pod”,因为我确实没有这样的函数。
“ pod”来自一个json文件,我将其转换为configmap,并且helm将此值作为函数而不是作为json文件一部分的直字符串读取。
这是我的configmap的片段:
# Generated from 'pods' from https://raw.githubusercontent.com/coreos/prometheus-operator/master/contrib/kube-prometheus/manifests/grafana-dashboardDefinitions.yaml
# Do not change in-place! In order to change this file first read following link:
# https://github.com/helm/charts/tree/master/stable/prometheus-operator/hack
{{- if and .Values.grafana.enabled .Values.grafana.defaultDashboardsEnabled }}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ printf "%s-%s" (include "prometheus-operator.fullname" $) "services-health" | trunc 63 | trimSuffix "-" }}
labels:
{{- if $.Values.grafana.sidecar.dashboards.label }}
{{ $.Values.grafana.sidecar.dashboards.label }}: "1"
{{- end }}
app: {{ template "prometheus-operator.name" $ }}-grafana
{{ include "prometheus-operator.labels" $ | indent 4 }}
data:
services-health.json: |-
{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": "-- Grafana --",
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"targets": [
{
"expr": "{__name__=~\"kube_pod_container_status_ready\", container=\"aggregation\",kubernetes_namespace=\"default\",chart=\"\"}",
"format": "time_series",
"instant": false,
"intervalFactor": 2,
"legendFormat": "{{pod}}",
"refId": "A"
}
}
{{- end }}
我收到的错误来自以下行:“ legendFormat”:“ {{pod}}”,
这是我得到的错误:
头盔升级-空运行prometheus-operator-chart / home / ubuntu / infra-devops / helm / vector-chart / prometheus-operator-chart / 错误:升级失败:解析“ prometheus-operator / templates / grafana / dashboards / services-health.yaml”中的错误: 模板: prometheus-operator /模板/ grafana /仪表板/services-health.yaml:1213: 函数“ pod”未定义
我试图逃脱它,但没有任何效果。 有人知道我如何解决此问题吗?
答案 0 :(得分:1)
可以使用backticks来转义gotpl占位符。例如,在您的方案中,可以使用{{ pod }}
来代替{{` {{ pod }} `}}
。
答案 1 :(得分:0)
将您的仪表板 json 移动到一个单独的文件中,假设将其命名为dashboard.json。 然后在您的 configmap 文件中:不要内联列出 json,而是通过键入以下内容引用dashboard.json 文件:
data:
services-health.json: |-
{{ .Files.Get "dashboard.json" | indent 4 }}
这样就能解决问题!
答案 2 :(得分:0)
将 json 文件保留在配置映射之外并在配置映射中获取它是可行的,但请确保在使用 helm 时将 json 文件保留在模板目录之外,否则它将尝试搜索 {{ pod }} .< /p>
答案 3 :(得分:0)
在我的实验中,我替换了
"legendFormat": "{{ pod }}",
和
"legendFormat": "{{ "{{ pod }}" }}",
并且很高兴返回我需要的语法(特别是对于 grafana-operator GrafanaDashboard CRD)。