From f1e8e3ac056f2beb4abf1adf65e6b4fc91ec39b5 Mon Sep 17 00:00:00 2001 From: Grace Do Date: Mon, 27 Jan 2020 14:16:01 -0800 Subject: [PATCH 01/11] kommander: Add hook to set grafana home dashboard --- .../grafana/hooks-home-dashboard.yaml | 79 +++++++++++++++++++ stable/kommander/values.yaml | 7 ++ 2 files changed, 86 insertions(+) create mode 100644 stable/kommander/templates/grafana/hooks-home-dashboard.yaml diff --git a/stable/kommander/templates/grafana/hooks-home-dashboard.yaml b/stable/kommander/templates/grafana/hooks-home-dashboard.yaml new file mode 100644 index 000000000..c83ed9e98 --- /dev/null +++ b/stable/kommander/templates/grafana/hooks-home-dashboard.yaml @@ -0,0 +1,79 @@ +{{- if .Values.grafana.enabled }} +--- +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ .Values.grafana.hooks.jobName | quote }} + namespace: {{ .Release.Namespace }} + labels: +{{ include "kommander.labels" . | indent 4 }} + annotations: + helm.sh/hook: post-install + helm.sh/hook-weight: "-4" + helm.sh/hook-delete-policy: hook-succeeded,before-hook-creation +spec: + template: + metadata: + name: {{ .Values.grafana.hooks.jobName | quote }} + spec: + restartPolicy: Never + containers: + - name: post-install-job + image: {{ .Values.grafana.hooks.image | quote }} + command: ["/bin/sh", "-c", "/job/run.sh"] + env: + - name: X_FORWARDED_USER + valueFrom: + secretKeyRef: + name: {{ .Values.grafana.hooks.secretKeyRef }} + key: username + volumeMounts: + - mountPath: /job + name: job + volumes: + - name: job + configMap: + name: {{ .Values.grafana.hooks.jobName }} + defaultMode: 0777 + +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Values.grafana.hooks.jobName }} +data: + run.sh: |- + #!/bin/bash + set -o nounset + set -o errexit + set -o pipefail + CURL="curl --verbose --fail --max-time 60 --retry 10 --retry-connrefused" + DASHBOARD_ID=$($CURL -H "X-Forwarded-User: $X_FORWARDED_USER" {{ .Values.grafana.hooks.serviceURL }}/api/dashboards/uid/{{ .Values.grafana.hooks.homeDashboardUID }} | jq '.[0].id') + echo "setting home dashboard to ID" $DASHBOARD_ID +--- +apiVersion: batch/v1 +kind: Job +metadata: + name: cleanup-{{ .Values.grafana.hooks.jobName }} + namespace: {{ .Release.Namespace }} + labels: +{{ include "kommander.labels" . | indent 4 }} + annotations: + "helm.sh/hook": pre-delete + "helm.sh/hook-weight": "-4" + "helm.sh/hook-delete-policy": hook-succeeded +spec: + template: + metadata: + name: cleanup-{{ .Values.grafana.hooks.jobName }} + spec: + containers: + - name: kubectl + image: bitnami/kubectl:1.16.2 + imagePullPolicy: IfNotPresent + command: + - /bin/sh + - -c + - kubectl delete configmap {{ .Values.grafana.hooks.jobName }} --namespace={{ .Release.Namespace }} + restartPolicy: OnFailure +{{- end }} \ No newline at end of file diff --git a/stable/kommander/values.yaml b/stable/kommander/values.yaml index 7b00122a7..5f9a1f219 100644 --- a/stable/kommander/values.yaml +++ b/stable/kommander/values.yaml @@ -29,6 +29,13 @@ kubeaddons-catalog: grafana: enabled: true + hooks: + jobName: grafana-home-dashboard + image: dwdraju/alpine-curl-jq + secretKeyRef: ops-portal-credentials + serviceURL: http://kommander-kubeaddons-grafana.kommander:3000 + homeDashboardUID: efa86fd1d0c121a26444b636a3f509a8 + ## Do not deploy default dashboards. ## defaultDashboardsEnabled: false From 8d5e74c401fa781afd51dd0428515ee83716d9aa Mon Sep 17 00:00:00 2001 From: Grace Do Date: Mon, 27 Jan 2020 14:16:52 -0800 Subject: [PATCH 02/11] kommander: Hook to copy opsportal secret --- .../grafana/opsportal-credentials-secret.yaml | 54 +++++++++++++++++++ .../kommander/templates/hooks-kubeaddons.yaml | 5 ++ 2 files changed, 59 insertions(+) create mode 100644 stable/kommander/templates/grafana/opsportal-credentials-secret.yaml diff --git a/stable/kommander/templates/grafana/opsportal-credentials-secret.yaml b/stable/kommander/templates/grafana/opsportal-credentials-secret.yaml new file mode 100644 index 000000000..7664b738d --- /dev/null +++ b/stable/kommander/templates/grafana/opsportal-credentials-secret.yaml @@ -0,0 +1,54 @@ +{{- if .Values.grafana.enabled }} +apiVersion: batch/v1 +kind: Job +metadata: + name: copy-opsportal-credentials-secret + namespace: {{ .Release.Namespace }} + labels: +{{ include "kommander.labels" . | indent 4 }} + annotations: + "helm.sh/hook": pre-install + "helm.sh/hook-weight": "5" + "helm.sh/hook-delete-policy": hook-succeeded,before-hook-creation +spec: + template: + metadata: + name: copy-opsportal-credentials-secret + spec: + containers: + - name: kubectl + # --export flag is deprecated so we need to stick with this kubectl version + image: bitnami/kubectl:1.16.2 + imagePullPolicy: IfNotPresent + command: + - /bin/sh + - -c + - kubectl get secret ops-portal-credentials --namespace=kubeaddons --export -o yaml | kubectl apply --namespace={{ .Release.Namespace }} -f - + restartPolicy: OnFailure +--- +apiVersion: batch/v1 +kind: Job +metadata: + name: cleanup-opsportal-credentials-secret + namespace: {{ .Release.Namespace }} + labels: +{{ include "kommander.labels" . | indent 4 }} + annotations: + "helm.sh/hook": pre-delete + "helm.sh/hook-weight": "-4" + "helm.sh/hook-delete-policy": hook-succeeded +spec: + template: + metadata: + name: cleanup-opsportal-credentials-secret + spec: + containers: + - name: kubectl + image: bitnami/kubectl:1.16.2 + imagePullPolicy: IfNotPresent + command: + - /bin/sh + - -c + - kubectl delete secret ops-portal-credentials --namespace={{ .Release.Namespace }} + restartPolicy: OnFailure +{{- end }} \ No newline at end of file diff --git a/stable/kommander/templates/hooks-kubeaddons.yaml b/stable/kommander/templates/hooks-kubeaddons.yaml index 0ebd6aac1..8583796e3 100644 --- a/stable/kommander/templates/hooks-kubeaddons.yaml +++ b/stable/kommander/templates/hooks-kubeaddons.yaml @@ -14,6 +14,11 @@ rules: - apiGroups: [""] resources: ["namespaces"] verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] +{{- if .Values.grafana.enabled }} +- apiGroups: [""] + resources: ["secrets", "configmaps"] + verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] +{{- end }} --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding From c7764294b20d725e529c173cdcd2736e98e7f244 Mon Sep 17 00:00:00 2001 From: Grace Do Date: Mon, 27 Jan 2020 17:07:26 -0800 Subject: [PATCH 03/11] kommander: Add missing script line, fixes --- .../kommander/templates/grafana/hooks-home-dashboard.yaml | 8 ++++---- stable/kommander/values.yaml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/stable/kommander/templates/grafana/hooks-home-dashboard.yaml b/stable/kommander/templates/grafana/hooks-home-dashboard.yaml index c83ed9e98..517989703 100644 --- a/stable/kommander/templates/grafana/hooks-home-dashboard.yaml +++ b/stable/kommander/templates/grafana/hooks-home-dashboard.yaml @@ -9,7 +9,7 @@ metadata: {{ include "kommander.labels" . | indent 4 }} annotations: helm.sh/hook: post-install - helm.sh/hook-weight: "-4" + helm.sh/hook-weight: "-5" helm.sh/hook-delete-policy: hook-succeeded,before-hook-creation spec: template: @@ -35,7 +35,6 @@ spec: configMap: name: {{ .Values.grafana.hooks.jobName }} defaultMode: 0777 - --- apiVersion: v1 kind: ConfigMap @@ -48,8 +47,9 @@ data: set -o errexit set -o pipefail CURL="curl --verbose --fail --max-time 60 --retry 10 --retry-connrefused" - DASHBOARD_ID=$($CURL -H "X-Forwarded-User: $X_FORWARDED_USER" {{ .Values.grafana.hooks.serviceURL }}/api/dashboards/uid/{{ .Values.grafana.hooks.homeDashboardUID }} | jq '.[0].id') + DASHBOARD_ID=$($CURL -H "X-Forwarded-User: $X_FORWARDED_USER" {{ .Values.grafana.hooks.serviceURL }}/api/dashboards/uid/{{ .Values.grafana.hooks.homeDashboardUID }} | jq '.dashboard.id') echo "setting home dashboard to ID" $DASHBOARD_ID + $CURL -X PUT -H "Content-Type: application/json" -H "X-Forwarded-User: $X_FORWARDED_USER" -d '{"homeDashboardId":'"$DASHBOARD_ID"'}' {{ .Values.grafana.hooks.serviceURL }}/api/org/preferences --- apiVersion: batch/v1 kind: Job @@ -60,7 +60,7 @@ metadata: {{ include "kommander.labels" . | indent 4 }} annotations: "helm.sh/hook": pre-delete - "helm.sh/hook-weight": "-4" + "helm.sh/hook-weight": "-5" "helm.sh/hook-delete-policy": hook-succeeded spec: template: diff --git a/stable/kommander/values.yaml b/stable/kommander/values.yaml index 5f9a1f219..0bd85985b 100644 --- a/stable/kommander/values.yaml +++ b/stable/kommander/values.yaml @@ -33,7 +33,7 @@ grafana: jobName: grafana-home-dashboard image: dwdraju/alpine-curl-jq secretKeyRef: ops-portal-credentials - serviceURL: http://kommander-kubeaddons-grafana.kommander:3000 + serviceURL: http://kommander-kubeaddons-grafana.kommander homeDashboardUID: efa86fd1d0c121a26444b636a3f509a8 ## Do not deploy default dashboards. From c6a2509a44a216b16234dd7b0930759506d30724 Mon Sep 17 00:00:00 2001 From: Grace Do Date: Tue, 28 Jan 2020 14:14:38 -0800 Subject: [PATCH 04/11] kommander: Ensure cleanup jobs use SA with necessary roles --- .../templates/grafana/hooks-home-dashboard.yaml | 5 +++-- .../templates/grafana/opsportal-credentials-secret.yaml | 3 ++- stable/kommander/templates/hooks-kubeaddons.yaml | 9 ++++++--- stable/kommander/values.yaml | 1 + 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/stable/kommander/templates/grafana/hooks-home-dashboard.yaml b/stable/kommander/templates/grafana/hooks-home-dashboard.yaml index 517989703..a00702f60 100644 --- a/stable/kommander/templates/grafana/hooks-home-dashboard.yaml +++ b/stable/kommander/templates/grafana/hooks-home-dashboard.yaml @@ -9,7 +9,7 @@ metadata: {{ include "kommander.labels" . | indent 4 }} annotations: helm.sh/hook: post-install - helm.sh/hook-weight: "-5" + helm.sh/hook-weight: "-4" helm.sh/hook-delete-policy: hook-succeeded,before-hook-creation spec: template: @@ -60,13 +60,14 @@ metadata: {{ include "kommander.labels" . | indent 4 }} annotations: "helm.sh/hook": pre-delete - "helm.sh/hook-weight": "-5" + "helm.sh/hook-weight": "5" "helm.sh/hook-delete-policy": hook-succeeded spec: template: metadata: name: cleanup-{{ .Values.grafana.hooks.jobName }} spec: + serviceAccountName: {{ .Values.grafana.hooks.kommanderServiceAccount }} containers: - name: kubectl image: bitnami/kubectl:1.16.2 diff --git a/stable/kommander/templates/grafana/opsportal-credentials-secret.yaml b/stable/kommander/templates/grafana/opsportal-credentials-secret.yaml index 7664b738d..39c642b01 100644 --- a/stable/kommander/templates/grafana/opsportal-credentials-secret.yaml +++ b/stable/kommander/templates/grafana/opsportal-credentials-secret.yaml @@ -35,13 +35,14 @@ metadata: {{ include "kommander.labels" . | indent 4 }} annotations: "helm.sh/hook": pre-delete - "helm.sh/hook-weight": "-4" + "helm.sh/hook-weight": "5" "helm.sh/hook-delete-policy": hook-succeeded spec: template: metadata: name: cleanup-opsportal-credentials-secret spec: + serviceAccountName: {{ .Values.grafana.hooks.kommanderServiceAccount }} containers: - name: kubectl image: bitnami/kubectl:1.16.2 diff --git a/stable/kommander/templates/hooks-kubeaddons.yaml b/stable/kommander/templates/hooks-kubeaddons.yaml index 8583796e3..22585d08a 100644 --- a/stable/kommander/templates/hooks-kubeaddons.yaml +++ b/stable/kommander/templates/hooks-kubeaddons.yaml @@ -7,7 +7,7 @@ metadata: labels: {{ include "kommander.labels" . | indent 4 }} annotations: - "helm.sh/hook": "pre-install" + "helm.sh/hook": pre-install,pre-delete "helm.sh/hook-weight": "1" "helm.sh/hook-delete-policy": hook-succeeded,before-hook-creation rules: @@ -27,7 +27,7 @@ metadata: labels: {{ include "kommander.labels" . | indent 4 }} annotations: - "helm.sh/hook": "pre-install" + "helm.sh/hook": pre-install,pre-delete "helm.sh/hook-weight": "2" "helm.sh/hook-delete-policy": hook-succeeded,before-hook-creation roleRef: @@ -38,6 +38,9 @@ subjects: - kind: ServiceAccount name: default namespace: {{ .Release.Namespace }} +- kind: ServiceAccount + name: {{ template "kommander.fullname" . }} + namespace: {{ .Release.Namespace }} --- apiVersion: batch/v1 kind: Job @@ -47,7 +50,7 @@ metadata: labels: {{ include "kommander.labels" . | indent 4 }} annotations: - "helm.sh/hook": "pre-install" + "helm.sh/hook": pre-install "helm.sh/hook-weight": "3" "helm.sh/hook-delete-policy": hook-succeeded,before-hook-creation spec: diff --git a/stable/kommander/values.yaml b/stable/kommander/values.yaml index 0bd85985b..d23409a7c 100644 --- a/stable/kommander/values.yaml +++ b/stable/kommander/values.yaml @@ -35,6 +35,7 @@ grafana: secretKeyRef: ops-portal-credentials serviceURL: http://kommander-kubeaddons-grafana.kommander homeDashboardUID: efa86fd1d0c121a26444b636a3f509a8 + kommanderServiceAccount: kommander-kubeaddons ## Do not deploy default dashboards. ## From 27d48e1f2bf4e6e0526948b4899656251d1d2417 Mon Sep 17 00:00:00 2001 From: Grace Do Date: Tue, 28 Jan 2020 14:34:01 -0800 Subject: [PATCH 05/11] kommander: Set home dashboard in regular job instead of post-install --- .../templates/grafana/hooks-home-dashboard.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/stable/kommander/templates/grafana/hooks-home-dashboard.yaml b/stable/kommander/templates/grafana/hooks-home-dashboard.yaml index a00702f60..fc05807e2 100644 --- a/stable/kommander/templates/grafana/hooks-home-dashboard.yaml +++ b/stable/kommander/templates/grafana/hooks-home-dashboard.yaml @@ -1,5 +1,9 @@ {{- if .Values.grafana.enabled }} --- +# Unable to get post-install job hook working, which is why +# this is a regular Job. The retries in the configmap script +# should ensure that this successfully runs once the Grafana +# server is up. apiVersion: batch/v1 kind: Job metadata: @@ -7,10 +11,6 @@ metadata: namespace: {{ .Release.Namespace }} labels: {{ include "kommander.labels" . | indent 4 }} - annotations: - helm.sh/hook: post-install - helm.sh/hook-weight: "-4" - helm.sh/hook-delete-policy: hook-succeeded,before-hook-creation spec: template: metadata: @@ -18,7 +18,7 @@ spec: spec: restartPolicy: Never containers: - - name: post-install-job + - name: {{ .Values.grafana.hooks.jobName | quote }} image: {{ .Values.grafana.hooks.image | quote }} command: ["/bin/sh", "-c", "/job/run.sh"] env: @@ -46,7 +46,7 @@ data: set -o nounset set -o errexit set -o pipefail - CURL="curl --verbose --fail --max-time 60 --retry 10 --retry-connrefused" + CURL="curl --verbose --fail --max-time 30 --retry 20 --retry-connrefused"" DASHBOARD_ID=$($CURL -H "X-Forwarded-User: $X_FORWARDED_USER" {{ .Values.grafana.hooks.serviceURL }}/api/dashboards/uid/{{ .Values.grafana.hooks.homeDashboardUID }} | jq '.dashboard.id') echo "setting home dashboard to ID" $DASHBOARD_ID $CURL -X PUT -H "Content-Type: application/json" -H "X-Forwarded-User: $X_FORWARDED_USER" -d '{"homeDashboardId":'"$DASHBOARD_ID"'}' {{ .Values.grafana.hooks.serviceURL }}/api/org/preferences From 2bb0ea50fe37c043618e38c90b9d0e969b45ba5b Mon Sep 17 00:00:00 2001 From: Grace Do Date: Tue, 28 Jan 2020 17:59:12 -0800 Subject: [PATCH 06/11] kommander: Add comment describing home dashboard title --- stable/kommander/values.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/stable/kommander/values.yaml b/stable/kommander/values.yaml index d23409a7c..f009d2532 100644 --- a/stable/kommander/values.yaml +++ b/stable/kommander/values.yaml @@ -34,6 +34,7 @@ grafana: image: dwdraju/alpine-curl-jq secretKeyRef: ops-portal-credentials serviceURL: http://kommander-kubeaddons-grafana.kommander + # This is the UID of the "Kubernetes / Compute Resources / Clusters" summary dashboard homeDashboardUID: efa86fd1d0c121a26444b636a3f509a8 kommanderServiceAccount: kommander-kubeaddons From 70e56fdd9c9f5641fa56407b1c91745a7d77d43f Mon Sep 17 00:00:00 2001 From: Grace Do Date: Wed, 29 Jan 2020 09:48:37 -0800 Subject: [PATCH 07/11] kommander: Update kommander-karma/thanos deps --- .../charts/kommander-karma-0.3.2.tgz | Bin 7700 -> 0 bytes .../charts/kommander-karma-0.3.3.tgz | Bin 0 -> 7690 bytes .../charts/kommander-thanos-0.1.7.tgz | Bin 19075 -> 0 bytes .../charts/kommander-thanos-0.1.8.tgz | Bin 0 -> 19070 bytes stable/kommander/requirements.lock | 8 +-- stable/kommander/requirements.yaml | 48 +++++++++--------- 6 files changed, 28 insertions(+), 28 deletions(-) delete mode 100644 stable/kommander/charts/kommander-karma-0.3.2.tgz create mode 100644 stable/kommander/charts/kommander-karma-0.3.3.tgz delete mode 100644 stable/kommander/charts/kommander-thanos-0.1.7.tgz create mode 100644 stable/kommander/charts/kommander-thanos-0.1.8.tgz diff --git a/stable/kommander/charts/kommander-karma-0.3.2.tgz b/stable/kommander/charts/kommander-karma-0.3.2.tgz deleted file mode 100644 index 069be7201a0bc0340675e18790ad04ab4a73c57d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7700 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 OApZgaf;!y*$N&IvF-WQa diff --git a/stable/kommander/charts/kommander-karma-0.3.3.tgz b/stable/kommander/charts/kommander-karma-0.3.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..d079394751966029471c3d90ee89438488ca47dc GIT binary patch literal 7690 zcmV+l9`)fLiwFP!000001MEHfbKAzz`5Ax3m2$_A7$7O?;c)6qR7*)Uu_cWqJI(m> zNJro(A_4&v2T)>d_iyj+J%9rU@F6L3^M%)`BOdOt*w^jt?j5e8@tB4lOYAF}jA{Fu z-=TD%>~3$1|3az$SNz@W?R2-gz3tx4?l+xox3k&%hHU>Hz*I}dQ<@O+5L5jxma7W= z-4RVve!pz6I{i0$o!vG4AEGqS|6Y~B>h$kzbvD=Ze~2=d{;%+dGo|C;PID}x|2ELP zO#kiP7SO+QPwzOl{K@H0WB)x%xF3amGU-}0j*FiiXS-v0jJt^+r=n_){DTE!BAA2> zqlEm7d_rtOL-OuW)SM*In583@ak3Y%Bn9rGmn^YHP~9h^G>v(`-M;kGQ8sYgXxxsI z>DW*G36o4`jj11|@P7cKZ`p*w@1RdSI`O?9#J|ui;4H+>79k|`2@NvFZ@myKqJMX@TcQ7Mx3|{+4^mh-L1ia( z;NI(lw`Xtmj`n^!czgct?I9>jL3*jTLBWlq&`+bp4=?RF*Yh?t_59a

