2121declare -r PROMETHEUS_OPERATOR_VERSION=${PROMETHEUS_OPERATOR_VERSION:- v0.11.0}
2222declare -r PROMETHEUS_REPLICAS=${PROMETHEUS_REPLICAS:- 1}
2323
24- # constants
25-
2624# constants
2725declare -r KUBE_PROM_DIR=" $PROJECT_ROOT /tmp/kube-prometheus"
2826declare -r MONITORING_NS=" monitoring"
27+ declare -r DASHBOARD_DIR=" $KUBE_PROM_DIR /grafana-dashboards"
28+ declare KEPLER_EXPORTER_GRAFANA_DASHBOARD_JSON
29+
30+ KEPLER_EXPORTER_GRAFANA_DASHBOARD_JSON=$( curl -fsSL https://raw.githubusercontent.com/sustainable-computing-io/kepler/main/grafana-dashboards/Kepler-Exporter.json | sed ' 1 ! s/^/ /' )
2931
3032deploy_prometheus_operator () {
3133
@@ -42,6 +44,8 @@ deploy_prometheus_operator() {
4244 mv kube-prometheus/manifests/prometheus-prometheus.yaml.tmp \
4345 kube-prometheus/manifests/prometheus-prometheus.yaml
4446
47+ _setup_dashboard
48+ _run_yq
4549 _load_prometheus_operator_images_to_local_registry
4650 kubectl create -f kube-prometheus/manifests/setup
4751 kubectl wait \
@@ -58,8 +62,10 @@ deploy_prometheus_operator() {
5862 is_set " $GRAFANA_ENABLE " && {
5963 find kube-prometheus/manifests -name ' grafana-*.yaml' -type f \
6064 -exec kubectl create -f {} \;
65+ ok " Grafana deployed"
6166 }
6267
68+ ok " Prometheus deployed"
6369 rm -rf kube-prometheus
6470 )
6571 wait_for_pods_in_namespace " $MONITORING_NS "
@@ -84,6 +90,7 @@ _load_prometheus_operator_images_to_local_registry() {
8490 # TODO: fix this by passing in the registry information to deploy_prometheus_operator
8591 # from main
8692
93+ header " Load prometheus operator images to local registry"
8794 local registry
8895 if [[ " $CLUSTER_PROVIDER " == " kind" ]]; then
8996 registry=" localhost:${REGISTRY_PORT} "
@@ -106,3 +113,35 @@ _load_prometheus_operator_images_to_local_registry() {
106113 done
107114 done
108115}
116+
117+ _setup_dashboard (){
118+ if [ -f " $DASHBOARD_DIR /grafana-dashboards/kepler-exporter-configmap.yaml" ]; then
119+ return 0
120+ else
121+ header " Setup Dashboard"
122+ mkdir -p " $DASHBOARD_DIR /grafana-dashboards/"
123+ cat - > " $DASHBOARD_DIR /grafana-dashboards/kepler-exporter-configmap.yaml" << EOF
124+ apiVersion: v1
125+ data:
126+ kepler-exporter.json: |-
127+ $KEPLER_EXPORTER_GRAFANA_DASHBOARD_JSON
128+ kind: ConfigMap
129+ metadata:
130+ labels:
131+ app.kubernetes.io/component: grafana
132+ app.kubernetes.io/name: grafana
133+ app.kubernetes.io/part-of: kube-prometheus
134+ app.kubernetes.io/version: 9.5.3
135+ name: grafana-dashboard-kepler-exporter
136+ namespace: monitoring
137+ EOF
138+ fi
139+ }
140+
141+ _run_yq (){
142+ f=" $DASHBOARD_DIR /grafana-dashboards/kepler-exporter-configmap.yaml" \
143+ yq -i e ' .items += [load(env(f))]' " $KUBE_PROM_DIR " /manifests/grafana-dashboardDefinitions.yaml;
144+ yq -i e ' .spec.template.spec.containers.0.volumeMounts += [ {"mountPath": "/grafana-dashboard-definitions/0/kepler-exporter", "name": "grafana-dashboard-kepler-exporter", "readOnly": false} ]' " $KUBE_PROM_DIR " /manifests/grafana-deployment.yaml
145+ yq -i e ' .spec.template.spec.volumes += [ {"configMap": {"name": "grafana-dashboard-kepler-exporter"}, "name": "grafana-dashboard-kepler-exporter"} ]' " $KUBE_PROM_DIR " /manifests/grafana-deployment.yaml;
146+ ok " Dashboard setup complete"
147+ }
0 commit comments