#kubernetes #kubernetes-helm #configmap
#kubernetes #kubernetes-helm #configmap
Вопрос:
Я пытаюсь обновить диаграмму руля,
Я получаю сообщение об ошибке «pod» не определено, что имеет смысл, потому что у меня действительно нет такой функции.
«Pod» поступает из файла json, который я конвертирую в configmap, и helm считывает это значение как функцию, а не как прямую строку, которая является частью файла json.
Это фрагмент моей конфигурационной карты:
# 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 amp; 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/templates/ grafana /dashboards / services-health.yaml: 1213: функция «pod» не определена
Я пытался избежать этого, но ничего не получалось. Кто-нибудь знает, как я могу обойти эту проблему?
Комментарии:
1. Вы пробовали использовать
helm lint
иhelm template
посмотреть, выглядят ли сгенерированные ресурсы так, как ожидалось?2. Я получаю тот же результат: [ОШИБКА] templates/: ошибка синтаксического анализа в «prometheus-operator /templates/ grafana/ dashboards/services-health.yaml»: шаблон: prometheus-operator /templates/grafana/ dashboards/services-health.yaml: 176: функция «pod» не определена
Ответ №1:
Экранирование заполнителей gotpl возможно с помощью обратных меток. Например, в вашем сценарии вместо использования {{ pod }}
вы могли бы написать {{` {{ pod }} `}}
.
Комментарии:
1. Это не переменная pod, это просто строка с именем «{{pod}}» в моем файле json.
2. Тогда в чем смысл передачи
--set pod=pod
?
Ответ №2:
Переместите json вашей панели инструментов в отдельный файл, скажем, назовите его dashboard.json. Затем в вашем файле configmap: вместо того, чтобы перечислять встроенный json, обратитесь к файлу dashboard.json, введя следующее:
data:
services-health.json: |-
{{ .Files.Get "dashboard.json" | indent 4 }}
Это решило бы проблему!
Комментарии:
1. Мне нравится это решение. Позволяет иметь чистый файл JSON, хранящийся отдельно, а не json-inside-yaml.
Ответ №3:
В случае моих экспериментов я заменил "legendFormat": "{{ pod }}",
на "legendFormat": "{{ "{{ pod }}" }}",
и был очень рад вернуть необходимый мне синтаксис (в частности, для графана-оператора GrafanaDashboard CRD).
Ответ №4:
Удаление файла json из карты конфигурации и поиск его в карте конфигурации работают, но убедитесь, что файл json не находится в каталоге шаблонов при использовании с helm, иначе он попытается выполнить поиск {{ pod }} .