-
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.
operatorInstanceSelector: | ||
app.kubernetes.io/instance: grafana | ||
app.kubernetes.io/name: grafana-operator |
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.
There is a known helm limitation where keys can't be deleted, if kube-prometheus-stack is part of a sub-chart.
If end-users do something like
operatorInstanceSelector:
app.kubernetes.io/instance: ~
app.kubernetes.io/name: another-grafana-operator
instance: grafana
app.kubernetes.io/instance
would still remains in addition of instance
. Based on the limitation, my recommendation would be to leave operatorInstanceSelector
to an empty map.
## | ||
configMapDatasources: true | ||
|
||
## OperatorDatasources Create datasources as crds |
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.
## OperatorDatasources Create datasources as crds | |
## OperatorDatasources Create datasources as Grafana Operator Custom Resource |
matchLabels: | ||
{{- if $.Values.grafana.operatorInstanceSelector }} | ||
{{- toYaml $.Values.grafana.operatorInstanceSelector | nindent 6 }} | ||
{{- else }} | ||
app.kubernetes.io/instance: grafana | ||
app.kubernetes.io/name: grafana-operator | ||
{{- end }} |
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.
To reduce the complexity and hidden defaults, what about:
matchLabels: | |
{{- if $.Values.grafana.operatorInstanceSelector }} | |
{{- toYaml $.Values.grafana.operatorInstanceSelector | nindent 6 }} | |
{{- else }} | |
app.kubernetes.io/instance: grafana | |
app.kubernetes.io/name: grafana-operator | |
{{- end }} | |
matchLabels: | |
{{- toYaml $.Values.grafana.operatorInstanceSelector | nindent 6 }} |
Are they any downsides using this + the empty map on the values.yaml? I'm not a export into the operator.
@@ -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?
@@ -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
annotations: | ||
{{- toYaml .Values.grafana.sidecar.datasources.annotations | nindent 4 }} | ||
{{- end }} | ||
{{ toYaml . | nindent 4 }} |
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.
{{ toYaml . | nindent 4 }} | |
{{- toYaml . | nindent 4 }} |
{{- $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.
{{- $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 | |
) -}} |
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]
)