1+ apiVersion : v1
2+ kind : ServiceAccount
3+ metadata :
4+ name : version-checker-sa
5+ namespace : migration-system
6+ ---
7+ apiVersion : rbac.authorization.k8s.io/v1
8+ kind : Role
9+ metadata :
10+ name : configmap-editor-role
11+ namespace : migration-system
12+ rules :
13+ - apiGroups : [""]
14+ resources : ["configmaps"]
15+ resourceNames : ["version-config"]
16+ verbs : ["get", "patch"]
17+ ---
18+ apiVersion : rbac.authorization.k8s.io/v1
19+ kind : RoleBinding
20+ metadata :
21+ name : version-checker-binding
22+ namespace : migration-system
23+ subjects :
24+ - kind : ServiceAccount
25+ name : version-checker-sa
26+ namespace : migration-system
27+ roleRef :
28+ kind : Role
29+ name : configmap-editor-role
30+ apiGroup : rbac.authorization.k8s.io
31+ ---
32+ apiVersion : batch/v1
33+ kind : CronJob
34+ metadata :
35+ name : vjailbreak-version-checker
36+ namespace : migration-system
37+ spec :
38+ schedule : " 0 0 * * *"
39+ concurrencyPolicy : Forbid
40+ jobTemplate :
41+ spec :
42+ ttlSecondsAfterFinished : 300
43+ template :
44+ spec :
45+ serviceAccountName : version-checker-sa
46+ restartPolicy : OnFailure
47+ containers :
48+ - name : version-checker
49+ image : alpine:3.18
50+ command :
51+ - /bin/sh
52+ - -c
53+ - |
54+ set -e
55+ apk add --no-cache curl jq
56+
57+ curl -LO "https://dl.k8s.io/release/v1.34.0/bin/linux/amd64/kubectl"
58+
59+ chmod +x kubectl
60+ mv kubectl /usr/local/bin/
61+
62+ echo "Checking for latest version"
63+ CURRENT_VERSION=$(kubectl get configmap version-config -n migration-system -o jsonpath='{.data.version}')
64+ echo "Current version: $CURRENT_VERSION"
65+
66+ if [ -z "$CURRENT_VERSION" ]; then
67+ echo "Error: 'version' key not found in ConfigMap. Exiting."
68+ exit 1
69+ fi
70+
71+ LATEST_TAG=$(curl -s "https://api.github.com/repos/platform9/vjailbreak/tags" | jq -r '.[0].name')
72+
73+ if [ -z "$LATEST_TAG" ] || [ "$LATEST_TAG" == "null" ]; then
74+ echo "Error: Could not fetch latest tag from GitHub. Exiting."
75+ exit 1
76+ fi
77+ echo "Latest tag on GitHub: $LATEST_TAG"
78+
79+ CURRENT_SEMVER=${CURRENT_VERSION#v}
80+ LATEST_SEMVER=${LATEST_TAG#v}
81+ HIGHEST_VERSION=$(printf "%s\n%s" "$CURRENT_SEMVER" "$LATEST_SEMVER" | sort -V | tail -n1)
82+
83+ if [ "$LATEST_SEMVER" != "$CURRENT_SEMVER" ] && [ "$HIGHEST_VERSION" == "$LATEST_SEMVER" ]; then
84+ echo "New version found! Updating ConfigMap..."
85+ PATCH_DATA="{\"data\":{\"upgradeAvailable\":\"true\",\"upgradeVersion\":\"$LATEST_TAG\"}}"
86+ kubectl patch configmap version-config -n migration-system --type='merge' -p="$PATCH_DATA"
87+ echo "ConfigMap 'version-config' updated successfully."
88+ else
89+ echo "You are on the latest version. No update needed."
90+ fi
91+
92+ echo "Version Check Complete"
0 commit comments