сбой обновления руля с «функцией «X» не определен»

#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 }} .