-
Notifications
You must be signed in to change notification settings - Fork 5.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[kube-prometheus-stack] Grafana crd datasources #5240
base: main
Are you sure you want to change the base?
[kube-prometheus-stack] Grafana crd datasources #5240
Conversation
Signed-off-by: Oleg Tsymbal <[email protected]>
Signed-off-by: Oleg Tsymbal <[email protected]>
Signed-off-by: Oleg Tsymbal <[email protected]>
Signed-off-by: Oleg Tsymbal <[email protected]>
Signed-off-by: Oleg Tsymbal <[email protected]>
Signed-off-by: Oleg Tsymbal <[email protected]>
Signed-off-by: Oleg Tsymbal <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi, thanks for split this help. It help at least me to review this with a bit more focus.
To go through the files and leave comments that I have in my mind.
charts/kube-prometheus-stack/templates/grafana/crd-datasources.yaml
Outdated
Show resolved
Hide resolved
@@ -0,0 +1,27 @@ | |||
{{- if or (and .Values.grafana.enabled .Values.grafana.sidecar.datasources.enabled) .Values.grafana.forceDeployDatasources }} | |||
{{- if .Values.grafana.operatorDatasources }} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this can be merged into the first condition?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is something that I would like to discuss, I know that probably it is opinionated , but this code
{{- if and (or (and .Values.grafana.enabled .Values.grafana.sidecar.datasources.enabled) .Values.grafana.forceDeployDatasources) .Values.grafana.operatorDatasources }}
{{- $datasources := fromYaml (include "kube-prometheus-stack.grafana.datasources" .) }}
{{- range $ds := $datasources.datasources }}
---
apiVersion: grafana.integreatly.org/v1beta1
kind: GrafanaDatasource
metadata:
name: {{ include "kube-prometheus-stack.fullname" $ }}-{{ include "kube-prometheus-stack.grafana.sanitizeName" $ds.name }}
namespace: {{ template "kube-prometheus-stack-grafana.namespace" $ }}
labels:
app: {{ template "kube-prometheus-stack.name" $ }}-grafana
{{- include "kube-prometheus-stack.labels" $ | nindent 4 }}
spec:
instanceSelector:
matchLabels:
{{- toYaml $.Values.grafana.operatorInstanceSelector | nindent 6 }}
datasource:
{{- $ds | toYaml | nindent 4 }}
{{- end }}
{{- end }}
reads harder than
{{/* Define helper variables for complex conditions */}}
{{- $grafanaEnabled := and .Values.grafana.enabled .Values.grafana.sidecar.datasources.enabled }}
{{- $shouldDeploy := or $grafanaEnabled .Values.grafana.forceDeployDatasources }}
{{/* Only proceed if all required conditions are met */}}
{{- if $shouldDeploy }}
{{- if .Values.grafana.operatorDatasources }}
{{/* Process datasources */}}
{{- $datasources := fromYaml (include "kube-prometheus-stack.grafana.datasources" .) }}
{{- range $ds := $datasources.datasources }}
---
apiVersion: grafana.integreatly.org/v1beta1
kind: GrafanaDatasource
metadata:
name: {{ include "kube-prometheus-stack.fullname" $ }}-{{ include "kube-prometheus-stack.grafana.sanitizeName" $ds.name }}
namespace: {{ template "kube-prometheus-stack-grafana.namespace" $ }}
labels:
app: {{ template "kube-prometheus-stack.name" $ }}-grafana
{{- include "kube-prometheus-stack.labels" $ | nindent 4 }}
spec:
{{/* Instance selector configuration */}}
instanceSelector:
matchLabels:
{{- toYaml $.Values.grafana.operatorInstanceSelector | nindent 6 }}
{{/* Datasource configuration */}}
datasource:
{{- $ds | toYaml | nindent 4 }}
{{- end }}{{/* end range datasources */}}
{{- end }}{{/* end if .Values.grafana.operatorDatasources */}}
{{- end }}{{/* end if $shouldDeploy */}}
Comments I took from my charts so just pay attention to the code.
@jkroepke
@@ -1,84 +1,28 @@ | |||
{{- if or (and .Values.grafana.enabled .Values.grafana.sidecar.datasources.enabled) .Values.grafana.forceDeployDatasources }} | |||
{{- if .Values.grafana.configMapDatasources }} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this can be merged into line 1 condition
charts/kube-prometheus-stack/templates/grafana/configmaps-datasources.yaml
Outdated
Show resolved
Hide resolved
{{- $datasources := list -}} | ||
{{- if .Values.grafana.sidecar.datasources.defaultDatasourceEnabled }} | ||
{{/* Create jsonData dictionary first */}} | ||
{{- $jsonData := dict |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
interesting idea to use the dict + set function to build an structure, but not sure about maintainability.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yep indeed, when I look at it after 1 week, can't say for sure what it does , I would like to write tests for these functions but helm is pretty limited in this sphere(
{{- $defaultDS := dict -}} | ||
{{- $_ := set $defaultDS "name" .Values.grafana.sidecar.datasources.name -}} | ||
{{- $_ := set $defaultDS "type" "prometheus" -}} | ||
{{- $_ := set $defaultDS "uid" .Values.grafana.sidecar.datasources.uid -}} | ||
{{- $_ := set $defaultDS "url" (default (printf "http://%s-prometheus.%s:%v/%s" | ||
(include "kube-prometheus-stack.fullname" .) | ||
(include "kube-prometheus-stack.namespace" .) | ||
.Values.prometheus.service.port | ||
(trimPrefix "/" .Values.prometheus.prometheusSpec.routePrefix) | ||
) .Values.grafana.sidecar.datasources.url) -}} | ||
{{- $_ := set $defaultDS "access" "proxy" -}} | ||
{{- $_ := set $defaultDS "isDefault" .Values.grafana.sidecar.datasources.isDefaultDatasource -}} | ||
{{- $_ := set $defaultDS "jsonData" $jsonData -}} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a suggestion which can be considered as alternative. It's just an option to discuss about if possible and it's not indented as "please use this".
{{- $defaultDS := dict -}} | |
{{- $_ := set $defaultDS "name" .Values.grafana.sidecar.datasources.name -}} | |
{{- $_ := set $defaultDS "type" "prometheus" -}} | |
{{- $_ := set $defaultDS "uid" .Values.grafana.sidecar.datasources.uid -}} | |
{{- $_ := set $defaultDS "url" (default (printf "http://%s-prometheus.%s:%v/%s" | |
(include "kube-prometheus-stack.fullname" .) | |
(include "kube-prometheus-stack.namespace" .) | |
.Values.prometheus.service.port | |
(trimPrefix "/" .Values.prometheus.prometheusSpec.routePrefix) | |
) .Values.grafana.sidecar.datasources.url) -}} | |
{{- $_ := set $defaultDS "access" "proxy" -}} | |
{{- $_ := set $defaultDS "isDefault" .Values.grafana.sidecar.datasources.isDefaultDatasource -}} | |
{{- $_ := set $defaultDS "jsonData" $jsonData -}} | |
{{- $defaultDS := (dict | |
"name" .Values.grafana.sidecar.datasources.name | |
"type" "prometheus" | |
"uid" .Values.grafana.sidecar.datasources.uid | |
"url" (default (printf "http://%s-prometheus.%s:%v/%s" | |
(include "kube-prometheus-stack.fullname" .) | |
(include "kube-prometheus-stack.namespace" .) | |
.Values.prometheus.service.port | |
(trimPrefix "/" .Values.prometheus.prometheusSpec.routePrefix) | |
) .Values.grafana.sidecar.datasources.url) | |
"access" "proxy" | |
"isDefault" .Values.grafana.sidecar.datasources.isDefaultDatasource | |
"jsonData" $jsonData | |
) -}} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@jkroepke the main problem here, that if we take your approach we loose the possibility to add comments, because any comments between dict keys break the formatting. At the beginning I implemented it in a way you suggested but later I realized that I cannot make nice conditionals with comments, so I switched to this version.
Signed-off-by: Oleg Tsymbal <[email protected]>
Introducing Grafana Datasources as CRDs
Special notes for your reviewer
this PR is a result of #5216
I essence I don't expect any problems but you have to pay attention to 3 things
Details
the name of
name: {{ include "kube-prometheus-stack.fullname" $ }}-{{ include "kube-prometheus-stack.grafana.sanitizeName" $ds.name }}
, probably you have a better idea or conventions to name it.default values for
I have them in 2 places (values, and the resource), but I often do like this in my charts, but idk if it is appropriate here.
@jkroepke
Also, if I have to mention about it in the documentation - let me know.
Checklist
[prometheus-couchdb-exporter]
)