Skip to content

Commit bc098cb

Browse files
committed
Avoid non nessacery rollouts
1 parent f210ff2 commit bc098cb

File tree

1 file changed

+48
-14
lines changed
  • charts/port-ocean/templates/cron-job

1 file changed

+48
-14
lines changed

charts/port-ocean/templates/cron-job/cron.yaml

Lines changed: 48 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -112,14 +112,48 @@ spec:
112112
# Rollout live events deployment if exists to match integration image versions
113113
rollout_if_exists() {
114114
local DEPLOYMENT_NAME=$1
115+
local CONTAINER_NAME="{{ include "port-ocean.containerName" . }}"
115116
116-
echo "Running: kubectl get deployment ${DEPLOYMENT_NAME} -o=json | jq -r \".metadata.name\""
117-
DEPLOYMENT=$(kubectl get deployment ${DEPLOYMENT_NAME} --token=$TOKEN -o=json | jq -r ".metadata.name")
117+
echo "Checking deployment: ${DEPLOYMENT_NAME}"
118+
DEPLOYMENT=$(kubectl get deployment ${DEPLOYMENT_NAME} -n ${NAMESPACE} --token=$TOKEN -o=json 2>/dev/null | jq -r ".metadata.name" 2>/dev/null)
118119
119120
if [ -n "$DEPLOYMENT" ]; then
120121
echo "Found deployment: $DEPLOYMENT"
121-
echo "Rolling out $DEPLOYMENT"
122-
kubectl rollout restart deployment $DEPLOYMENT -n ${NAMESPACE} --token=$TOKEN
122+
123+
# Get the CronJob container's resolved image SHA
124+
CRONJOB_IMAGE_SHA=$(kubectl get pod $HOSTNAME -n ${NAMESPACE} --token=$TOKEN -o=jsonpath="{.status.containerStatuses[?(@.name==\"${CONTAINER_NAME}\")].imageID}" 2>/dev/null)
125+
126+
# Get selector labels from the deployment to find its pods
127+
SELECTOR=$(kubectl get deployment ${DEPLOYMENT_NAME} -n ${NAMESPACE} --token=$TOKEN -o=json 2>/dev/null | jq -r '.spec.selector.matchLabels | to_entries | map("\(.key)=\(.value)") | join(",")' 2>/dev/null)
128+
129+
if [ -n "$SELECTOR" ]; then
130+
# Get first pod managed by this deployment
131+
DEPLOYMENT_POD=$(kubectl get pods -n ${NAMESPACE} -l ${SELECTOR} --token=$TOKEN -o=jsonpath='{.items[0].metadata.name}' 2>/dev/null)
132+
133+
if [ -n "$DEPLOYMENT_POD" ]; then
134+
# Get the deployment container's resolved image SHA
135+
DEPLOYMENT_IMAGE_SHA=$(kubectl get pod ${DEPLOYMENT_POD} -n ${NAMESPACE} --token=$TOKEN -o=jsonpath="{.status.containerStatuses[?(@.name==\"${CONTAINER_NAME}\")].imageID}" 2>/dev/null)
136+
137+
echo "CronJob container image SHA: $CRONJOB_IMAGE_SHA"
138+
echo "Deployment container image SHA: $DEPLOYMENT_IMAGE_SHA"
139+
140+
if [ -n "$CRONJOB_IMAGE_SHA" ] && [ -n "$DEPLOYMENT_IMAGE_SHA" ]; then
141+
if [ "$CRONJOB_IMAGE_SHA" = "$DEPLOYMENT_IMAGE_SHA" ]; then
142+
echo "Image SHAs are the same. Skipping rollout for $DEPLOYMENT"
143+
else
144+
echo "Image SHAs are different. Rolling out $DEPLOYMENT"
145+
kubectl rollout restart deployment $DEPLOYMENT -n ${NAMESPACE} --token=$TOKEN
146+
fi
147+
else
148+
echo "Could not retrieve image SHAs. Proceeding with rollout as safety measure."
149+
kubectl rollout restart deployment $DEPLOYMENT -n ${NAMESPACE} --token=$TOKEN
150+
fi
151+
else
152+
echo "No running pods found for deployment $DEPLOYMENT_NAME. Skipping rollout (no pods to compare)."
153+
fi
154+
else
155+
echo "Could not determine selector for deployment $DEPLOYMENT_NAME. Skipping rollout."
156+
fi
123157
else
124158
echo "Deployment $DEPLOYMENT_NAME does not exist. Skipping rollout restart."
125159
fi
@@ -157,16 +191,16 @@ spec:
157191
{{- tpl (toYaml .Values.extraEnv) . | nindent 14 }}
158192
{{- end }}
159193
{{- if .Values.postgresql.enabled }}
160-
- name: OCEAN__DATABASE__HOST
161-
value: {{ include "port-ocean.name" . }}-postgresql
162-
- name: OCEAN__DATABASE__PORT
163-
value: '5432'
164-
- name: OCEAN__DATABASE__NAME
165-
value: {{ .Values.postgresql.global.postgresql.auth.database }}
166-
- name: OCEAN__DATABASE__USERNAME
167-
value: {{ .Values.postgresql.global.postgresql.auth.username }}
168-
- name: OCEAN__DATABASE__PASSWORD
169-
value: {{ .Values.postgresql.global.postgresql.auth.password }}
194+
- name: OCEAN__DATABASE__HOST
195+
value: {{ include "port-ocean.name" . }}-postgresql
196+
- name: OCEAN__DATABASE__PORT
197+
value: '5432'
198+
- name: OCEAN__DATABASE__NAME
199+
value: {{ .Values.postgresql.global.postgresql.auth.database }}
200+
- name: OCEAN__DATABASE__USERNAME
201+
value: {{ .Values.postgresql.global.postgresql.auth.username }}
202+
- name: OCEAN__DATABASE__PASSWORD
203+
value: {{ .Values.postgresql.global.postgresql.auth.password }}
170204
{{- end }}
171205
envFrom:
172206
- configMapRef:

0 commit comments

Comments
 (0)