1Y08q2lQbfd*5rD`LNdtwzynDqF?Fv% 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%0AC}hofMyP@a_*3ZCO)q&5a*~%izzw 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 GSONfBdX@_S diff --git a/stable/kommander/charts/kommander-thanos-0.1.8.tgz b/stable/kommander/charts/kommander-thanos-0.1.8.tgz new file mode 100644 index 0000000000000000000000000000000000000000..513f8db2dc19486c2e8630679859de42b7b6f94b GIT binary patch literal 19070 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%0Df_@Se1 zyF?YdYQ_|JLoysR;;&^+PyMu-+bWKglT*~~#F#TeDI#V^moqWw!{cw>WpNeEd}`q= zS;WW;3sg;vA2y{M3%&9i)RI}nF5eK{q^grz{DU8;6D>kAr(un;Eks39QghR1=F``hu!I%JL3D{B3Yn_|91vmga7w?y*mH%UW%ZA z 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 BvLpZi literal 0 HcmV?d00001 diff --git a/stable/kommander/requirements.lock b/stable/kommander/requirements.lock index 82438f4cf..3672801f8 100644 --- a/stable/kommander/requirements.lock +++ b/stable/kommander/requirements.lock @@ -10,12 +10,12 @@ dependencies: version: 1.192.0 - name: kommander-thanos repository: https://mesosphere.github.io/charts/stable - version: 0.1.7 + version: 0.1.8 - name: kommander-karma repository: https://mesosphere.github.io/charts/stable - version: 0.3.2 + version: 0.3.3 - name: grafana repository: https://kubernetes-charts.storage.googleapis.com version: 3.8.19 -digest: sha256:b7956484edf4a924bd40849e84fb1618144566e12ed4240a10ee2997dedfaf7e -generated: "2020-01-24T15:35:44.3664693Z" +digest: sha256:bb7ed5c5badacc606782b5d682cdcd18359f43a2cb246eba0a6d36cd4e212a1e +generated: "2020-01-29T09:48:03.609569-08:00" diff --git a/stable/kommander/requirements.yaml b/stable/kommander/requirements.yaml index bad4129d0..88625738d 100644 --- a/stable/kommander/requirements.yaml +++ b/stable/kommander/requirements.yaml @@ -1,25 +1,25 @@ dependencies: - - name: kubeaddons-catalog - version: "0.1.4" - repository: "https://mesosphere.github.io/charts/staging" - condition: kubeaddons-catalog.enabled - - name: kommander-cluster-lifecycle - version: "0.3.5" - repository: "https://mesosphere.github.io/kommander-cluster-lifecycle/charts" - condition: kommander-cluster-lifecycle.enabled, global.kommander-cluster-lifecycle.enabled - - name: kommander-ui - version: "1.192.0" - repository: "https://mesosphere.github.io/kommander/charts" - condition: kommander-ui.enabled - - name: kommander-thanos - version: "0.1.7" - repository: "https://mesosphere.github.io/charts/stable" - condition: kommander-thanos.enabled - - name: kommander-karma - version: "0.3.2" - repository: "https://mesosphere.github.io/charts/stable" - condition: kommander-karma.enabled - - name: grafana - version: 3.8.* - repository: https://kubernetes-charts.storage.googleapis.com - condition: grafana.enabled +- name: kubeaddons-catalog + version: "0.1.4" + repository: "https://mesosphere.github.io/charts/staging" + condition: kubeaddons-catalog.enabled +- name: kommander-cluster-lifecycle + version: "0.3.5" + repository: "https://mesosphere.github.io/kommander-cluster-lifecycle/charts" + condition: kommander-cluster-lifecycle.enabled, global.kommander-cluster-lifecycle.enabled +- name: kommander-ui + version: "1.192.0" + repository: "https://mesosphere.github.io/kommander/charts" + condition: kommander-ui.enabled +- name: kommander-thanos + version: "0.1.8" + repository: "https://mesosphere.github.io/charts/stable" + condition: kommander-thanos.enabled +- name: kommander-karma + version: "0.3.3" + repository: "https://mesosphere.github.io/charts/stable" + condition: kommander-karma.enabled +- name: grafana + version: 3.8.* + repository: https://kubernetes-charts.storage.googleapis.com + condition: grafana.enabled From 0b6bf9eab417cac95de2b6cdab10bd6e14467034 Mon Sep 17 00:00:00 2001 From: Grace Do Date: Wed, 29 Jan 2020 10:15:27 -0800 Subject: [PATCH 08/11] kommander: Clearer home dashboard job name --- stable/kommander/templates/grafana/hooks-home-dashboard.yaml | 2 +- stable/kommander/values.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/stable/kommander/templates/grafana/hooks-home-dashboard.yaml b/stable/kommander/templates/grafana/hooks-home-dashboard.yaml index fc05807e2..ca14840a6 100644 --- a/stable/kommander/templates/grafana/hooks-home-dashboard.yaml +++ b/stable/kommander/templates/grafana/hooks-home-dashboard.yaml @@ -46,7 +46,7 @@ data: set -o nounset set -o errexit set -o pipefail - CURL="curl --verbose --fail --max-time 30 --retry 20 --retry-connrefused"" + CURL="curl --verbose --fail --max-time 30 --retry 20 --retry-connrefused" DASHBOARD_ID=$($CURL -H "X-Forwarded-User: $X_FORWARDED_USER" {{ .Values.grafana.hooks.serviceURL }}/api/dashboards/uid/{{ .Values.grafana.hooks.homeDashboardUID }} | jq '.dashboard.id') echo "setting home dashboard to ID" $DASHBOARD_ID $CURL -X PUT -H "Content-Type: application/json" -H "X-Forwarded-User: $X_FORWARDED_USER" -d '{"homeDashboardId":'"$DASHBOARD_ID"'}' {{ .Values.grafana.hooks.serviceURL }}/api/org/preferences diff --git a/stable/kommander/values.yaml b/stable/kommander/values.yaml index f009d2532..1b472d3d8 100644 --- a/stable/kommander/values.yaml +++ b/stable/kommander/values.yaml @@ -30,7 +30,7 @@ grafana: enabled: true hooks: - jobName: grafana-home-dashboard + jobName: set-kommander-grafana-home-dashboard image: dwdraju/alpine-curl-jq secretKeyRef: ops-portal-credentials serviceURL: http://kommander-kubeaddons-grafana.kommander From 39c335abb1dd36c780b95bdf4d6158e731020f72 Mon Sep 17 00:00:00 2001 From: Grace Do Date: Thu, 30 Jan 2020 18:34:46 -0800 Subject: [PATCH 09/11] kommander: Only copy opsportal secret username --- ...-secret.yaml => opsportal-username-secret.yaml} | 14 +++++++------- stable/kommander/values.yaml | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) rename stable/kommander/templates/grafana/{opsportal-credentials-secret.yaml => opsportal-username-secret.yaml} (66%) diff --git a/stable/kommander/templates/grafana/opsportal-credentials-secret.yaml b/stable/kommander/templates/grafana/opsportal-username-secret.yaml similarity index 66% rename from stable/kommander/templates/grafana/opsportal-credentials-secret.yaml rename to stable/kommander/templates/grafana/opsportal-username-secret.yaml index 39c642b01..fb72262d7 100644 --- a/stable/kommander/templates/grafana/opsportal-credentials-secret.yaml +++ b/stable/kommander/templates/grafana/opsportal-username-secret.yaml @@ -2,7 +2,7 @@ apiVersion: batch/v1 kind: Job metadata: - name: copy-opsportal-credentials-secret + name: copy-{{ .Values.grafana.hooks.secretKeyRef }} namespace: {{ .Release.Namespace }} labels: {{ include "kommander.labels" . | indent 4 }} @@ -13,7 +13,7 @@ metadata: spec: template: metadata: - name: copy-opsportal-credentials-secret + name: copy-{{ .Values.grafana.hooks.secretKeyRef }} spec: containers: - name: kubectl @@ -23,13 +23,13 @@ spec: command: - /bin/sh - -c - - kubectl get secret ops-portal-credentials --namespace=kubeaddons --export -o yaml | kubectl apply --namespace={{ .Release.Namespace }} -f - + - kubectl create secret generic {{ .Values.grafana.hooks.secretKeyRef }} -n {{ .Release.Namespace }} --from-literal=username=$(kubectl get secret ops-portal-credentials --namespace=kubeaddons --export -o jsonpath="{.data.username}" | base64 --decode) restartPolicy: OnFailure --- apiVersion: batch/v1 kind: Job metadata: - name: cleanup-opsportal-credentials-secret + name: cleanup-{{ .Values.grafana.hooks.secretKeyRef }} namespace: {{ .Release.Namespace }} labels: {{ include "kommander.labels" . | indent 4 }} @@ -40,7 +40,7 @@ metadata: spec: template: metadata: - name: cleanup-opsportal-credentials-secret + name: cleanup-{{ .Values.grafana.hooks.secretKeyRef }} spec: serviceAccountName: {{ .Values.grafana.hooks.kommanderServiceAccount }} containers: @@ -50,6 +50,6 @@ spec: command: - /bin/sh - -c - - kubectl delete secret ops-portal-credentials --namespace={{ .Release.Namespace }} + - kubectl delete secret {{ .Values.grafana.hooks.secretKeyRef }} --namespace={{ .Release.Namespace }} restartPolicy: OnFailure -{{- end }} \ No newline at end of file +{{- end }} diff --git a/stable/kommander/values.yaml b/stable/kommander/values.yaml index 1b472d3d8..7e06f8231 100644 --- a/stable/kommander/values.yaml +++ b/stable/kommander/values.yaml @@ -32,7 +32,7 @@ grafana: hooks: jobName: set-kommander-grafana-home-dashboard image: dwdraju/alpine-curl-jq - secretKeyRef: ops-portal-credentials + secretKeyRef: ops-portal-username serviceURL: http://kommander-kubeaddons-grafana.kommander # This is the UID of the "Kubernetes / Compute Resources / Clusters" summary dashboard homeDashboardUID: efa86fd1d0c121a26444b636a3f509a8 From 4fd121b0a0dc7f5e3365f591d722fe826f1a4638 Mon Sep 17 00:00:00 2001 From: Grace Do Date: Fri, 31 Jan 2020 10:40:44 -0800 Subject: [PATCH 10/11] kommander: Bump chart version --- stable/kommander/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stable/kommander/Chart.yaml b/stable/kommander/Chart.yaml index 59482abef..acf0177b0 100644 --- a/stable/kommander/Chart.yaml +++ b/stable/kommander/Chart.yaml @@ -7,4 +7,4 @@ maintainers: - name: alejandroEsc - name: jimmidyson name: kommander -version: 0.3.20 +version: 0.3.21 From 15f8393c020626908c6ac21f19ec20445f26e9f8 Mon Sep 17 00:00:00 2001 From: Grace Do Date: Fri, 31 Jan 2020 10:41:58 -0800 Subject: [PATCH 11/11] kommander: Requirements tabbing --- stable/kommander/requirements.yaml | 48 +++++++++++++++--------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/stable/kommander/requirements.yaml b/stable/kommander/requirements.yaml index 88625738d..e635eccc3 100644 --- a/stable/kommander/requirements.yaml +++ b/stable/kommander/requirements.yaml @@ -1,25 +1,25 @@ dependencies: -- name: kubeaddons-catalog - version: "0.1.4" - repository: "https://mesosphere.github.io/charts/staging" - condition: kubeaddons-catalog.enabled -- name: kommander-cluster-lifecycle - version: "0.3.5" - repository: "https://mesosphere.github.io/kommander-cluster-lifecycle/charts" - condition: kommander-cluster-lifecycle.enabled, global.kommander-cluster-lifecycle.enabled -- name: kommander-ui - version: "1.192.0" - repository: "https://mesosphere.github.io/kommander/charts" - condition: kommander-ui.enabled -- name: kommander-thanos - version: "0.1.8" - repository: "https://mesosphere.github.io/charts/stable" - condition: kommander-thanos.enabled -- name: kommander-karma - version: "0.3.3" - repository: "https://mesosphere.github.io/charts/stable" - condition: kommander-karma.enabled -- name: grafana - version: 3.8.* - repository: https://kubernetes-charts.storage.googleapis.com - condition: grafana.enabled + - name: kubeaddons-catalog + version: "0.1.4" + repository: "https://mesosphere.github.io/charts/staging" + condition: kubeaddons-catalog.enabled + - name: kommander-cluster-lifecycle + version: "0.3.5" + repository: "https://mesosphere.github.io/kommander-cluster-lifecycle/charts" + condition: kommander-cluster-lifecycle.enabled, global.kommander-cluster-lifecycle.enabled + - name: kommander-ui + version: "1.192.0" + repository: "https://mesosphere.github.io/kommander/charts" + condition: kommander-ui.enabled + - name: kommander-thanos + version: "0.1.8" + repository: "https://mesosphere.github.io/charts/stable" + condition: kommander-thanos.enabled + - name: kommander-karma + version: "0.3.3" + repository: "https://mesosphere.github.io/charts/stable" + condition: kommander-karma.enabled + - name: grafana + version: 3.8.* + repository: https://kubernetes-charts.storage.googleapis.com + condition: grafana.enabled