From 97845892e21d2edf70f8d05f3911074a5791b174 Mon Sep 17 00:00:00 2001 From: Shunpoco Date: Fri, 20 Feb 2026 21:44:59 +0000 Subject: [PATCH 1/6] add retry logic in downloader Signed-off-by: Shunpoco --- images/downloader/download_shim.sh | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/images/downloader/download_shim.sh b/images/downloader/download_shim.sh index de40890e..8cd4990c 100755 --- a/images/downloader/download_shim.sh +++ b/images/downloader/download_shim.sh @@ -23,10 +23,27 @@ log "start downloading shim from ${SHIM_LOCATION}..." "INFO" mkdir -p /assets +num_retry=${NUM_RETRY:-3} +sleep_duration=${SLEEP_DURATION:-2} + +for (( i=0; i < $num_retry+1; i++ )) +do + if curl -sLo "containerd-shim-${SHIM_NAME}" "${SHIM_LOCATION}" + then + ls -lah "containerd-shim-${SHIM_NAME}" + break + elif [ $i -eq $num_retry ] + then + log "number of failed downloads reached max retry ${num_retry}" "ERROR" + exit 1 + else + log "download failed. retry after sleep... (${i}/${num_retry})" "ERROR" + sleep $sleep_duration + fi +done + # overwrite default name of shim binary; use the name of shim resource instead # to enable installing multiple versions of the same shim -curl -sLo "containerd-shim-${SHIM_NAME}" "${SHIM_LOCATION}" -ls -lah "containerd-shim-${SHIM_NAME}" log "$(curl --version)" "INFO" log "$(tar --version)" "INFO" From 403ac9cf289b23484931c8e3d2d69ae6caf4b79c Mon Sep 17 00:00:00 2001 From: Shunpoco Date: Sat, 21 Feb 2026 00:05:13 +0000 Subject: [PATCH 2/6] add configmap for downloader Signed-off-by: Shunpoco --- deploy/helm/templates/deployment.yaml | 14 ++++++++++++++ deploy/helm/values.yaml | 6 ++++++ 2 files changed, 20 insertions(+) diff --git a/deploy/helm/templates/deployment.yaml b/deploy/helm/templates/deployment.yaml index 4a4962c8..cbbe35c7 100644 --- a/deploy/helm/templates/deployment.yaml +++ b/deploy/helm/templates/deployment.yaml @@ -49,6 +49,10 @@ spec: value: "{{ .Values.rcm.nodeInstallerImage.repository }}:{{ .Values.rcm.nodeInstallerImage.tag | default .Chart.AppVersion }}" - name: SHIM_NODE_INSTALLER_JOB_TTL value: "{{ .Values.rcm.nodeInstallerJob.ttl | default 0 }}" + {{- if .Values.rcm.shimDownloaderConfig.enabled }} + - name: SHIM_DOWNLOADER_CONFIG_MAP + value: "{{ .Values.rcm.shimDownloaderConfig.configMapName }}" + {{- end }} ports: - name: http containerPort: {{ .Values.service.port }} @@ -79,3 +83,13 @@ spec: tolerations: {{- toYaml . | nindent 8 }} {{- end }} +{{- if .Values.rcm.shimDownloaderConfig.enabled }} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Values.rcm.shimDownloaderConfig.configMapName }} +data: + NUM_RETRY: "{{ .Values.rcm.shimDownloaderConfig.content.numRetry }}" + SLEEP_DURATION: "{{ .Values.rcm.shimDownloaderConfig.content.sleepDuration }}" +{{- end }} diff --git a/deploy/helm/values.yaml b/deploy/helm/values.yaml index 653ed6f9..132afc9c 100644 --- a/deploy/helm/values.yaml +++ b/deploy/helm/values.yaml @@ -20,6 +20,12 @@ rcm: nodeInstallerJob: ttl: 0 leaderElectEnabled: false + shimDownloaderConfig: + enabled: false + configMapName: shim-downloader-config + content: + numRetry: 10 + sleepDuration: 2 imagePullSecrets: [] nameOverride: "" From be5a23a35bdada2710807c03d86d5df32a61af63 Mon Sep 17 00:00:00 2001 From: Shunpoco Date: Sat, 21 Feb 2026 00:05:23 +0000 Subject: [PATCH 3/6] add configmap to a downloader if RCM has the env var Signed-off-by: Shunpoco --- internal/controller/shim_controller.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/internal/controller/shim_controller.go b/internal/controller/shim_controller.go index e080f7e3..901fc797 100644 --- a/internal/controller/shim_controller.go +++ b/internal/controller/shim_controller.go @@ -434,6 +434,18 @@ func (sr *ShimReconciler) setOperationConfiguration(shim *rcmv1.Shim, opConfig * }, }, }} + if configMapName := os.Getenv("SHIM_DOWNLOADER_CONFIG_MAP"); configMapName != "" { + opConfig.initContainer[0].EnvFrom = []corev1.EnvFromSource{ + { + ConfigMapRef: &corev1.ConfigMapEnvSource{ + LocalObjectReference: corev1.LocalObjectReference{ + Name: configMapName, + }, + }, + }, + } + } + opConfig.args = []string{ "install", "-H", From 0e6dca9ef8334500ac0d6062c8f8ef3a14869c65 Mon Sep 17 00:00:00 2001 From: Shunpoco Date: Sat, 21 Feb 2026 10:32:39 +0000 Subject: [PATCH 4/6] add verification for downlaoder's configmap on CI Signed-off-by: Shunpoco --- .github/workflows/helm-chart-smoketest.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/helm-chart-smoketest.yml b/.github/workflows/helm-chart-smoketest.yml index 9a4047c5..09b57f36 100644 --- a/.github/workflows/helm-chart-smoketest.yml +++ b/.github/workflows/helm-chart-smoketest.yml @@ -151,6 +151,8 @@ jobs: --set rcm.nodeInstallerImage.tag=chart-test \ --set rcm.shimDownloaderImage.repository=shim-downloader \ --set rcm.shimDownloaderImage.tag=chart-test \ + --set rcm.shimDownloaderConfig.enabled=true \ + --set rcm.shimDownloaderConfig.configMapName=configmap-test \ deploy/helm - name: apply Spin shim @@ -174,6 +176,10 @@ jobs: run: | timeout 60s bash -c 'until [[ "$(kubectl -n rcm get $(kubectl get pods -n rcm --no-headers -o name | grep install | head -n1) -o jsonpath="{.status.phase}" 2>/dev/null)" == "Succeeded" ]]; do sleep 2; done' + - name: verify configMap for shim-downloader is added + run: | + timeout 60s bash -c 'until [[ $(kubectl -n rcm get $(kubectl get pods -n rcm --no-headers -o name | grep install | head -n1) -o jsonpath="{.spec.initContainers[0].envFrom[0].configMapRef.name}" 2>/dev/null) == "configmap-test" ]]; do sleep 2; done' + - name: run Spin App run: | kubectl apply -f testdata/apps/spin-app.yaml From 2590310d14baa2a96e1a93280662e5174dbf8aae Mon Sep 17 00:00:00 2001 From: Shunpoco Date: Sat, 21 Feb 2026 10:54:40 +0000 Subject: [PATCH 5/6] add comment to a helm value Signed-off-by: Shunpoco --- deploy/helm/values.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/deploy/helm/values.yaml b/deploy/helm/values.yaml index 132afc9c..de40c290 100644 --- a/deploy/helm/values.yaml +++ b/deploy/helm/values.yaml @@ -20,11 +20,12 @@ rcm: nodeInstallerJob: ttl: 0 leaderElectEnabled: false + # shimDownloaderConfig generates a ConfigMap which sets a downloader container's variables. Since those variables have defaults, you don't need to enable it unless you want to customize them. shimDownloaderConfig: enabled: false configMapName: shim-downloader-config content: - numRetry: 10 + numRetry: 3 sleepDuration: 2 imagePullSecrets: [] From e71016b25e44cd65485fc5b509a296a3ca61538e Mon Sep 17 00:00:00 2001 From: Shunpoco Date: Mon, 9 Mar 2026 21:51:53 +0000 Subject: [PATCH 6/6] address review: drop enabled for shimDownloaderConfig Signed-off-by: Shunpoco --- .github/workflows/helm-chart-smoketest.yml | 3 ++- deploy/helm/templates/deployment.yaml | 8 ++++---- deploy/helm/values.yaml | 11 +++++------ 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/helm-chart-smoketest.yml b/.github/workflows/helm-chart-smoketest.yml index 09b57f36..c985afa9 100644 --- a/.github/workflows/helm-chart-smoketest.yml +++ b/.github/workflows/helm-chart-smoketest.yml @@ -151,8 +151,9 @@ jobs: --set rcm.nodeInstallerImage.tag=chart-test \ --set rcm.shimDownloaderImage.repository=shim-downloader \ --set rcm.shimDownloaderImage.tag=chart-test \ - --set rcm.shimDownloaderConfig.enabled=true \ --set rcm.shimDownloaderConfig.configMapName=configmap-test \ + --set rcm.shimDownloaderConfig.content.numRetry=5 \ + --set rcm.shimDownloaderConfig.content.sleepDuration=3 \ deploy/helm - name: apply Spin shim diff --git a/deploy/helm/templates/deployment.yaml b/deploy/helm/templates/deployment.yaml index cbbe35c7..86d6dfcb 100644 --- a/deploy/helm/templates/deployment.yaml +++ b/deploy/helm/templates/deployment.yaml @@ -49,7 +49,7 @@ spec: value: "{{ .Values.rcm.nodeInstallerImage.repository }}:{{ .Values.rcm.nodeInstallerImage.tag | default .Chart.AppVersion }}" - name: SHIM_NODE_INSTALLER_JOB_TTL value: "{{ .Values.rcm.nodeInstallerJob.ttl | default 0 }}" - {{- if .Values.rcm.shimDownloaderConfig.enabled }} + {{- if .Values.rcm.shimDownloaderConfig }} - name: SHIM_DOWNLOADER_CONFIG_MAP value: "{{ .Values.rcm.shimDownloaderConfig.configMapName }}" {{- end }} @@ -83,13 +83,13 @@ spec: tolerations: {{- toYaml . | nindent 8 }} {{- end }} -{{- if .Values.rcm.shimDownloaderConfig.enabled }} +{{- if .Values.rcm.shimDownloaderConfig }} --- apiVersion: v1 kind: ConfigMap metadata: name: {{ .Values.rcm.shimDownloaderConfig.configMapName }} data: - NUM_RETRY: "{{ .Values.rcm.shimDownloaderConfig.content.numRetry }}" - SLEEP_DURATION: "{{ .Values.rcm.shimDownloaderConfig.content.sleepDuration }}" + NUM_RETRY: "{{ .Values.rcm.shimDownloaderConfig.content.numRetry | default 3 }}" + SLEEP_DURATION: "{{ .Values.rcm.shimDownloaderConfig.content.sleepDuration | default 2 }}" {{- end }} diff --git a/deploy/helm/values.yaml b/deploy/helm/values.yaml index de40c290..6dbe0b5e 100644 --- a/deploy/helm/values.yaml +++ b/deploy/helm/values.yaml @@ -21,12 +21,11 @@ rcm: ttl: 0 leaderElectEnabled: false # shimDownloaderConfig generates a ConfigMap which sets a downloader container's variables. Since those variables have defaults, you don't need to enable it unless you want to customize them. - shimDownloaderConfig: - enabled: false - configMapName: shim-downloader-config - content: - numRetry: 3 - sleepDuration: 2 + # shimDownloaderConfig: + # configMapName: shim-downloader-config + # content: + # numRetry: 3 + # sleepDuration: 2 imagePullSecrets: [] nameOverride: ""