check_update, pull image

This commit is contained in:
2024-09-16 15:58:30 +02:00
parent b5a72f10a3
commit d6e7cafddc

View File

@@ -363,6 +363,73 @@ create_framework_json() {
' | jq -r . >/etc/user/config/services/service-framework.json ' | jq -r . >/etc/user/config/services/service-framework.json
} }
check_update() {
local IMAGE="$1";
REPOSITORY_URL=$(echo $IMAGE | cut -d '/' -f1);
# Check whether repository url is available
CURL_CHECK="curl -m 5 -s -o /dev/null -w "%{http_code}" https://$REPOSITORY_URL/v2/";
CURL_CHECK_CODE=$(eval $CURL_CHECK);
if [[ "$CURL_CHECK_CODE" == "200" ]] ; then
debug "$REPOSITORY_URL accessed successful";
# if repository url is not set
if [[ "$(echo "$REPOSITORY_URL" | grep '\.')" == "" ]] ; then
REPOSITORY_URL="docker.io";
TEMP_PATH=$IMAGE;
else
# -f2- IMAGE can contain subdirectories
TEMP_PATH=$(echo $IMAGE | cut -d '/' -f2-);
fi;
debug "TEMP PATH: $TEMP_PATH";
TEMP_IMAGE=$(echo $TEMP_PATH | cut -d ':' -f1);
TEMP_VERSION=$(echo $TEMP_PATH | cut -d ':' -f2);
if [ "$TEMP_VERSION" == "$TEMP_IMAGE" ]; then # version is not set
TEMP_VERSION="latest";
fi;
debug "https://$REPOSITORY_URL/v2/$TEMP_IMAGE/manifests/$TEMP_VERSION";
debug "docker images -q --no-trunc $REPOSITORY_URL/$TEMP_IMAGE:$TEMP_VERSION";
digest=$(curl --silent -H "Accept: application/vnd.docker.distribution.manifest.v2+json" "https://$REPOSITORY_URL/v2/$TEMP_IMAGE/manifests/$TEMP_VERSION" | jq -r '.config.digest');
local_digest=$(docker images -q --no-trunc $REPOSITORY_URL/$TEMP_IMAGE:$TEMP_VERSION)
debug "DIGEST: $digest";
debug "LOCAL DIGEST: $local_digest";
if [ "$digest" != "$local_digest" ] ; then
echo "Update available. Executing update command..."
DOCKER_PULL="docker pull $REPOSITORY_URL/$TEMP_IMAGE:$TEMP_VERSION"
eval $DOCKER_PULL
STATUS=$?
debug "PULL STATUS: $STATUS"
if [ $STATUS != 0 ] ; then # Exit status of last task
echo "PULL ERROR: $DOCKER_PULL no any new image accessible in registry $REPOSITORY_URL";
else
UPDATE="1";
fi
else
echo "Already up to date. Nothing to do."
fi
else
debug "$REPOSITORY_URL not accessible, http error code: $CURL_CHECK_CODE";
echo "Force image pull has started without digest check...";
DOCKER_PULL="docker pull $IMAGE"
eval $DOCKER_PULL
STATUS=$?
debug "PULL STATUS: $STATUS"
if [ $STATUS != 0 ] ; then # Exit status of last task
echo "PULL ERROR: $DOCKER_PULL no any new image accessible in registry $REPOSITORY_URL";
else
UPDATE="1";
fi
fi
}
execute_task() { execute_task() {
TASK="$1" TASK="$1"
B64_JSON="$2" B64_JSON="$2"
@@ -458,10 +525,17 @@ execute_task() {
CONTAINER_NAMES=$(cat $SERVICE | jq -r .containers[].NAME); CONTAINER_NAMES=$(cat $SERVICE | jq -r .containers[].NAME);
CONTAINERS=""; CONTAINERS="";
for CONTAINER_NAME in "$CONTAINER_NAMES"; do for CONTAINER_NAME in "$CONTAINER_NAMES"; do
CONTAINERS="$CONTAINERS "$(docker ps --format '{{.Names}}' | grep "$CONTAINER_NAME"); UPDATE="";
IMAGE=$(echo $CONTAINER | jq -rc .IMAGE);
check_update "$IMAGE"
if [ "$UPDATE" == "1" ]; then
UPDATE_CONTAINERS="$UPDATE_CONTAINERS $CONTAINER_NAME";
else
UPTODATE_CONTAINERS="$UPTODATE_CONTAINERS $CONTAINER_NAME";
fi;
done; done;
#RESULT=$(echo "$CONTAINERS" | base64 -w0); #RESULT=$(echo "$CONTAINERS" | base64 -w0);
SERVICES=$SERVICES$SEP'"'$SERVICE_NAME'": {"content": "'$CONTENT'", "running": "'$CONTAINERS'"}'; SERVICES=$SERVICES$SEP'"'$SERVICE_NAME'": {"uptodate": "'$UPTODATE_CONTAINERS'", "update": "'$UPDATE_CONTAINERS'"}';
fi; fi;
done done