From 3197720de6bf630c22ede17a7e1e854ba52dd7d9 Mon Sep 17 00:00:00 2001 From: paulfantom <pawel@krupa.net.pl> Date: Fri, 21 May 2021 11:43:54 +0200 Subject: [PATCH] *: add test of mixin addition in examples/; change config to `_config` in addMixin to be consistent with main components --- examples/mixin-inclusion.jsonnet | 30 +++++++++++++++++++++ jsonnet/kube-prometheus/lib/mixin.libsonnet | 22 +++++++-------- 2 files changed, 41 insertions(+), 11 deletions(-) create mode 100644 examples/mixin-inclusion.jsonnet diff --git a/examples/mixin-inclusion.jsonnet b/examples/mixin-inclusion.jsonnet new file mode 100644 index 00000000..fc75c628 --- /dev/null +++ b/examples/mixin-inclusion.jsonnet @@ -0,0 +1,30 @@ +local addMixin = (import 'kube-prometheus/lib/mixin.libsonnet'); +local etcdMixin = addMixin({ + name: 'etcd', + mixin: (import 'github.com/etcd-io/etcd/contrib/mixin/mixin.libsonnet') + { + _config+: {}, // mixin configuration object + }, +}); + +local kp = (import 'kube-prometheus/main.libsonnet') + + { + values+:: { + common+: { + namespace: 'monitoring', + }, + grafana+: { + // Adding new dashboard to grafana. This will modify grafana configMap with dashboards + dashboards+: etcdMixin.grafanaDashboards, + }, + }, + }; + +{ ['00namespace-' + name]: kp.kubePrometheus[name] for name in std.objectFields(kp.kubePrometheus) } + +{ ['0prometheus-operator-' + name]: kp.prometheusOperator[name] for name in std.objectFields(kp.prometheusOperator) } + +{ ['node-exporter-' + name]: kp.nodeExporter[name] for name in std.objectFields(kp.nodeExporter) } + +{ ['kube-state-metrics-' + name]: kp.kubeStateMetrics[name] for name in std.objectFields(kp.kubeStateMetrics) } + +{ ['alertmanager-' + name]: kp.alertmanager[name] for name in std.objectFields(kp.alertmanager) } + +{ ['prometheus-' + name]: kp.prometheus[name] for name in std.objectFields(kp.prometheus) } + +{ ['grafana-' + name]: kp.grafana[name] for name in std.objectFields(kp.grafana) } + +// Rendering prometheusRules object. This is an object compatible with prometheus-operator CRD definition for prometheusRule +{ 'external-mixins/etcd-mixin-prometheus-rules': etcdMixin.prometheusRules } diff --git a/jsonnet/kube-prometheus/lib/mixin.libsonnet b/jsonnet/kube-prometheus/lib/mixin.libsonnet index ae39425d..4c0665ea 100644 --- a/jsonnet/kube-prometheus/lib/mixin.libsonnet +++ b/jsonnet/kube-prometheus/lib/mixin.libsonnet @@ -8,29 +8,29 @@ local defaults = { }; function(params) { - config:: defaults + params, + _config:: defaults + params, local m = self, - local prometheusRules = if std.objectHasAll(m.config.mixin, 'prometheusRules') || std.objectHasAll(m.config.mixin, 'prometheusAlerts') then { + local prometheusRules = if std.objectHasAll(m._config.mixin, 'prometheusRules') || std.objectHasAll(m._config.mixin, 'prometheusAlerts') then { apiVersion: 'monitoring.coreos.com/v1', kind: 'PrometheusRule', metadata: { - labels: m.config.labels, - name: m.config.name, - namespace: m.config.namespace, + labels: m._config.labels, + name: m._config.name, + namespace: m._config.namespace, }, spec: { - local r = if std.objectHasAll(m.config.mixin, 'prometheusRules') then m.config.mixin.prometheusRules.groups else [], - local a = if std.objectHasAll(m.config.mixin, 'prometheusAlerts') then m.config.mixin.prometheusAlerts.groups else [], + local r = if std.objectHasAll(m._config.mixin, 'prometheusRules') then m._config.mixin.prometheusRules.groups else [], + local a = if std.objectHasAll(m._config.mixin, 'prometheusAlerts') then m._config.mixin.prometheusAlerts.groups else [], groups: a + r, }, }, - local grafanaDashboards = if std.objectHasAll(m.config.mixin, 'grafanaDashboards') then ( - if std.objectHas(m.config, 'dashboardFolder') then { - [m.config.dashboardFolder]+: m.config.mixin.grafanaDashboards, - } else (m.config.mixin.grafanaDashboards) + local grafanaDashboards = if std.objectHasAll(m._config.mixin, 'grafanaDashboards') then ( + if std.objectHas(m._config, 'dashboardFolder') then { + [m._config.dashboardFolder]+: m._config.mixin.grafanaDashboards, + } else (m._config.mixin.grafanaDashboards) ), prometheusRules: prometheusRules, -- GitLab