
sw-patch-agent service would cause unwanted reboots and conflicts with the USM patching strategy: sw-patch-agent can interfere with software-agent and incorrectly flag the host as reboot-required after noticing that it's not patch-current by sw-patch standards Logs will typically look like this before each reboot: sw-patch-agent[2049]: patch_agent.py(390): INFO: Active Sysroot Commit:650ace717b24afd2e7283cc6ce8b01f13adce84db95e03685610e120424610b9 does not match active controller's Feed Repo Commit: 028e1fa688afaa27aa7a34d4b5ee9eeb8d188b691ba3e558c409bb58e0e83fe2 sw-patch: Node has been patched, with reboot-required flag set. Rebooting Since sw-patch-agent is no longer needed, it's to be removed. Depends-On: https://review.opendev.org/c/starlingx/stx-puppet/+/935555 Test-Plan: PASS: AIO-SX upgrade using sw-manager strategy PASS: AIO-DX System Controller upgrade using strategy PASS: subcloud upgrade using dcmanager strategy PASS: DC patch orchestration for n-1 subclouds Story: 2010676 Task: 51387 Change-Id: I2af7dfab9da89eeba4ffef3fa0d884ae6f2c354f Signed-off-by: mmachado <mmachado@windriver.com>
129 lines
4.0 KiB
Bash
129 lines
4.0 KiB
Bash
#!/bin/bash
|
|
#
|
|
# Copyright (c) 2014-2020 Wind River Systems, Inc.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
# StarlingX Patching
|
|
# chkconfig: 345 20 23
|
|
# description: StarlingX Patching init script
|
|
|
|
### BEGIN INIT INFO
|
|
# Provides: sw-patch
|
|
# Required-Start: $syslog
|
|
# Required-Stop: $syslog
|
|
# Default-Start: 2 3 5
|
|
# Default-Stop: 0 1 6
|
|
# Short-Description: sw-patch
|
|
# Description: Provides the StarlingX Patching
|
|
### END INIT INFO
|
|
|
|
NAME=$(basename $0)
|
|
|
|
. /usr/bin/tsconfig
|
|
. /etc/platform/platform.conf
|
|
|
|
logfile=/var/log/patching.log
|
|
patch_failed_file=/var/run/patch_install_failed
|
|
patched_during_init=/etc/patching/.patched_during_init
|
|
|
|
# if the system has never been bootstrapped, system_mode is not set
|
|
# treat a non bootstrapped system like it is simplex
|
|
# and manually manage lighttpd, etc..
|
|
if [ "${system_mode}" = "" ]; then
|
|
system_mode="simplex"
|
|
fi
|
|
|
|
function LOG_TO_FILE {
|
|
echo "`date "+%FT%T.%3N"`: $NAME: $*" >> $logfile
|
|
}
|
|
|
|
function check_for_rr_patch {
|
|
if [ -f /var/run/node_is_patched_rr ]; then
|
|
if [ ! -f ${patched_during_init} ]; then
|
|
echo
|
|
echo "Node has been patched and requires an immediate reboot."
|
|
echo
|
|
LOG_TO_FILE "Node has been patched, with reboot-required flag set. Rebooting"
|
|
touch ${patched_during_init}
|
|
/sbin/reboot
|
|
else
|
|
echo
|
|
echo "Node has been patched during init a second consecutive time. Skipping reboot due to possible error"
|
|
echo
|
|
LOG_TO_FILE "Node has been patched during init a second consecutive time. Skipping reboot due to possible error"
|
|
touch ${patch_failed_file}
|
|
rm -f ${patched_during_init}
|
|
exit 1
|
|
fi
|
|
else
|
|
rm -f ${patched_during_init}
|
|
fi
|
|
}
|
|
|
|
function check_install_uuid {
|
|
# Check whether our installed load matches the active controller
|
|
CONTROLLER_UUID=`curl -sf http://controller:${http_port}/feed/rel-${SW_VERSION}/install_uuid`
|
|
if [ $? -ne 0 ]; then
|
|
if [ "$HOSTNAME" = "controller-1" ]; then
|
|
# If we're on controller-1, controller-0 may not have the install_uuid
|
|
# matching this release, if we're in an upgrade. If the file doesn't exist,
|
|
# bypass this check
|
|
return 0
|
|
fi
|
|
|
|
LOG_TO_FILE "Unable to retrieve installation uuid from active controller"
|
|
echo "Unable to retrieve installation uuid from active controller"
|
|
return 1
|
|
fi
|
|
|
|
if [ "$INSTALL_UUID" != "$CONTROLLER_UUID" ]; then
|
|
LOG_TO_FILE "This node is running a different load than the active controller and must be reinstalled"
|
|
echo "This node is running a different load than the active controller and must be reinstalled"
|
|
return 1
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
# Check for installation failure
|
|
if [ -f /etc/platform/installation_failed ] ; then
|
|
LOG_TO_FILE "/etc/platform/installation_failed flag is set. Aborting."
|
|
echo "$(basename $0): Detected installation failure. Aborting."
|
|
exit 1
|
|
fi
|
|
|
|
# For AIO-SX, abort if config is not yet applied and this is running in init
|
|
if [ "${system_mode}" = "simplex" -a ! -f ${INITIAL_CONTROLLER_CONFIG_COMPLETE} -a "$1" = "start" ]; then
|
|
LOG_TO_FILE "Config is not yet applied. Skipping init patching"
|
|
exit 0
|
|
fi
|
|
|
|
# If the management interface is bonded, it may take some time
|
|
# before communications can be properly setup.
|
|
# Allow up to $DELAY_SEC seconds to reach controller.
|
|
DELAY_SEC=120
|
|
START=`date +%s`
|
|
FOUND=0
|
|
while [ $(date +%s) -lt $(( ${START} + ${DELAY_SEC} )) ]; do
|
|
LOG_TO_FILE "Waiting for controller to be pingable"
|
|
ping -c 1 controller > /dev/null 2>&1 || ping6 -c 1 controller > /dev/null 2>&1
|
|
if [ $? -eq 0 ]; then
|
|
LOG_TO_FILE "controller is pingable"
|
|
FOUND=1
|
|
break
|
|
fi
|
|
sleep 1
|
|
done
|
|
|
|
if [ ${FOUND} -eq 0 ]; then
|
|
# 'controller' is not available, just exit
|
|
LOG_TO_FILE "Unable to contact active controller (controller). Boot will continue."
|
|
exit 1
|
|
fi
|
|
|
|
RC=0
|
|
|
|
exit $RC
|
|
|