This commit improves logging during deploy start by:
1. Creating a common module to be sourced by shell scripts to
load general-use functions, thus reducing code duplication
between the scripts
2. Replacing plain "echo" commands on the scripts by logging
functions present on the common module
3. Adding timestamps to the log messages
4. Centralizing all scripts logs into software.log, favouring
the troubleshooting, now that log lines contain timestamps
and the process/script that generated them
This commit also deletes the ostree_mounts.yaml file since
it would be used by apt-ostree integration, which was dropped.
Test Plan
PASS: run deploy start successfully and verify that deploy start
log messages are logged with the expected format
Story: 2010676
Task: 49607
Change-Id: I0bdebde8147faa5b29a642e35bfaf26e9862ed0a
Signed-off-by: Heitor Matsui <heitorvieira.matsui@windriver.com>
160 lines
4.6 KiB
Bash
160 lines
4.6 KiB
Bash
#!/bin/bash
|
|
#
|
|
# Copyright (c) 2024 Wind River Systems, Inc.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
# This script removes artifacts created by the deploy start script:
|
|
# 1. Stop temporary database created for data migrations
|
|
# 2. Unmount the bind mounts used by the data migration process
|
|
# 3. Remove the staging deployment directory created by checking out TO release ostree branch
|
|
#
|
|
# It can be used either by another script (e.g. software-deploy-start) to automatically
|
|
# cleanup the environment after both success/failure paths of the data migration process,
|
|
# or can be used by a system administrator to manually cleanup the environment if the
|
|
# automatic cleanup process fails.
|
|
#
|
|
|
|
script_dir=$(dirname $0)
|
|
shell_utils=${script_dir}/shell-utils
|
|
if [ -f $shell_utils ]; then
|
|
source $shell_utils
|
|
else
|
|
echo "ERROR: ${shell_utils} module not found."
|
|
exit 1
|
|
fi
|
|
|
|
stop_database() {
|
|
local rootdir=$1
|
|
local to_ver=$2
|
|
local rc=0
|
|
|
|
# attempt to stop temporary database if still up
|
|
tmp_db_dir=${rootdir}/var/lib/postgresql/${to_ver}
|
|
info "Attempting to stop the temporary database in ${tmp_db_dir}..."
|
|
if [ -d $tmp_db_dir ]; then
|
|
lsof $tmp_db_dir
|
|
if [ $? -eq 0 ]; then
|
|
tmp_db_bin_dir=$(${rootdir}/usr/bin/pg_config --bindir)
|
|
sudo -u postgres ${tmp_db_bin_dir}/pg_ctl -D ${tmp_db_dir} stop
|
|
if [ $? -ne 0 ]; then
|
|
rc=1
|
|
error "Error stopping database."
|
|
else
|
|
info "Success stopping database."
|
|
fi
|
|
else
|
|
info "Database is not running."
|
|
fi
|
|
else
|
|
warning "No database found in the specified directory."
|
|
fi
|
|
return $rc
|
|
}
|
|
|
|
unmount_filesystems() {
|
|
local rootdir=$1
|
|
local rc=0
|
|
|
|
info "Attempting to unmount filesystems under ${rootdir}..."
|
|
k8s_umount_output=$(sudo umount ${rootdir}/usr/local/kubernetes/current 2>&1)
|
|
if [ $? -ne 0 ]; then
|
|
if [[ ! $k8s_umount_output =~ "not mounted" ]]; then
|
|
rc=1
|
|
error $k8s_umount_output
|
|
fi
|
|
fi
|
|
sudo ${rootdir}/usr/sbin/software-deploy/chroot_mounts.sh ${rootdir} -u
|
|
if [ $? -ne 0 ]; then
|
|
rc=1
|
|
error "Error unmounting filesystems."
|
|
else
|
|
info "Success unmounting filesystems."
|
|
fi
|
|
return $rc
|
|
}
|
|
|
|
remove_temp_directories() {
|
|
local repo=$1
|
|
local rootdir=$2
|
|
local rc=0
|
|
|
|
info "Attempting to remove temporary deployment directories [${repo}, ${rootdir}]..."
|
|
sudo ${rootdir}/usr/sbin/software-deploy/chroot_mounts.sh ${rootdir} -c
|
|
if [ $? -ne 0 ]; then
|
|
rc=1
|
|
error "Some mount points are still mounted, cannot proceed with the cleanup."
|
|
else
|
|
rm -rf $repo $rootdir
|
|
info "Temporary deployment directories removed successfully."
|
|
fi
|
|
return $rc
|
|
}
|
|
|
|
# script usage
|
|
if [ $# -ne 3 ]; then
|
|
echo
|
|
echo "usage: deploy-cleanup <tmp_ostree_repo_dir> <tmp_root_dir> <action>"
|
|
echo -e "\nParameters"
|
|
echo "=========="
|
|
echo "tmp_ostree_repo_dir: temporary ostree repo directory (example: /sysroot/upgrade/ostree_repo)"
|
|
echo "tmp_root_dir: temporary ostree checkout root directory (example: /sysroot/upgrade/sysroot)"
|
|
echo "action: action executed by the script (db|umount|remove|all)"
|
|
echo "- db: stop temporary database created for target release"
|
|
echo "- umount: unmount the bind mounts"
|
|
echo "- remove: delete the target release temporary directory"
|
|
echo "- all: all of the above, in top-down order"
|
|
echo
|
|
exit 1
|
|
fi
|
|
|
|
repo=$1
|
|
rootdir=$2
|
|
action=$3
|
|
|
|
# basic checks
|
|
for dir in $repo $rootdir; do
|
|
if [ ! -d $dir ]; then
|
|
error "Specified directory $dir does not exist, cannot proceed with cleanup."
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
target_build_info=${rootdir}/usr/etc/build.info
|
|
if [ ! -f $target_build_info ]; then
|
|
error "Cannot get target release build-info information, cannot proceed with cleanup."
|
|
exit 1
|
|
fi
|
|
|
|
# set to_ver based on build-info inside rootdir
|
|
to_ver=$(cat $target_build_info | grep SW_VERSION | cut -d'"' -f2)
|
|
|
|
# main
|
|
info "Starting cleanup for staging directories [${repo}, ${rootdir}]..."
|
|
case $action in
|
|
"db")
|
|
stop_database $rootdir $to_ver
|
|
;;
|
|
"umount")
|
|
unmount_filesystems $rootdir
|
|
;;
|
|
"remove")
|
|
remove_temp_directories $repo $rootdir
|
|
;;
|
|
"all")
|
|
stop_database $rootdir $to_ver && \
|
|
unmount_filesystems $rootdir && \
|
|
remove_temp_directories $repo $rootdir
|
|
;;
|
|
*)
|
|
error "Invalid action specified: ${action}"
|
|
;;
|
|
esac
|
|
rc=$?
|
|
if [ $rc -ne 0 ]; then
|
|
error "Error cleaning up [${repo}, ${rootdir}], please check the logs, take manual actions and retry the script."
|
|
fi
|
|
info "Cleanup script ended."
|
|
|
|
exit $rc
|