Skip to content

Duplicate Datasource Entries #2277

@Henni

Description

@Henni

What happened?
Defining a datasource in the example.jsonnet makes it show up twice in the rendered secret.

example.json containing the loki datasource
local kp =
  (import 'kube-prometheus/main.libsonnet') +
  // Uncomment the following imports to enable its patches
  // (import 'kube-prometheus/addons/anti-affinity.libsonnet') +
  // (import 'kube-prometheus/addons/managed-cluster.libsonnet') +
  // (import 'kube-prometheus/addons/node-ports.libsonnet') +
  // (import 'kube-prometheus/addons/static-etcd.libsonnet') +
  // (import 'kube-prometheus/addons/custom-metrics.libsonnet') +
  // (import 'kube-prometheus/addons/external-metrics.libsonnet') +
  // (import 'kube-prometheus/addons/pyrra.libsonnet') +
  {
    values+:: {
      common+: {
        namespace: 'monitoring',
      },
      prometheus+: {
        namespaces: ['kube-system', 'default', 'teamspeak'],
      },
      grafana+:: {
        datasources+:: [{
          name: 'loki',
          type: 'loki',
          access: 'proxy',
          org_id: 1,
          url: 'http://loki.loki:3100',
          version: 1,
          editable: false,
        }],
      },
    },
  };

{ 'setup/0namespace-namespace': kp.kubePrometheus.namespace } +
{
  ['setup/prometheus-operator-' + name]: kp.prometheusOperator[name]
  for name in std.filter((function(name) name != 'serviceMonitor' && name != 'prometheusRule'), std.objectFields(kp.prometheusOperator))
} +
// { 'setup/pyrra-slo-CustomResourceDefinition': kp.pyrra.crd } +
// serviceMonitor and prometheusRule are separated so that they can be created after the CRDs are ready
{ 'prometheus-operator-serviceMonitor': kp.prometheusOperator.serviceMonitor } +
{ 'prometheus-operator-prometheusRule': kp.prometheusOperator.prometheusRule } +
{ 'kube-prometheus-prometheusRule': kp.kubePrometheus.prometheusRule } +
{ ['alertmanager-' + name]: kp.alertmanager[name] for name in std.objectFields(kp.alertmanager) } +
{ ['blackbox-exporter-' + name]: kp.blackboxExporter[name] for name in std.objectFields(kp.blackboxExporter) } +
{ ['grafana-' + name]: kp.grafana[name] for name in std.objectFields(kp.grafana) } +
// { ['pyrra-' + name]: kp.pyrra[name] for name in std.objectFields(kp.pyrra) if name != 'crd' } +
{ ['kube-state-metrics-' + name]: kp.kubeStateMetrics[name] for name in std.objectFields(kp.kubeStateMetrics) } +
{ ['kubernetes-' + name]: kp.kubernetesControlPlane[name] for name in std.objectFields(kp.kubernetesControlPlane) }
{ ['node-exporter-' + name]: kp.nodeExporter[name] for name in std.objectFields(kp.nodeExporter) } +
{ ['prometheus-' + name]: kp.prometheus[name] for name in std.objectFields(kp.prometheus) } +
{ ['prometheus-adapter-' + name]: kp.prometheusAdapter[name] for name in std.objectFields(kp.prometheusAdapter) }
grafana-dashboardDatasources.yaml with the loki datasource rendered twice
apiVersion: v1
kind: Secret
metadata:
  labels:
    app.kubernetes.io/component: grafana
    app.kubernetes.io/name: grafana
    app.kubernetes.io/part-of: kube-prometheus
    app.kubernetes.io/version: 10.2.0
  name: grafana-datasources
  namespace: monitoring
stringData:
  datasources.yaml: |-
    {
        "apiVersion": 1,
        "datasources": [
            {
                "access": "proxy",
                "editable": false,
                "name": "prometheus",
                "orgId": 1,
                "type": "prometheus",
                "url": "http://prometheus-k8s.monitoring.svc:9090",
                "version": 1
            },
            {
                "access": "proxy",
                "editable": false,
                "name": "loki",
                "org_id": 1,
                "type": "loki",
                "url": "http://loki.loki:3100",
                "version": 1
            },
            {
                "access": "proxy",
                "editable": false,
                "name": "loki",
                "org_id": 1,
                "type": "loki",
                "url": "http://loki.loki:3100",
                "version": 1
            }
        ]
    }
type: Opaque

Did you expect to see some different?
Custom datasource should only be rendered once.

How to reproduce it (as minimally and precisely as possible):
Use default build.sh and copy example.json. Run build.sh and take a look at manifests/grafana-dashboardDatasources.yaml

Environment

  • Prometheus Operator version: quay.io/prometheus-operator/prometheus-operator:v0.69.1
  • Kubernetes version information:

    Client Version: v1.27.3
    Kustomize Version: v5.0.1
    Server Version: v1.27.7+k3s2

  • Kubernetes cluster kind: k3s
  • Prometheus Operator Logs: NA
  • Prometheus Logs: NA

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions