From 2913c866bbb612b10f5ce4520a38276d66b68d89 Mon Sep 17 00:00:00 2001
From: paulfantom <pawel@krupa.net.pl>
Date: Tue, 19 Jan 2021 13:40:43 +0100
Subject: [PATCH] fix references to old variables and to other files

Signed-off-by: paulfantom <pawel@krupa.net.pl>
---
 example.jsonnet                               | 10 +--
 ...ditional-namespaces-servicemonitor.jsonnet | 10 +--
 examples/additional-namespaces.jsonnet        |  8 ++-
 examples/alertmanager-config-external.jsonnet |  2 +-
 examples/alertmanager-config.jsonnet          |  4 +-
 examples/all-namespaces.jsonnet               | 13 ++--
 .../kube-prometheus/argocd-basic.jsonnet      |  9 +--
 examples/eks-cni-example.jsonnet              | 30 +++++----
 examples/etcd-skip-verify.jsonnet             | 11 ++--
 examples/etcd.jsonnet                         | 10 +--
 ...ditional-jsonnet-dashboard-example.jsonnet |  2 +-
 ...ional-rendered-dashboard-example-2.jsonnet |  2 +-
 ...itional-rendered-dashboard-example.jsonnet |  2 +-
 examples/ingress.jsonnet                      | 16 +++--
 examples/internal-registry.jsonnet            | 10 +--
 examples/ksonnet-example.jsonnet              |  2 +-
 examples/minikube.jsonnet                     | 14 ++--
 ...heus-additional-alert-rule-example.jsonnet | 40 +++++++-----
 ...-additional-recording-rule-example.jsonnet | 28 ++++----
 ...s-additional-rendered-rule-example.jsonnet | 16 +++--
 examples/prometheus-name-override.jsonnet     |  2 +-
 examples/prometheus-pvc.jsonnet               | 18 +++---
 examples/strip-limits.jsonnet                 | 10 +--
 examples/tolerations.libsonnet                | 28 ++++----
 examples/weave-net-example.jsonnet            | 64 ++++++++++---------
 .../addons/anti-affinity.libsonnet            |  4 +-
 .../addons/config-mixins.libsonnet            |  2 +-
 .../addons/custom-metrics.libsonnet           | 12 ++--
 .../addons/external-metrics.libsonnet         | 12 ++--
 .../kube-prometheus/addons/image.libsonnet    | 21 ------
 .../addons/insecure-kubelet.libsonnet         |  2 +-
 .../addons/ksm-autoscaler.libsonnet           | 18 +++---
 .../addons/managed-cluster.libsonnet          |  4 +-
 .../addons/static-etcd.libsonnet              | 16 ++---
 .../addons/thanos-sidecar.libsonnet           |  4 +-
 .../kube-prometheus/platforms/eks.libsonnet   | 45 +++++++------
 36 files changed, 267 insertions(+), 234 deletions(-)
 delete mode 100644 jsonnet/kube-prometheus/addons/image.libsonnet

diff --git a/example.jsonnet b/example.jsonnet
index ca5028c8..2568be96 100644
--- a/example.jsonnet
+++ b/example.jsonnet
@@ -25,11 +25,11 @@ local kp =
 { 'prometheus-operator-serviceMonitor': kp.prometheusOperator.serviceMonitor } +
 { 'prometheus-operator-prometheusRule': kp.prometheusOperator.prometheusRule } +
 { 'kube-prometheus-prometheusRule': kp.kubePrometheus.prometheusRule } +
