58 lines
2.3 KiB
Bash
58 lines
2.3 KiB
Bash
#!/bin/bash
|
|
#
|
|
# This script performs a cleanup of the prev_env Salt Bundle environment
|
|
# that is created during a Salt Bundle upgrade.
|
|
#
|
|
# In case the script is triggered having WAIT_IF_SALT_JOBS env defined
|
|
# then it will wait until there is no active Salt jobs running on the system
|
|
# to perform the cleanup of the old environment.
|
|
#
|
|
# The script is triggered automatically via different ways:
|
|
#
|
|
# 1. As part of the Salt Highstate (via services.salt-minion).
|
|
# 2. By venv-salt-minion-postinstall.service, 60 seconds after a Salt Bundle upgrade.
|
|
# 3. By spec file during package installation/upgrade/removal.
|
|
#
|
|
# Expected execution behavior:
|
|
#
|
|
# - If there is no old environment detected -> Do nothing.
|
|
# - If an old environment is found:
|
|
# a) If WAIT_IF_SALT_JOBS env is NOT present -> Perform the cleanup.
|
|
# b) If WAIT_IF_SALT_JOBS env is present -> Wait until there are no
|
|
# other Salt jobs running to perform the cleanup.
|
|
#
|
|
# NOTE: In transactional systems, nothing is done when not running in a transaction.
|
|
#
|
|
# CAUTION: Do not call this script within a Salt execution and passing
|
|
# the WAIT_IF_SALT_JOBS env, as it will produce the script to
|
|
# go into an infinite loop.
|
|
#
|
|
|
|
if builtin type -P transactional-update &> /dev/null && [ "$TRANSACTIONAL_UPDATE" != "true" ]; then
|
|
# Do not clean previous environment on T-U systems when not in transaction
|
|
exit 0
|
|
fi
|
|
|
|
if [ -d "VENV_LOCATION_PLACEHOLDER/lib/prev_env" ] || [ -L "VENV_LOCATION_PLACEHOLDER/lib/PLACEHOLDER" ]; then
|
|
while [ "${WAIT_IF_SALT_JOBS}" ]; do
|
|
echo "Checking for active Salt jobs..."
|
|
JOBS_RUNNING=$(venv-salt-call --local --output=json saltutil.running | grep '"jid":' | wc -l)
|
|
if [ $JOBS_RUNNING -gt 0 ]; then
|
|
echo "Found active Salt jobs! Waiting 10 seconds..."
|
|
sleep 10
|
|
else
|
|
echo "No active Salt Jobs! Cleaning up the old environment..."
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
|
|
if [ -d "VENV_LOCATION_PLACEHOLDER/lib/prev_env" ]; then
|
|
echo "Removing VENV_LOCATION_PLACEHOLDER/lib/prev_env"
|
|
rm -r "VENV_LOCATION_PLACEHOLDER/lib/prev_env" || :
|
|
fi
|
|
if [ -L "VENV_LOCATION_PLACEHOLDER/lib/PLACEHOLDER" ]; then
|
|
echo "Unlinking VENV_LOCATION_PLACEHOLDER/lib/PLACEHOLDER"
|
|
unlink "VENV_LOCATION_PLACEHOLDER/lib/PLACEHOLDER" || :
|
|
fi
|