From a7cfc9a89856763d647201e52cc0561a8eadb434 Mon Sep 17 00:00:00 2001 From: maartenkamoen Date: Tue, 10 Oct 2023 18:18:15 +0200 Subject: [PATCH] feat(helm): idempotency for the etcd component Co-authored-by: Maarten Kamoen --- charts/kamaji/Chart.yaml | 2 +- charts/kamaji/README.md | 2 +- .../templates/etcd_job_postinstall.yaml | 14 +++++++----- .../kamaji/templates/etcd_job_preinstall.yaml | 22 +++++++++++++------ charts/kamaji/templates/etcd_rbac.yaml | 1 + 5 files changed, 27 insertions(+), 14 deletions(-) diff --git a/charts/kamaji/Chart.yaml b/charts/kamaji/Chart.yaml index 9bcce99e..9b19bd58 100644 --- a/charts/kamaji/Chart.yaml +++ b/charts/kamaji/Chart.yaml @@ -15,7 +15,7 @@ name: kamaji sources: - https://github.com/clastix/kamaji type: application -version: 0.12.5 +version: 0.12.6 annotations: catalog.cattle.io/certified: partner catalog.cattle.io/release-name: kamaji diff --git a/charts/kamaji/README.md b/charts/kamaji/README.md index 54a5c911..be0a813b 100644 --- a/charts/kamaji/README.md +++ b/charts/kamaji/README.md @@ -1,6 +1,6 @@ # kamaji -![Version: 0.12.5](https://img.shields.io/badge/Version-0.12.5-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v0.3.4](https://img.shields.io/badge/AppVersion-v0.3.4-informational?style=flat-square) +![Version: 0.12.6](https://img.shields.io/badge/Version-0.12.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v0.3.4](https://img.shields.io/badge/AppVersion-v0.3.4-informational?style=flat-square) Kamaji is a Kubernetes Control Plane Manager. diff --git a/charts/kamaji/templates/etcd_job_postinstall.yaml b/charts/kamaji/templates/etcd_job_postinstall.yaml index 48048e16..0ecd928f 100644 --- a/charts/kamaji/templates/etcd_job_postinstall.yaml +++ b/charts/kamaji/templates/etcd_job_postinstall.yaml @@ -30,11 +30,15 @@ spec: - bash - -c - |- - etcdctl member list -w table && - etcdctl user add --no-password=true root && - etcdctl role add root && - etcdctl user grant-role root root && - etcdctl auth enable + etcdctl member list -w table + if etcdctl user get root &>/dev/null; then + echo "User already exists, nothing to do" + else + etcdctl user add --no-password=true root && + etcdctl role add root && + etcdctl user grant-role root root && + etcdctl auth enable + fi env: - name: ETCDCTL_ENDPOINTS value: https://etcd-0.{{ include "etcd.serviceName" . }}.{{ .Release.Namespace }}.svc.cluster.local:2379 diff --git a/charts/kamaji/templates/etcd_job_preinstall.yaml b/charts/kamaji/templates/etcd_job_preinstall.yaml index a563a1a2..834e2973 100644 --- a/charts/kamaji/templates/etcd_job_preinstall.yaml +++ b/charts/kamaji/templates/etcd_job_preinstall.yaml @@ -37,13 +37,21 @@ spec: containers: - name: kubectl image: {{ printf "clastix/kubectl:%s" (include "etcd.jobsTagKubeVersion" .) }} - command: - - sh - - -c - - |- - kubectl --namespace={{ .Release.Namespace }} delete secret --ignore-not-found=true {{ include "etcd.caSecretName" . }} {{ include "etcd.clientSecretName" . }} && - kubectl --namespace={{ .Release.Namespace }} create secret generic {{ include "etcd.caSecretName" . }} --from-file=/certs/ca.crt --from-file=/certs/ca.key --from-file=/certs/peer-key.pem --from-file=/certs/peer.pem --from-file=/certs/server-key.pem --from-file=/certs/server.pem && - kubectl --namespace={{ .Release.Namespace }} create secret tls {{ include "etcd.clientSecretName" . }} --key=/certs/root-client-key.pem --cert=/certs/root-client.pem + command: ["/bin/sh", "-c"] + args: + - | + if kubectl get secret {{ include "etcd.caSecretName" . }} --namespace={{ .Release.Namespace }} &>/dev/null; then + echo "Secret {{ include "etcd.caSecretName" . }} already exists" + else + echo "Creating secret {{ include "etcd.caSecretName" . }}" + kubectl --namespace={{ .Release.Namespace }} create secret generic {{ include "etcd.caSecretName" . }} --from-file=/certs/ca.crt --from-file=/certs/ca.key --from-file=/certs/peer-key.pem --from-file=/certs/peer.pem --from-file=/certs/server-key.pem --from-file=/certs/server.pem + fi + if kubectl get secret {{ include "etcd.clientSecretName" . }} --namespace={{ .Release.Namespace }} &>/dev/null; then + echo "Secret {{ include "etcd.clientSecretName" . }} already exists" + else + echo "Creating secret {{ include "etcd.clientSecretName" . }}" + kubectl --namespace={{ .Release.Namespace }} create secret tls {{ include "etcd.clientSecretName" . }} --key=/certs/root-client-key.pem --cert=/certs/root-client.pem + fi volumeMounts: - mountPath: /certs name: certs diff --git a/charts/kamaji/templates/etcd_rbac.yaml b/charts/kamaji/templates/etcd_rbac.yaml index af767c16..c34d3bcc 100644 --- a/charts/kamaji/templates/etcd_rbac.yaml +++ b/charts/kamaji/templates/etcd_rbac.yaml @@ -15,6 +15,7 @@ rules: resources: - secrets verbs: + - get - delete resourceNames: - {{ include "etcd.caSecretName" . }}