From 7e0e5cd188da8b636865cff5308f09709d41e2e2 Mon Sep 17 00:00:00 2001 From: Cory O'Daniel <cory@coryodaniel.com> Date: Tue, 19 Mar 2019 16:21:00 -0700 Subject: [PATCH] DRY up resource names --- README.md | 43 +++++++++++++++++++++------ example.jsonnet | 25 +++++++--------- manifests/kustomization.yaml | 56 ++++++++++++++++++------------------ 3 files changed, 73 insertions(+), 51 deletions(-) diff --git a/README.md b/README.md index bc320b79..64cc805a 100644 --- a/README.md +++ b/README.md @@ -157,14 +157,41 @@ local kp = }, }; -{ ['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) } + -{ ['prometheus-adapter-' + name]: kp.prometheusAdapter[name] for name in std.objectFields(kp.prometheusAdapter) } + -{ ['grafana-' + name]: kp.grafana[name] for name in std.objectFields(kp.grafana) } +local manifests = + { ['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) } + + { ['prometheus-adapter-' + name]: kp.prometheusAdapter[name] for name in std.objectFields(kp.prometheusAdapter) } + + { ['grafana-' + name]: kp.grafana[name] for name in std.objectFields(kp.grafana) }; + +// local kustomization = { +// apiVersion: 'kustomize.config.k8s.io/v1beta1', +// kind: 'Kustomization', +// resources: +// ['00namespace-' + name + '.yaml' for name in std.objectFields(kp.kubePrometheus)] + +// ['0prometheus-operator-' + name + '.yaml' for name in std.objectFields(kp.prometheusOperator)] + +// ['node-exporter-' + name + '.yaml' for name in std.objectFields(kp.nodeExporter)] + +// ['kube-state-metrics-' + name + '.yaml' for name in std.objectFields(kp.kubeStateMetrics)] + +// ['alertmanager-' + name + '.yaml' for name in std.objectFields(kp.alertmanager)] + +// ['prometheus-' + name + '.yaml' for name in std.objectFields(kp.prometheus)] + +// ['prometheus-adapter-' + name + '.yaml' for name in std.objectFields(kp.prometheusAdapter)] + +// ['grafana-' + name + '.yaml' for name in std.objectFields(kp.grafana)], +// }; + +local foo = function(name) { name ::+ '.yaml' }; + +local kustomization = { + apiVersion: 'kustomize.config.k8s.io/v1beta1', + kind: 'Kustomization', + resources: std.map(foo , std.objectFields(manifests)) +}; + +manifests { + kustomization: kustomization +} ``` And here's the [build.sh](build.sh) script (which uses `vendor/` to render all manifests in a json structure of `{filename: manifest-content}`): diff --git a/example.jsonnet b/example.jsonnet index 17a88429..b5259edd 100644 --- a/example.jsonnet +++ b/example.jsonnet @@ -5,20 +5,6 @@ local kp = }, }; -local kustomization = { - apiVersion: 'kustomize.config.k8s.io/v1beta1', - kind: 'Kustomization', - resources: - ['00namespace-' + name + '.yaml' for name in std.objectFields(kp.kubePrometheus)] + - ['0prometheus-operator-' + name + '.yaml' for name in std.objectFields(kp.prometheusOperator)] + - ['node-exporter-' + name + '.yaml' for name in std.objectFields(kp.nodeExporter)] + - ['kube-state-metrics-' + name + '.yaml' for name in std.objectFields(kp.kubeStateMetrics)] + - ['alertmanager-' + name + '.yaml' for name in std.objectFields(kp.alertmanager)] + - ['prometheus-' + name + '.yaml' for name in std.objectFields(kp.prometheus)] + - ['prometheus-adapter-' + name + '.yaml' for name in std.objectFields(kp.prometheusAdapter)] + - ['grafana-' + name + '.yaml' for name in std.objectFields(kp.grafana)], -}; - local manifests = { ['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) } + @@ -29,4 +15,13 @@ local manifests = { ['prometheus-adapter-' + name]: kp.prometheusAdapter[name] for name in std.objectFields(kp.prometheusAdapter) } + { ['grafana-' + name]: kp.grafana[name] for name in std.objectFields(kp.grafana) }; -manifests { kustomization: kustomization } +local kustomizationResourceFile(name) = name + ".yaml"; +local kustomization = { + apiVersion: 'kustomize.config.k8s.io/v1beta1', + kind: 'Kustomization', + resources: std.map(kustomizationResourceFile, std.objectFields(manifests)) +}; + +manifests { + kustomization: kustomization, +} diff --git a/manifests/kustomization.yaml b/manifests/kustomization.yaml index 6b4f0518..a74f797f 100644 --- a/manifests/kustomization.yaml +++ b/manifests/kustomization.yaml @@ -12,12 +12,18 @@ resources: - 0prometheus-operator-service.yaml - 0prometheus-operator-serviceAccount.yaml - 0prometheus-operator-serviceMonitor.yaml -- node-exporter-clusterRole.yaml -- node-exporter-clusterRoleBinding.yaml -- node-exporter-daemonset.yaml -- node-exporter-service.yaml -- node-exporter-serviceAccount.yaml -- node-exporter-serviceMonitor.yaml +- alertmanager-alertmanager.yaml +- alertmanager-secret.yaml +- alertmanager-service.yaml +- alertmanager-serviceAccount.yaml +- alertmanager-serviceMonitor.yaml +- grafana-dashboardDatasources.yaml +- grafana-dashboardDefinitions.yaml +- grafana-dashboardSources.yaml +- grafana-deployment.yaml +- grafana-service.yaml +- grafana-serviceAccount.yaml +- grafana-serviceMonitor.yaml - kube-state-metrics-clusterRole.yaml - kube-state-metrics-clusterRoleBinding.yaml - kube-state-metrics-deployment.yaml @@ -26,11 +32,22 @@ resources: - kube-state-metrics-service.yaml - kube-state-metrics-serviceAccount.yaml - kube-state-metrics-serviceMonitor.yaml -- alertmanager-alertmanager.yaml -- alertmanager-secret.yaml -- alertmanager-service.yaml -- alertmanager-serviceAccount.yaml -- alertmanager-serviceMonitor.yaml +- node-exporter-clusterRole.yaml +- node-exporter-clusterRoleBinding.yaml +- node-exporter-daemonset.yaml +- node-exporter-service.yaml +- node-exporter-serviceAccount.yaml +- node-exporter-serviceMonitor.yaml +- prometheus-adapter-apiService.yaml +- prometheus-adapter-clusterRole.yaml +- prometheus-adapter-clusterRoleBinding.yaml +- prometheus-adapter-clusterRoleBindingDelegator.yaml +- prometheus-adapter-clusterRoleServerResources.yaml +- prometheus-adapter-configMap.yaml +- prometheus-adapter-deployment.yaml +- prometheus-adapter-roleBindingAuthReader.yaml +- prometheus-adapter-service.yaml +- prometheus-adapter-serviceAccount.yaml - prometheus-clusterRole.yaml - prometheus-clusterRoleBinding.yaml - prometheus-prometheus.yaml @@ -47,20 +64,3 @@ resources: - prometheus-serviceMonitorKubeControllerManager.yaml - prometheus-serviceMonitorKubeScheduler.yaml - prometheus-serviceMonitorKubelet.yaml -- prometheus-adapter-apiService.yaml -- prometheus-adapter-clusterRole.yaml -- prometheus-adapter-clusterRoleBinding.yaml -- prometheus-adapter-clusterRoleBindingDelegator.yaml -- prometheus-adapter-clusterRoleServerResources.yaml -- prometheus-adapter-configMap.yaml -- prometheus-adapter-deployment.yaml -- prometheus-adapter-roleBindingAuthReader.yaml -- prometheus-adapter-service.yaml -- prometheus-adapter-serviceAccount.yaml -- grafana-dashboardDatasources.yaml -- grafana-dashboardDefinitions.yaml -- grafana-dashboardSources.yaml -- grafana-deployment.yaml -- grafana-service.yaml -- grafana-serviceAccount.yaml -- grafana-serviceMonitor.yaml -- GitLab