-
Notifications
You must be signed in to change notification settings - Fork 2k
Open
Labels
Description
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
toby-archer-tr, joscherrer and superbiche