-{ ['node-exporter-' + name]: kp.nodeExporter[name] for name in std.objectFields(kp.nodeExporter) } +
-{ ['blackbox-exporter-' + name]: kp.blackboxExporter[name] for name in std.objectFields(kp.blackboxExporter) } +
-{ ['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) } +
-{ ['prometheus-adapter-' + name]: kp.prometheusAdapter[name] for name in std.objectFields(kp.prometheusAdapter) } +
+{ ['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) } +
+{ ['kube-state-metrics-' + name]: kp.kubeStateMetrics[name] for name in std.objectFields(kp.kubeStateMetrics) } +
 { ['kubernetes-' + name]: kp.kubernetesMixin[name] for name in std.objectFields(kp.kubernetesMixin) }
+{ ['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) }
diff --git a/examples/additional-namespaces-servicemonitor.jsonnet b/examples/additional-namespaces-servicemonitor.jsonnet
index 0f3add96..6cfe37db 100644
--- a/examples/additional-namespaces-servicemonitor.jsonnet
+++ b/examples/additional-namespaces-servicemonitor.jsonnet
@@ -1,11 +1,13 @@
-local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + {
-  _config+:: {
-    namespace: 'monitoring',
+local kp = (import 'kube-prometheus/main.libsonnet') + {
+  values+:: {
+    common+: {
+      namespace: 'monitoring',
+    },
     prometheus+:: {
       namespaces+: ['my-namespace', 'my-second-namespace'],
     },
   },
-  prometheus+:: {
+  prometheus+: {
     serviceMonitorMyNamespace: {
       apiVersion: 'monitoring.coreos.com/v1',
       kind: 'ServiceMonitor',
diff --git a/examples/additional-namespaces.jsonnet b/examples/additional-namespaces.jsonnet
index 957fd912..85cae475 100644
--- a/examples/additional-namespaces.jsonnet
+++ b/examples/additional-namespaces.jsonnet
@@ -1,6 +1,8 @@
-local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + {
-  _config+:: {
-    namespace: 'monitoring',
+local kp = (import 'kube-prometheus/main.libsonnet') + {
+  values+:: {
+    common+: {
+      namespace: 'monitoring',
+    },
 
     prometheus+:: {
       namespaces+: ['my-namespace', 'my-second-namespace'],
diff --git a/examples/alertmanager-config-external.jsonnet b/examples/alertmanager-config-external.jsonnet
index c2b34cca..5d96d23d 100644
--- a/examples/alertmanager-config-external.jsonnet
+++ b/examples/alertmanager-config-external.jsonnet
@@ -1,4 +1,4 @@
-((import 'kube-prometheus/kube-prometheus.libsonnet') + {
+((import 'kube-prometheus/main.libsonnet') + {
    _config+:: {
      alertmanager+: {
        config: importstr 'alertmanager-config.yaml',
diff --git a/examples/alertmanager-config.jsonnet b/examples/alertmanager-config.jsonnet
index f08dbe19..9702711a 100644
--- a/examples/alertmanager-config.jsonnet
+++ b/examples/alertmanager-config.jsonnet
@@ -1,5 +1,5 @@
-((import 'kube-prometheus/kube-prometheus.libsonnet') + {
-   _config+:: {
+((import 'kube-prometheus/main.libsonnet') + {
+   values+:: {
      alertmanager+: {
        config: |||
          global:
diff --git a/examples/all-namespaces.jsonnet b/examples/all-namespaces.jsonnet
index 7c5d149f..52534766 100644
--- a/examples/all-namespaces.jsonnet
+++ b/examples/all-namespaces.jsonnet
@@ -1,9 +1,10 @@
-local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') +
-           (import 'kube-prometheus/kube-prometheus-all-namespaces.libsonnet') + {
-  _config+:: {
-    namespace: 'monitoring',
-
-    prometheus+:: {
+local kp = (import 'kube-prometheus/main.libsonnet') +
+           (import 'kube-prometheus/addons/all-namespaces.libsonnet') + {
+  values+:: {
+    common+: {
+      namespace: 'monitoring',
+    },
+    prometheus+: {
       namespaces: [],
     },
   },
diff --git a/examples/continuous-delivery/argocd/kube-prometheus/argocd-basic.jsonnet b/examples/continuous-delivery/argocd/kube-prometheus/argocd-basic.jsonnet
index 8600d818..94089e0c 100644
--- a/examples/continuous-delivery/argocd/kube-prometheus/argocd-basic.jsonnet
+++ b/examples/continuous-delivery/argocd/kube-prometheus/argocd-basic.jsonnet
@@ -1,7 +1,8 @@
-local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + {
-
-  _config+:: {
-    namespace: 'monitoring',
+local kp = (import 'kube-prometheus/main.libsonnet') + {
+  values+:: {
+    common+: {
+      namespace: 'monitoring',
+    },
   },
 };
 
diff --git a/examples/eks-cni-example.jsonnet b/examples/eks-cni-example.jsonnet
index dcebf6dd..77fa5d0b 100644
--- a/examples/eks-cni-example.jsonnet
+++ b/examples/eks-cni-example.jsonnet
@@ -1,20 +1,26 @@
-local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') +
-           (import 'kube-prometheus/kube-prometheus-eks.libsonnet') + {
-  _config+:: {
-    namespace: 'monitoring',
+local kp = (import 'kube-prometheus/main.libsonnet') +
+           (import 'kube-prometheus/platforms/eks.libsonnet') + {
+  values+:: {
+    common+: {
+      namespace: 'monitoring',
+    },
   },
-  prometheusRules+:: {
-    groups+: [
-      {
-        name: 'example-group',
-        rules: [
+  prometheus+: {
+    prometheusRuleEksCNI+: {
+      spec+: {
+        groups+: [
           {
-            record: 'aws_eks_available_ip',
-            expr: 'sum by(instance) (awscni_total_ip_addresses) - sum by(instance) (awscni_assigned_ip_addresses) < 10',
+            name: 'example-group',
+            rules: [
+              {
+                record: 'aws_eks_available_ip',
+                expr: 'sum by(instance) (awscni_total_ip_addresses) - sum by(instance) (awscni_assigned_ip_addresses) < 10',
+              },
+            ],
           },
         ],
       },
-    ],
+    },
   },
 };
 
diff --git a/examples/etcd-skip-verify.jsonnet b/examples/etcd-skip-verify.jsonnet
index 603ba710..9982fa16 100644
--- a/examples/etcd-skip-verify.jsonnet
+++ b/examples/etcd-skip-verify.jsonnet
@@ -1,8 +1,9 @@
-local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') +
-           (import 'kube-prometheus/kube-prometheus-static-etcd.libsonnet') + {
-  _config+:: {
-    namespace: 'monitoring',
-
+local kp = (import 'kube-prometheus/main.libsonnet') +
+           (import 'kube-prometheus/addons/static-etcd.libsonnet') + {
+  values+:: {
+    common+: {
+      namespace: 'monitoring',
+    },
     etcd+:: {
       ips: ['127.0.0.1'],
       clientCA: importstr 'etcd-client-ca.crt',
diff --git a/examples/etcd.jsonnet b/examples/etcd.jsonnet
index 03d390cd..e494b6ad 100644
--- a/examples/etcd.jsonnet
+++ b/examples/etcd.jsonnet
@@ -1,7 +1,9 @@
-local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') +
-           (import 'kube-prometheus/kube-prometheus-static-etcd.libsonnet') + {
-  _config+:: {
-    namespace: 'monitoring',
+local kp = (import 'kube-prometheus/main.libsonnet') +
+           (import 'kube-prometheus/addons/static-etcd.libsonnet') + {
+  values+:: {
+    common+: {
+      namespace: 'monitoring',
+    },
 
     // Reference info: https://github.com/coreos/kube-prometheus/blob/master/README.md#static-etcd-configuration
     etcd+:: {
diff --git a/examples/grafana-additional-jsonnet-dashboard-example.jsonnet b/examples/grafana-additional-jsonnet-dashboard-example.jsonnet
index b9b26fca..fcfdd1fb 100644
--- a/examples/grafana-additional-jsonnet-dashboard-example.jsonnet
+++ b/examples/grafana-additional-jsonnet-dashboard-example.jsonnet
@@ -5,7 +5,7 @@ local prometheus = grafana.prometheus;
 local template = grafana.template;
 local graphPanel = grafana.graphPanel;
 
-local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + {
+local kp = (import 'kube-prometheus/main.libsonnet') + {
   _config+:: {
     namespace: 'monitoring',
   },
diff --git a/examples/grafana-additional-rendered-dashboard-example-2.jsonnet b/examples/grafana-additional-rendered-dashboard-example-2.jsonnet
index 7d0926e9..e18c6242 100644
--- a/examples/grafana-additional-rendered-dashboard-example-2.jsonnet
+++ b/examples/grafana-additional-rendered-dashboard-example-2.jsonnet
@@ -1,4 +1,4 @@
-local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + {
+local kp = (import 'kube-prometheus/main.libsonnet') + {
   _config+:: {
     namespace: 'monitoring',
   },
diff --git a/examples/grafana-additional-rendered-dashboard-example.jsonnet b/examples/grafana-additional-rendered-dashboard-example.jsonnet
index 883c6097..6c5bb048 100644
--- a/examples/grafana-additional-rendered-dashboard-example.jsonnet
+++ b/examples/grafana-additional-rendered-dashboard-example.jsonnet
@@ -1,4 +1,4 @@
-local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + {
+local kp = (import 'kube-prometheus/main.libsonnet') + {
   _config+:: {
     namespace: 'monitoring',
   },
diff --git a/examples/ingress.jsonnet b/examples/ingress.jsonnet
index 023af577..a2e26cd7 100644
--- a/examples/ingress.jsonnet
+++ b/examples/ingress.jsonnet
@@ -14,10 +14,12 @@ local ingress(name, namespace, rules) = {
 };
 
 local kp =
-  (import 'kube-prometheus/kube-prometheus.libsonnet') +
+  (import 'kube-prometheus/main.libsonnet') +
   {
-    _config+:: {
-      namespace: 'monitoring',
+    values+:: {
+      common+: {
+        namespace: 'monitoring',
+      },
       grafana+:: {
         config+: {
           sections+: {
@@ -47,7 +49,7 @@ local kp =
     ingress+:: {
       'alertmanager-main': ingress(
         'alertmanager-main',
-        $._config.namespace,
+        $.values.common.namespace,
         [{
           host: 'alertmanager.example.com',
           http: {
@@ -64,7 +66,7 @@ local kp =
       ),
       grafana: ingress(
         'grafana',
-        $._config.namespace,
+        $.values.common.namespace,
         [{
           host: 'grafana.example.com',
           http: {
@@ -81,7 +83,7 @@ local kp =
       ),
       'prometheus-k8s': ingress(
         'prometheus-k8s',
-        $._config.namespace,
+        $.values.common.namespace,
         [{
           host: 'prometheus.example.com',
           http: {
@@ -105,7 +107,7 @@ local kp =
         kind: 'Secret',
         metadata: {
           name: 'basic-auth',
-          namespace: $._config.namespace,
+          namespace: $.values.common.namespace,
         },
         data: { auth: std.base64(importstr 'auth') },
         type: 'Opaque',
diff --git a/examples/internal-registry.jsonnet b/examples/internal-registry.jsonnet
index f1d1e8ac..fc470de6 100644
--- a/examples/internal-registry.jsonnet
+++ b/examples/internal-registry.jsonnet
@@ -1,7 +1,9 @@
-local mixin = import 'kube-prometheus/kube-prometheus-config-mixins.libsonnet';
-local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + {
-  _config+:: {
-    namespace: 'monitoring',
+local mixin = import 'kube-prometheus/addons/config-mixins.libsonnet';
+local kp = (import 'kube-prometheus/main.libsonnet') + {
+  values+:: {
+    common+: {
+      namespace: 'monitoring',
+    },
   },
 } + mixin.withImageRepository('internal-registry.com/organization');
 
diff --git a/examples/ksonnet-example.jsonnet b/examples/ksonnet-example.jsonnet
index eadd2cb7..36640ab4 100644
--- a/examples/ksonnet-example.jsonnet
+++ b/examples/ksonnet-example.jsonnet
@@ -1,4 +1,4 @@
-((import 'kube-prometheus/kube-prometheus.libsonnet') + {
+((import 'kube-prometheus/main.libsonnet') + {
    nodeExporter+: {
      daemonset+: {
        metadata+: {
diff --git a/examples/minikube.jsonnet b/examples/minikube.jsonnet
index 3073612a..dd2f77b4 100644
--- a/examples/minikube.jsonnet
+++ b/examples/minikube.jsonnet
@@ -1,11 +1,13 @@
 local kp =
-  (import 'kube-prometheus/kube-prometheus.libsonnet') +
-  (import 'kube-prometheus/kube-prometheus-kubeadm.libsonnet') +
+  (import 'kube-prometheus/main.libsonnet') +
+  (import 'kube-prometheus/platforms/kubeadm.libsonnet') +
   // Note that NodePort type services is likely not a good idea for your production use case, it is only used for demonstration purposes here.
-  (import 'kube-prometheus/kube-prometheus-node-ports.libsonnet') +
+  (import 'kube-prometheus/addons/node-ports.libsonnet') +
   {
-    _config+:: {
-      namespace: 'monitoring',
+    values+:: {
+      common+: {
+        namespace: 'monitoring',
+      },
       alertmanager+:: {
         config: importstr 'alertmanager-config.yaml',
       },
@@ -22,7 +24,7 @@ local kp =
     // For simplicity, each of the following values for 'externalUrl':
     //  * assume that `minikube ip` prints "192.168.99.100"
     //  * hard-code the NodePort for each app
-    prometheus+:: {
+    prometheus+: {
       prometheus+: {
         // Reference info: https://coreos.com/operators/prometheus/docs/latest/api.html#prometheusspec
         spec+: {
diff --git a/examples/prometheus-additional-alert-rule-example.jsonnet b/examples/prometheus-additional-alert-rule-example.jsonnet
index 6e63382e..63ec2ea7 100644
--- a/examples/prometheus-additional-alert-rule-example.jsonnet
+++ b/examples/prometheus-additional-alert-rule-example.jsonnet
@@ -1,25 +1,31 @@
-local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + {
-  _config+:: {
-    namespace: 'monitoring',
+local kp = (import 'kube-prometheus/main.libsonnet') + {
+  values+:: {
+    common+: {
+      namespace: 'monitoring',
+    },
   },
-  prometheusAlerts+:: {
-    groups+: [
-      {
-        name: 'example-group',
-        rules: [
+  prometheus+: {
+    prometheusRule+: {
+      spec+: {
+        groups+: [
           {
-            alert: 'Watchdog',
-            expr: 'vector(1)',
-            labels: {
-              severity: 'none',
-            },
-            annotations: {
-              description: 'This is a Watchdog meant to ensure that the entire alerting pipeline is functional.',
-            },
+            name: 'example-group',
+            rules: [
+              {
+                alert: 'Watchdog',
+                expr: 'vector(1)',
+                labels: {
+                  severity: 'none',
+                },
+                annotations: {
+                  description: 'This is a Watchdog meant to ensure that the entire alerting pipeline is functional.',
+                },
+              },
+            ],
           },
         ],
       },
-    ],
+    },
   },
 };
 
diff --git a/examples/prometheus-additional-recording-rule-example.jsonnet b/examples/prometheus-additional-recording-rule-example.jsonnet
index 132bd0db..c2abc4d3 100644
--- a/examples/prometheus-additional-recording-rule-example.jsonnet
+++ b/examples/prometheus-additional-recording-rule-example.jsonnet
@@ -1,19 +1,25 @@
-local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + {
-  _config+:: {
-    namespace: 'monitoring',
+local kp = (import 'kube-prometheus/main.libsonnet') + {
+  values+:: {
+    common+: {
+      namespace: 'monitoring',
+    },
   },
-  prometheusRules+:: {
-    groups+: [
-      {
-        name: 'example-group',
-        rules: [
+  prometheus+: {
+    prometheusRule+: {
+      spec+: {
+        groups+: [
           {
-            record: 'some_recording_rule_name',
-            expr: 'vector(1)',
+            name: 'example-group',
+            rules: [
+              {
+                record: 'some_recording_rule_name',
+                expr: 'vector(1)',
+              },
+            ],
           },
         ],
       },
-    ],
+    },
   },
 };
 
diff --git a/examples/prometheus-additional-rendered-rule-example.jsonnet b/examples/prometheus-additional-rendered-rule-example.jsonnet
index b6d39a40..29676851 100644
--- a/examples/prometheus-additional-rendered-rule-example.jsonnet
+++ b/examples/prometheus-additional-rendered-rule-example.jsonnet
@@ -1,9 +1,15 @@
-local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') + {
-  _config+:: {
-    namespace: 'monitoring',
+local kp = (import 'kube-prometheus/main.libsonnet') + {
+  values+:: {
+    common+: {
+      namespace: 'monitoring',
+    },
   },
-  prometheusAlerts+:: {
-    groups+: (import 'existingrule.json').groups,
+  prometheus+: {
+    prometheusRule+: {
+      spec+: {
+        groups+: (import 'existingrule.json').groups,
+      },
+    },
   },
 };
 
diff --git a/examples/prometheus-name-override.jsonnet b/examples/prometheus-name-override.jsonnet
index 86218012..b6c39060 100644
--- a/examples/prometheus-name-override.jsonnet
+++ b/examples/prometheus-name-override.jsonnet
@@ -1,4 +1,4 @@
-((import 'kube-prometheus/kube-prometheus.libsonnet') + {
+((import 'kube-prometheus/main.libsonnet') + {
    prometheus+: {
      prometheus+: {
        metadata+: {
diff --git a/examples/prometheus-pvc.jsonnet b/examples/prometheus-pvc.jsonnet
index e753499e..ee0f5c24 100644
--- a/examples/prometheus-pvc.jsonnet
+++ b/examples/prometheus-pvc.jsonnet
@@ -1,14 +1,16 @@
 local kp =
-  (import 'kube-prometheus/kube-prometheus.libsonnet') +
+  (import 'kube-prometheus/main.libsonnet') +
   // Uncomment the following imports to enable its patches
-  // (import 'kube-prometheus/kube-prometheus-anti-affinity.libsonnet') +
-  // (import 'kube-prometheus/kube-prometheus-managed-cluster.libsonnet') +
-  // (import 'kube-prometheus/kube-prometheus-node-ports.libsonnet') +
-  // (import 'kube-prometheus/kube-prometheus-static-etcd.libsonnet') +
-  // (import 'kube-prometheus/kube-prometheus-thanos-sidecar.libsonnet') +
+  // (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/thanos-sidecar.libsonnet') +
   {
-    _config+:: {
-      namespace: 'monitoring',
+    values+:: {
+      common+: {
+        namespace: 'monitoring',
+      },
     },
 
     prometheus+:: {
diff --git a/examples/strip-limits.jsonnet b/examples/strip-limits.jsonnet
index 69912b64..fc43e286 100644
--- a/examples/strip-limits.jsonnet
+++ b/examples/strip-limits.jsonnet
@@ -1,7 +1,9 @@
-local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') +
-           (import 'kube-prometheus/kube-prometheus-strip-limits.libsonnet') + {
-  _config+:: {
-    namespace: 'monitoring',
+local kp = (import 'kube-prometheus/main.libsonnet') +
+           (import 'kube-prometheus/addons/strip-limits.libsonnet') + {
+  values+:: {
+    common+: {
+      namespace: 'monitoring',
+    },
   },
 };
 
diff --git a/examples/tolerations.libsonnet b/examples/tolerations.libsonnet
index 35776f39..f244cebf 100644
--- a/examples/tolerations.libsonnet
+++ b/examples/tolerations.libsonnet
@@ -1,23 +1,19 @@
 {
-  _config+:: {
-    tolerations+:: [
-      {
-        key: 'key1',
-        operator: 'Equal',
-        value: 'value1',
-        effect: 'NoSchedule',
-      },
-      {
-        key: 'key2',
-        operator: 'Exists',
-      },
-    ],
-  },
-
   prometheus+: {
     prometheus+: {
       spec+: {
-        tolerations: [t for t in $._config.tolerations],
+        tolerations: [
+          {
+            key: 'key1',
+            operator: 'Equal',
+            value: 'value1',
+            effect: 'NoSchedule',
+          },
+          {
+            key: 'key2',
+            operator: 'Exists',
+          },
+        ],
       },
     },
   },
diff --git a/examples/weave-net-example.jsonnet b/examples/weave-net-example.jsonnet
index c6cc733c..9d708761 100644
--- a/examples/weave-net-example.jsonnet
+++ b/examples/weave-net-example.jsonnet
@@ -1,33 +1,39 @@
-local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') +
-           (import 'kube-prometheus/kube-prometheus-weave-net.libsonnet') + {
-  _config+:: {
-    namespace: 'monitoring',
+local kp = (import 'kube-prometheus/main.libsonnet') +
+           (import 'kube-prometheus/addons/weave-net.libsonnet') + {
+  values+:: {
+    common+: {
+      namespace: 'monitoring',
+    },
   },
-  prometheusAlerts+:: {
-    groups: std.map(
-      function(group)
-        if group.name == 'weave-net' then
-          group {
-            rules: std.map(
-              function(rule)
-                if rule.alert == 'WeaveNetFastDPFlowsLow' then
-                  rule {
-                    expr: 'sum(weave_flows) < 20000',
-                  }
-                else if rule.alert == 'WeaveNetIPAMUnreachable' then
-                  rule {
-                    expr: 'weave_ipam_unreachable_percentage > 25',
-                  }
-                else
-                  rule
-              ,
-              group.rules
-            ),
-          }
-        else
-          group,
-      super.groups
-    ),
+  prometheus+: {
+    prometheusRule+: {
+      spec+: {
+        groups: std.map(
+          function(group)
+            if group.name == 'weave-net' then
+              group {
+                rules: std.map(
+                  function(rule)
+                    if rule.alert == 'WeaveNetFastDPFlowsLow' then
+                      rule {
+                        expr: 'sum(weave_flows) < 20000',
+                      }
+                    else if rule.alert == 'WeaveNetIPAMUnreachable' then
+                      rule {
+                        expr: 'weave_ipam_unreachable_percentage > 25',
+                      }
+                    else
+                      rule
+                  ,
+                  group.rules
+                ),
+              }
+            else
+              group,
+          super.groups
+        ),
+      },
+    },
   },
 };
 
diff --git a/jsonnet/kube-prometheus/addons/anti-affinity.libsonnet b/jsonnet/kube-prometheus/addons/anti-affinity.libsonnet
index 63582362..014f32a9 100644
--- a/jsonnet/kube-prometheus/addons/anti-affinity.libsonnet
+++ b/jsonnet/kube-prometheus/addons/anti-affinity.libsonnet
@@ -25,14 +25,14 @@
   alertmanager+:: {
     alertmanager+: {
       spec+:
-        antiaffinity('alertmanager', [$._config.alertmanager.name], $._config.namespace),
+        antiaffinity('alertmanager', [$.values.alertmanager.name], $.values.common.namespace),
     },
   },
 
   prometheus+:: {
     prometheus+: {
       spec+:
-        antiaffinity('prometheus', [$._config.prometheus.name], $._config.namespace),
+        antiaffinity('prometheus', [$.values.prometheus.name], $.values.common.namespace),
     },
   },
 }
diff --git a/jsonnet/kube-prometheus/addons/config-mixins.libsonnet b/jsonnet/kube-prometheus/addons/config-mixins.libsonnet
index 5798e71d..ff8fd297 100644
--- a/jsonnet/kube-prometheus/addons/config-mixins.libsonnet
+++ b/jsonnet/kube-prometheus/addons/config-mixins.libsonnet
@@ -1,4 +1,4 @@
-local l = import 'image.libsonnet';
+local l = import 'lib/lib.libsonnet';
 
 // withImageRepository is a mixin that replaces all images prefixes by repository. eg.
 // quay.io/coreos/addon-resizer -> $repository/addon-resizer
diff --git a/jsonnet/kube-prometheus/addons/custom-metrics.libsonnet b/jsonnet/kube-prometheus/addons/custom-metrics.libsonnet
index d98b133f..55e03bd7 100644
--- a/jsonnet/kube-prometheus/addons/custom-metrics.libsonnet
+++ b/jsonnet/kube-prometheus/addons/custom-metrics.libsonnet
@@ -2,9 +2,9 @@
 // For more details on usage visit https://github.com/DirectXMan12/k8s-prometheus-adapter#quick-links
 
 {
-  _config+:: {
-    prometheusAdapter+:: {
-      namespace: $._config.namespace,
+  values+:: {
+    prometheusAdapter+: {
+      namespace: $.values.common.namespace,
       // Rules for custom-metrics
       config+:: {
         rules+: [
@@ -88,7 +88,7 @@
       spec: {
         service: {
           name: $.prometheusAdapter.service.metadata.name,
-          namespace: $._config.prometheusAdapter.namespace,
+          namespace: $.values.prometheusAdapter.namespace,
         },
         group: 'custom.metrics.k8s.io',
         version: 'v1beta1',
@@ -106,7 +106,7 @@
       spec: {
         service: {
           name: $.prometheusAdapter.service.metadata.name,
-          namespace: $._config.prometheusAdapter.namespace,
+          namespace: $.values.prometheusAdapter.namespace,
         },
         group: 'custom.metrics.k8s.io',
         version: 'v1beta2',
@@ -141,7 +141,7 @@
       subjects: [{
         kind: 'ServiceAccount',
         name: $.prometheusAdapter.serviceAccount.metadata.name,
-        namespace: $._config.prometheusAdapter.namespace,
+        namespace: $.values.prometheusAdapter.namespace,
       }],
     },
     customMetricsClusterRoleBindingHPA: {
diff --git a/jsonnet/kube-prometheus/addons/external-metrics.libsonnet b/jsonnet/kube-prometheus/addons/external-metrics.libsonnet
index abe35b0c..928d29e7 100644
--- a/jsonnet/kube-prometheus/addons/external-metrics.libsonnet
+++ b/jsonnet/kube-prometheus/addons/external-metrics.libsonnet
@@ -2,9 +2,9 @@
 // For more details on usage visit https://github.com/DirectXMan12/k8s-prometheus-adapter#quick-links
 
 {
-  _config+:: {
-    prometheusAdapter+:: {
-      namespace: $._config.namespace,
+  values+:: {
+    prometheusAdapter+: {
+      namespace: $.values.common.namespace,
       // Rules for external-metrics
       config+:: {
         externalRules+: [
@@ -24,7 +24,7 @@
     },
   },
 
-  prometheusAdapter+:: {
+  prometheusAdapter+: {
     externalMetricsApiService: {
       apiVersion: 'apiregistration.k8s.io/v1',
       kind: 'APIService',
@@ -34,7 +34,7 @@
       spec: {
         service: {
           name: $.prometheusAdapter.service.metadata.name,
-          namespace: $._config.prometheusAdapter.namespace,
+          namespace: $.values.prometheusAdapter.namespace,
         },
         group: 'external.metrics.k8s.io',
         version: 'v1beta1',
@@ -70,7 +70,7 @@
       subjects: [{
         kind: 'ServiceAccount',
         name: $.prometheusAdapter.serviceAccount.metadata.name,
-        namespace: $._config.prometheusAdapter.namespace,
+        namespace: $.values.prometheusAdapter.namespace,
       }],
     },
     externalMetricsClusterRoleBindingHPA: {
diff --git a/jsonnet/kube-prometheus/addons/image.libsonnet b/jsonnet/kube-prometheus/addons/image.libsonnet
deleted file mode 100644
index 723d1b38..00000000
--- a/jsonnet/kube-prometheus/addons/image.libsonnet
+++ /dev/null
@@ -1,21 +0,0 @@
-// imageName extracts the image name from a fully qualified image string. eg.
-// quay.io/coreos/addon-resizer -> addon-resizer
-// grafana/grafana -> grafana
-local imageName(image) =
-  local parts = std.split(image, '/');
-  local len = std.length(parts);
-  if len == 3 then
-    // registry.com/org/image
-    parts[2]
-  else if len == 2 then
-    // org/image
-    parts[1]
-  else if len == 1 then
-    // image, ie. busybox
-    parts[0]
-  else
-    error 'unknown image format: ' + image;
-
-{
-  imageName:: imageName,
-}
diff --git a/jsonnet/kube-prometheus/addons/insecure-kubelet.libsonnet b/jsonnet/kube-prometheus/addons/insecure-kubelet.libsonnet
index 73d0b9d7..ab6f2943 100644
--- a/jsonnet/kube-prometheus/addons/insecure-kubelet.libsonnet
+++ b/jsonnet/kube-prometheus/addons/insecure-kubelet.libsonnet
@@ -1,5 +1,5 @@
 {
-  prometheus+:: {
+  prometheus+: {
     serviceMonitorKubelet+:
       {
         spec+: {
diff --git a/jsonnet/kube-prometheus/addons/ksm-autoscaler.libsonnet b/jsonnet/kube-prometheus/addons/ksm-autoscaler.libsonnet
index 88154ac1..98755169 100644
--- a/jsonnet/kube-prometheus/addons/ksm-autoscaler.libsonnet
+++ b/jsonnet/kube-prometheus/addons/ksm-autoscaler.libsonnet
@@ -1,5 +1,5 @@
 {
-  _config+:: {
+  values+:: {
     versions+:: { clusterVerticalAutoscaler: '0.8.1' },
     imageRepos+:: { clusterVerticalAutoscaler: 'gcr.io/google_containers/cpvpa-amd64' },
 
@@ -29,7 +29,7 @@
         kind: 'ClusterRole',
         name: 'ksm-autoscaler',
       },
-      subjects: [{ kind: 'ServiceAccount', name: 'ksm-autoscaler', namespace: $._config.namespace }],
+      subjects: [{ kind: 'ServiceAccount', name: 'ksm-autoscaler', namespace: $.values.common.namespace }],
     },
 
     roleBinding: {
@@ -37,7 +37,7 @@
       kind: 'RoleBinding',
       metadata: {
         name: 'ksm-autoscaler',
-        namespace: $._config.namespace,
+        namespace: $.values.common.namespace,
       },
       roleRef: {
         apiGroup: 'rbac.authorization.k8s.io',
@@ -52,7 +52,7 @@
       kind: 'Role',
       metadata: {
         name: 'ksm-autoscaler',
-        namespace: $._config.namespace,
+        namespace: $.values.common.namespace,
       },
       rules: [
         {
@@ -75,7 +75,7 @@
       kind: 'ServiceAccount',
       metadata: {
         name: 'ksm-autoscaler',
-        namespace: $._config.namespace,
+        namespace: $.values.common.namespace,
       },
     },
 
@@ -83,14 +83,14 @@
       local podLabels = { app: 'ksm-autoscaler' };
       local c = {
         name: 'ksm-autoscaler',
-        image: $._config.imageRepos.clusterVerticalAutoscaler + ':v' + $._config.versions.clusterVerticalAutoscaler,
+        image: $.values.imageRepos.clusterVerticalAutoscaler + ':v' + $.values.versions.clusterVerticalAutoscaler,
         args: [
           '/cpvpa',
           '--target=deployment/kube-state-metrics',
-          '--namespace=' + $._config.namespace,
+          '--namespace=' + $.values.common.namespace,
           '--logtostderr=true',
           '--poll-period-seconds=10',
-          '--default-config={"kube-state-metrics":{"requests":{"cpu":{"base":"' + $._config.kubeStateMetrics.baseCPU + '","step":"' + $._config.kubeStateMetrics.stepCPU + '","nodesPerStep":1},"memory":{"base":"' + $._config.kubeStateMetrics.baseMemory + '","step":"' + $._config.kubeStateMetrics.stepMemory + '","nodesPerStep":1}},"limits":{"cpu":{"base":"' + $._config.kubeStateMetrics.baseCPU + '","step":"' + $._config.kubeStateMetrics.stepCPU + '","nodesPerStep":1},"memory":{"base":"' + $._config.kubeStateMetrics.baseMemory + '","step":"' + $._config.kubeStateMetrics.stepMemory + '","nodesPerStep":1}}}}',
+          '--default-config={"kube-state-metrics":{"requests":{"cpu":{"base":"' + $.values.kubeStateMetrics.baseCPU + '","step":"' + $.values.kubeStateMetrics.stepCPU + '","nodesPerStep":1},"memory":{"base":"' + $.values.kubeStateMetrics.baseMemory + '","step":"' + $.values.kubeStateMetrics.stepMemory + '","nodesPerStep":1}},"limits":{"cpu":{"base":"' + $.values.kubeStateMetrics.baseCPU + '","step":"' + $.values.kubeStateMetrics.stepCPU + '","nodesPerStep":1},"memory":{"base":"' + $.values.kubeStateMetrics.baseMemory + '","step":"' + $.values.kubeStateMetrics.stepMemory + '","nodesPerStep":1}}}}',
         ],
         resources: {
           requests: { cpu: '20m', memory: '10Mi' },
@@ -102,7 +102,7 @@
         kind: 'Deployment',
         metadata: {
           name: 'ksm-autoscaler',
-          namespace: $._config.namespace,
+          namespace: $.values.common.namespace,
           labels: podLabels,
         },
         spec: {
diff --git a/jsonnet/kube-prometheus/addons/managed-cluster.libsonnet b/jsonnet/kube-prometheus/addons/managed-cluster.libsonnet
index 8e09330c..5b37c56e 100644
--- a/jsonnet/kube-prometheus/addons/managed-cluster.libsonnet
+++ b/jsonnet/kube-prometheus/addons/managed-cluster.libsonnet
@@ -2,7 +2,7 @@
 // Disable scrape jobs, service monitors, and alert groups for these components by overwriting 'main.libsonnet' defaults
 
 {
-  _config+:: {
+  values+:: {
     // This snippet walks the original object (super.jobs, set as temp var j) and creates a replacement jobs object
     //     excluding any members of the set specified (eg: controller and scheduler).
     local j = super.jobs,
@@ -13,7 +13,7 @@
     },
 
     // Skip alerting rules too
-    prometheus+:: {
+    prometheus+: {
       rules+:: {
         local g = super.groups,
         groups: [
diff --git a/jsonnet/kube-prometheus/addons/static-etcd.libsonnet b/jsonnet/kube-prometheus/addons/static-etcd.libsonnet
index e4c3a14d..d029d6c1 100644
--- a/jsonnet/kube-prometheus/addons/static-etcd.libsonnet
+++ b/jsonnet/kube-prometheus/addons/static-etcd.libsonnet
@@ -1,5 +1,5 @@
 (import 'github.com/etcd-io/etcd/Documentation/etcd-mixin/mixin.libsonnet') + {
-  _config+:: {
+  values+:: {
     etcd: {
       ips: [],
       clientCA: null,
@@ -36,7 +36,7 @@
       subsets: [{
         addresses: [
           { ip: etcdIP }
-          for etcdIP in $._config.etcd.ips
+          for etcdIP in $.values.etcd.ips
         ],
         ports: [
           { name: 'metrics', port: 2379, protocol: 'TCP' },
@@ -65,8 +65,8 @@
               caFile: '/etc/prometheus/secrets/kube-etcd-client-certs/etcd-client-ca.crt',
               keyFile: '/etc/prometheus/secrets/kube-etcd-client-certs/etcd-client.key',
               certFile: '/etc/prometheus/secrets/kube-etcd-client-certs/etcd-client.crt',
-              [if $._config.etcd.serverName != null then 'serverName']: $._config.etcd.serverName,
-              [if $._config.etcd.insecureSkipVerify != null then 'insecureSkipVerify']: $._config.etcd.insecureSkipVerify,
+              [if $.values.etcd.serverName != null then 'serverName']: $.values.etcd.serverName,
+              [if $.values.etcd.insecureSkipVerify != null then 'insecureSkipVerify']: $.values.etcd.insecureSkipVerify,
             },
           },
         ],
@@ -84,12 +84,12 @@
       type: 'Opaque',
       metadata: {
         name: 'kube-etcd-client-certs',
-        namespace: $._config.namespace,
+        namespace: $.values.common.namespace,
       },
       data: {
-        'etcd-client-ca.crt': std.base64($._config.etcd.clientCA),
-        'etcd-client.key': std.base64($._config.etcd.clientKey),
-        'etcd-client.crt': std.base64($._config.etcd.clientCert),
+        'etcd-client-ca.crt': std.base64($.values.etcd.clientCA),
+        'etcd-client.key': std.base64($.values.etcd.clientKey),
+        'etcd-client.crt': std.base64($.values.etcd.clientCert),
       },
     },
     prometheus+: {
diff --git a/jsonnet/kube-prometheus/addons/thanos-sidecar.libsonnet b/jsonnet/kube-prometheus/addons/thanos-sidecar.libsonnet
index 01620d4a..9a195e9d 100644
--- a/jsonnet/kube-prometheus/addons/thanos-sidecar.libsonnet
+++ b/jsonnet/kube-prometheus/addons/thanos-sidecar.libsonnet
@@ -1,6 +1,6 @@
 (import 'github.com/thanos-io/thanos/mixin/alerts/sidecar.libsonnet') +
 {
-  _config+:: {
+  values+:: {
     versions+:: { thanos: 'v0.14.0' },
     imageRepos+:: { thanos: 'quay.io/thanos/thanos' },
     thanos+:: {
@@ -10,7 +10,7 @@
       },
     },
   },
-  prometheus+:: {
+  prometheus+: {
     local p = self,
 
     // Add the grpc port to the Prometheus service to be able to query it with the Thanos Querier
diff --git a/jsonnet/kube-prometheus/platforms/eks.libsonnet b/jsonnet/kube-prometheus/platforms/eks.libsonnet
index 3f6ab80d..c72e5c8b 100644
--- a/jsonnet/kube-prometheus/platforms/eks.libsonnet
+++ b/jsonnet/kube-prometheus/platforms/eks.libsonnet
@@ -1,5 +1,5 @@
 {
-  _config+:: {
+  values+:: {
     eks: {
       minimumAvailableIPs: 10,
       minimumAvailableIPsTime: '10m',
@@ -39,7 +39,7 @@
       kind: 'ServiceMonitor',
       metadata: {
         name: 'awsekscni',
-        namespace: $._config.namespace,
+        namespace: $.values.common.namespace,
         labels: {
           'app.kubernetes.io/name': 'eks-cni',
         },
@@ -65,25 +65,34 @@
         ],
       },
     },
-  },
-  prometheusRules+: {
-    groups+: [
-      {
-        name: 'kube-prometheus-eks.rules',
-        rules: [
+    prometheusRuleEksCNI: {
+      apiVersion: 'monitoring.coreos.com/v1',
+      kind: 'PrometheusRule',
+      metadata: {
+        labels: $.prometheus.config.commonLabels + $.prometheus.config.mixin.ruleLabels,
+        name: 'eks-rules',
+        namespace: $.prometheus.config.namespace,
+      },
+      spec: {
+        groups: [
           {
-            expr: 'sum by(instance) (awscni_ip_max) - sum by(instance) (awscni_assigned_ip_addresses) < %s' % $._config.eks.minimumAvailableIPs,
-            labels: {
-              severity: 'critical',
-            },
-            annotations: {
-              message: 'Instance {{ $labels.instance }} has less than 10 IPs available.',
-            },
-            'for': $._config.eks.minimumAvailableIPsTime,
-            alert: 'EksAvailableIPs',
+            name: 'kube-prometheus-eks.rules',
+            rules: [
+              {
+                expr: 'sum by(instance) (awscni_ip_max) - sum by(instance) (awscni_assigned_ip_addresses) < %s' % $.values.eks.minimumAvailableIPs,
+                labels: {
+                  severity: 'critical',
+                },
+                annotations: {
+                  message: 'Instance {{ $labels.instance }} has less than 10 IPs available.',
+                },
+                'for': $.values.eks.minimumAvailableIPsTime,
+                alert: 'EksAvailableIPs',
+              },
+            ],
           },
         ],
       },
-    ],
+    },
   },
 }
-- 
GitLab