77
88{ [ " $EXTENSIONS_CACHE_LOG_LEVEL " != DEBUG ] && [ " $EXTENSIONS_CACHE_LOG_LEVEL " != TRACE ]; } || set -x
99
10+ EXTENSIONS_REPOSITORY_URLS=" ${EXTENSIONS_REPOSITORY_URLS:- https:// extensions.stackgres.io/ postgres/ repository} "
11+
1012run () {
1113 # shellcheck disable=SC2153
1214 [ -n " $EXTENSIONS_REPOSITORY_URLS " ]
@@ -57,21 +59,27 @@ run () {
5759
5860 echo " Updating extensions..."
5961 (
60- [ " $EXTENSIONS_CACHE_LOG_LEVEL " = TRACE ] || set +x
61- STATEFULSET=" $( kubectl get statefulset -n " $NAMESPACE " " $STATEFULSET_NAME " -o json) "
62- printf ' %s' " $STATEFULSET " > " $STATEFULSET_JSON_FILE "
62+ if [ " $OFFLINE " != true ]
63+ then
64+ [ " $EXTENSIONS_CACHE_LOG_LEVEL " = TRACE ] || set +x
65+ STATEFULSET=" $( kubectl get statefulset -n " $NAMESPACE " " $STATEFULSET_NAME " -o json) "
66+ printf ' %s' " $STATEFULSET " > " $STATEFULSET_JSON_FILE "
67+ fi
6368 )
6469 (
6570 [ " $EXTENSIONS_CACHE_LOG_LEVEL " = TRACE ] || set +x
6671 get_to_install_extensions > full_to_install_extensions
6772 sort full_to_install_extensions \
6873 | uniq | { grep -v ' ^$' || true ; } > to_install_extensions
6974 TO_INSTALL_EXTENSIONS_JSON_STRING=" $( jq -sR . to_install_extensions) "
70- PULLED_TO_INSTALL_EXTENSIONS_JSON_STRING=" $(
71- jq ' .metadata.annotations
72- | if . != null then .pulled_extensions else "" end
73- | if . != null then . else "" end' " $STATEFULSET_JSON_FILE " ) "
74- printf ' %s' " $PULLED_TO_INSTALL_EXTENSIONS_JSON_STRING " | jq -r . > already_pulled_to_install_extensions
75+ if [ " $OFFLINE " != true ]
76+ then
77+ PULLED_TO_INSTALL_EXTENSIONS_JSON_STRING=" $(
78+ jq ' .metadata.annotations
79+ | if . != null then .pulled_extensions else "" end
80+ | if . != null then . else "" end' " $STATEFULSET_JSON_FILE " ) "
81+ printf ' %s' " $PULLED_TO_INSTALL_EXTENSIONS_JSON_STRING " | jq -r . > already_pulled_to_install_extensions
82+ fi
7583 if [ " $TO_INSTALL_EXTENSIONS_JSON_STRING " != " $PULLED_TO_INSTALL_EXTENSIONS_JSON_STRING " ]
7684 then
7785 while read -r LINE
@@ -101,47 +109,54 @@ run () {
101109 fi
102110 done
103111 (
104- [ " $EXTENSIONS_CACHE_LOG_LEVEL " = TRACE ] || set +x
105- ALREADY_PULLED_TO_INSTALL_EXTENSIONS_JSON_STRING=" $(
106- jq ' .metadata.annotations.pulled_extensions' " $STATEFULSET_JSON_FILE " ) "
107- PULLED_TO_INSTALL_EXTENSIONS_JSON_STRING=" $(
108- cat pulled_to_install_extensions already_pulled_to_install_extensions \
109- | sort | uniq | jq -sR .) "
110- if [ " $ALREADY_PULLED_TO_INSTALL_EXTENSIONS_JSON_STRING " != " $PULLED_TO_INSTALL_EXTENSIONS_JSON_STRING " ]
112+ if [ " $OFFLINE " != true ]
111113 then
112- RUNNING_IMAGES=" $( kubectl get statefulset -n " $NAMESPACE " " $STATEFULSET_NAME " \
113- --template ' {{ range .spec.template.spec.containers }}{{ printf "%s\n" .image }}{{ end }}' ) "
114- RUNNING_IMAGES=" $( printf ' %s' " $RUNNING_IMAGES " | sort) "
115- REQUIRED_IMAGES=" $( jq ' .spec.template.spec.containers[].image' " $STATEFULSET_JSON_FILE " ) "
116- REQUIRED_IMAGES=" $( printf ' %s' " $REQUIRED_IMAGES " | sort) "
117- if [ " $RUNNING_IMAGES " != " $REQUIRED_IMAGES " ]
114+ [ " $EXTENSIONS_CACHE_LOG_LEVEL " = TRACE ] || set +x
115+ ALREADY_PULLED_TO_INSTALL_EXTENSIONS_JSON_STRING=" $(
116+ jq ' .metadata.annotations.pulled_extensions' " $STATEFULSET_JSON_FILE " ) "
117+ PULLED_TO_INSTALL_EXTENSIONS_JSON_STRING=" $(
118+ cat pulled_to_install_extensions already_pulled_to_install_extensions \
119+ | sort | uniq | jq -sR .) "
120+ if [ " $ALREADY_PULLED_TO_INSTALL_EXTENSIONS_JSON_STRING " != " $PULLED_TO_INSTALL_EXTENSIONS_JSON_STRING " ]
121+ then
122+ RUNNING_IMAGES=" $( kubectl get statefulset -n " $NAMESPACE " " $STATEFULSET_NAME " \
123+ --template ' {{ range .spec.template.spec.containers }}{{ printf "%s\n" .image }}{{ end }}' ) "
124+ RUNNING_IMAGES=" $( printf ' %s' " $RUNNING_IMAGES " | sort) "
125+ REQUIRED_IMAGES=" $( jq ' .spec.template.spec.containers[].image' " $STATEFULSET_JSON_FILE " ) "
126+ REQUIRED_IMAGES=" $( printf ' %s' " $REQUIRED_IMAGES " | sort) "
127+ if [ " $RUNNING_IMAGES " != " $REQUIRED_IMAGES " ]
128+ then
129+ touch /tmp/need-restart
130+ fi
131+ STATEFULSET=" $( cat " $STATEFULSET_JSON_FILE " ) "
132+ printf ' %s' " $STATEFULSET " \
133+ | jq " .metadata.annotations.pulled_extensions = $PULLED_TO_INSTALL_EXTENSIONS_JSON_STRING " \
134+ > " $STATEFULSET_JSON_FILE "
135+ cp " $STATEFULSET_JSON_FILE " " $STATEFULSET_JSON_FILE .new"
136+ until kubectl replace statefulset -n " $NAMESPACE " " $STATEFULSET_NAME " \
137+ --cascade orphan -f " $STATEFULSET_JSON_FILE .new"
138+ do
139+ sleep 5
140+ STATEFULSET=" $( kubectl get statefulset -n " $NAMESPACE " " $STATEFULSET_NAME " -o json) "
141+ printf ' %s' " $STATEFULSET " > " $STATEFULSET_JSON_FILE .lastest"
142+ jq -s ' .[0].spec.template = .[1].spec.template | .[0]' \
143+ " $STATEFULSET_JSON_FILE .lastest" " $STATEFULSET_JSON_FILE " > " $STATEFULSET_JSON_FILE .new"
144+ done
145+ fi
146+ if ! any_image_repository_url && test -f /tmp/need-restart
118147 then
119- touch /tmp/need-restart
148+ kubectl delete pod -n " $NAMESPACE " " $STATEFULSET_NAME -0 "
120149 fi
121- STATEFULSET=" $( cat " $STATEFULSET_JSON_FILE " ) "
122- printf ' %s' " $STATEFULSET " \
123- | jq " .metadata.annotations.pulled_extensions = $PULLED_TO_INSTALL_EXTENSIONS_JSON_STRING " \
124- > " $STATEFULSET_JSON_FILE "
125- cp " $STATEFULSET_JSON_FILE " " $STATEFULSET_JSON_FILE .new"
126- until kubectl replace statefulset -n " $NAMESPACE " " $STATEFULSET_NAME " \
127- --cascade orphan -f " $STATEFULSET_JSON_FILE .new"
128- do
129- sleep 5
130- STATEFULSET=" $( kubectl get statefulset -n " $NAMESPACE " " $STATEFULSET_NAME " -o json) "
131- printf ' %s' " $STATEFULSET " > " $STATEFULSET_JSON_FILE .lastest"
132- jq -s ' .[0].spec.template = .[1].spec.template | .[0]' \
133- " $STATEFULSET_JSON_FILE .lastest" " $STATEFULSET_JSON_FILE " > " $STATEFULSET_JSON_FILE .new"
134- done
135- fi
136- if ! any_image_repository_url && test -f /tmp/need-restart
137- then
138- kubectl delete pod -n " $NAMESPACE " " $STATEFULSET_NAME -0"
139150 fi
140151 )
141152 echo " done"
142153 echo
143154 )
144155 EXIT_CODE=" $? "
156+ if [ " $OFFLINE " = true ]
157+ then
158+ exit " $EXIT_CODE "
159+ fi
145160 if [ " $EXIT_CODE " = 0 ]
146161 then
147162 if ! test -f /tmp/need-restart
@@ -162,6 +177,10 @@ run () {
162177}
163178
164179any_image_repository_url () {
180+ if [ " $OFFLINE " = true ]
181+ then
182+ return 1
183+ fi
165184 local EXTENSIONS_REPOSITORY_URL
166185 for EXTENSIONS_REPOSITORY_URL in $( echo " $EXTENSIONS_REPOSITORY_URLS " | tr ' ,' ' \n' )
167186 do
@@ -377,37 +396,40 @@ update_repositories_credentials() {
377396}
378397
379398get_to_install_extensions () {
380- (
381- CLUSTER_EXTENSIONS=" $( [ -n " $ALLOWED_NAMESPACES " ] \
382- && printf %s " $ALLOWED_NAMESPACES " \
383- | tr ' ' ' \n' \
384- | xargs -I @NAMESPACE sh $( [ " $EXTENSIONS_CACHE_LOG_LEVEL " != TRACE ] || printf %s -x) -c \
385- " kubectl get sgcluster -n @NAMESPACE -o json | jq '.items[]'" \
386- || kubectl get sgcluster -A -o json | jq ' .items[]' ) "
387- DISTRIBUTEDLOGS_EXTENSIONS=" $( [ -n " $ALLOWED_NAMESPACES " ] \
388- && printf %s " $ALLOWED_NAMESPACES " \
389- | tr ' ' ' \n' \
390- | xargs -I @NAMESPACE sh $( [ " $EXTENSIONS_CACHE_LOG_LEVEL " != TRACE ] || printf %s -x) -c \
391- " kubectl get sgdistributedlogs -n @NAMESPACE -o json | jq '.items[]'" \
392- || kubectl get sgdistributedlogs -A -o json | jq ' .items[]' ) "
393- printf ' %s' " $CLUSTER_EXTENSIONS "
394- printf ' %s' " $DISTRIBUTEDLOGS_EXTENSIONS "
395- ) | jq -r -s ' .[]
396- | select(has("status") and (.status | has("arch") and has("os")))
397- | .status as $status
398- | .spec.toInstallPostgresExtensions
399- | if . != null then . else [] end
400- | .[]
401- | .repository + " "
402- + .publisher + " "
403- + .name + " "
404- + .version + " "
405- + .postgresVersion
406- + " " + (.flavor | if . != null then . else "' " $DEFAULT_FLAVOR " ' " end)
407- + " " + $status.arch
408- + " " + $status.os
409- + " " + (.build | if . != null then . else "" end)
410- '
399+ if [ " $OFFLINE " != true ]
400+ then
401+ (
402+ CLUSTER_EXTENSIONS=" $( [ -n " $ALLOWED_NAMESPACES " ] \
403+ && printf %s " $ALLOWED_NAMESPACES " \
404+ | tr ' ' ' \n' \
405+ | xargs -I @NAMESPACE sh $( [ " $EXTENSIONS_CACHE_LOG_LEVEL " != TRACE ] || printf %s -x) -c \
406+ " kubectl get sgcluster -n @NAMESPACE -o json | jq '.items[]'" \
407+ || kubectl get sgcluster -A -o json | jq ' .items[]' ) "
408+ DISTRIBUTEDLOGS_EXTENSIONS=" $( [ -n " $ALLOWED_NAMESPACES " ] \
409+ && printf %s " $ALLOWED_NAMESPACES " \
410+ | tr ' ' ' \n' \
411+ | xargs -I @NAMESPACE sh $( [ " $EXTENSIONS_CACHE_LOG_LEVEL " != TRACE ] || printf %s -x) -c \
412+ " kubectl get sgdistributedlogs -n @NAMESPACE -o json | jq '.items[]'" \
413+ || kubectl get sgdistributedlogs -A -o json | jq ' .items[]' ) "
414+ printf ' %s' " $CLUSTER_EXTENSIONS "
415+ printf ' %s' " $DISTRIBUTEDLOGS_EXTENSIONS "
416+ ) | jq -r -s ' .[]
417+ | select(has("status") and (.status | has("arch") and has("os")))
418+ | .status as $status
419+ | .spec.toInstallPostgresExtensions
420+ | if . != null then . else [] end
421+ | .[]
422+ | .repository + " "
423+ + .publisher + " "
424+ + .name + " "
425+ + .version + " "
426+ + .postgresVersion
427+ + " " + (.flavor | if . != null then . else "' " $DEFAULT_FLAVOR " ' " end)
428+ + " " + $status.arch
429+ + " " + $status.os
430+ + " " + (.build | if . != null then . else "" end)
431+ '
432+ fi
411433 jq -r '
412434 .extensions[] | . as $extension
413435 | .versions[] | . as $version
0 commit comments