Files
update/software/upgrade-scripts/23-resize-systemcontroller-filesystems.sh
Luis Eduardo Bonatti 2d2613ea68 Fix parsing error in upgrade-script 23
This commit fixes a parsing error in upgrade-script
23-resize-systemcontroller-filesystems.sh which leads to an error
during activate step for System Controller.

Test Plan:
PASS: Check all the "list" commands output manually in a stx11 SC.
PASS: Finish activate in upgrade from stx10 to stx11 in a SC.

Story: 2011357
Task: 52494

Change-Id: Icaa2594c9b108d64070f2e2224a73e821cc3cf6d
Signed-off-by: Luis Eduardo Bonatti <luizeduardo.bonatti@windriver.com>
2025-07-10 19:57:32 +00:00

156 lines
6.7 KiB
Bash

#!/bin/bash
#
# Copyright (c) 2022-2025 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
# This script is used to resize the platform (and backup, consequently) filesystems
# on System Controller DC, so that to allow an increased parallelism on subclouds
# deployment (100+ deployments in parallel). This script will:
# - Check if deployment is System Controller DC from distributed_cloud_role variable
# sourced from /etc/platform/platform.conf
# - Check if platform filesystem needs to be resized (i.e. if less than 20GB in size)
# and skip the execution if not
# - Check if there is enough space on cgts-vg to resize on both controllers
# - Resize backup filesystem on each controller and check if resized successfully
# - Resize platform controllerfs and check if resized successfully
# - NOTE: this script has to be idempotent and reentrant, since upgrade-activate can
# be called multiple times during the upgrade
# - NOTE: this script must not fail the upgrade if there is not enough disk space to
# resize, and only have to warn the user about the limitation
NAME=$(basename $0)
# The migration scripts are passed these parameters:
FROM_RELEASE=$1
TO_RELEASE=$2
ACTION=$3
EXPANDED_PLATFORM_SIZE=20
NODE_LIST=(controller-0 controller-1)
RESIZE_SLEEP_TIME=90
RESIZE_CHECK_MAX_RETRIES=5
source /etc/platform/platform.conf
function log {
echo "$(date -Iseconds | cut -d'+' -f1): ${NAME}[$$]: INFO: $*" >> "/var/log/software.log" 2>&1
}
function verify_fs_need_resizing {
_PLATFORM_SIZE=$(
system controllerfs-list --column name --column size --column state | grep platform | awk '{ print $4; }'
)
echo $_PLATFORM_SIZE # return value so that it can be assigned to variable
if [[ $_PLATFORM_SIZE -ge $EXPANDED_PLATFORM_SIZE ]]; then
return 1
fi
return 0
}
function verify_space_to_resize {
_PLATFORM_SIZE=$1
_HOSTNAME=$2
_AVAILABLE_DISK_SIZE=$(system host-lvg-list $_HOSTNAME | grep cgts-vg | awk '{ print $12; }')
_INCREASE_DISK_SIZE=$(echo "$EXPANDED_PLATFORM_SIZE - $_PLATFORM_SIZE" | bc)
_TOTAL_INCREASE_DISK_SIZE=$(echo "2 * $_INCREASE_DISK_SIZE" | bc) # need to resize platform and backup
log "[$_HOSTNAME] Available cgts-vg space: ${_AVAILABLE_DISK_SIZE}G, need ${_TOTAL_INCREASE_DISK_SIZE}G to resize."
echo $_INCREASE_DISK_SIZE # return value so that it can be assigned to variable
return $(echo "! $_AVAILABLE_DISK_SIZE >= $_TOTAL_INCREASE_DISK_SIZE" | bc)
}
function resize_backup_filesystem {
_INCREASE_DISK_SIZE=$1
_HOSTNAME=$2
_BACKUP_SIZE=$(system host-fs-list $_HOSTNAME | grep backup | awk '{ print $6; }')
_EXPANDED_BACKUP_SIZE=$(echo "$_BACKUP_SIZE + $_INCREASE_DISK_SIZE" | bc)
log "[$_HOSTNAME] Current backup size is ${_BACKUP_SIZE}G, new size will be ${_EXPANDED_BACKUP_SIZE}G."
system host-fs-modify $_HOSTNAME backup=$_EXPANDED_BACKUP_SIZE
sleep 5
_BACKUP_SIZE=$(system host-fs-list $_HOSTNAME | grep backup | awk '{ print $6; }')
return $(echo "! $_BACKUP_SIZE == $_EXPANDED_BACKUP_SIZE" | bc)
}
function resize_platform_controllerfs {
_PLATFORM_SIZE=$1
log "Current platform size is ${_PLATFORM_SIZE}G, new size will be ${EXPANDED_PLATFORM_SIZE}G."
system controllerfs-modify platform=$EXPANDED_PLATFORM_SIZE
for RETRY in $(seq $RESIZE_CHECK_MAX_RETRIES); do
log "Retry $RETRY of $RESIZE_CHECK_MAX_RETRIES, checking if platform filesystem is resized and available..."
OUTPUT=$(system controllerfs-list --column name --column size --column state | grep platform)
_CURRENT_PLATFORM_SIZE=$(echo $OUTPUT | awk '{ print $4; }')
_CURRENT_PLATFORM_STATE=$(echo $OUTPUT | awk -F"'" '{ print $4 }')
log "Current platform fs size/state: ${_CURRENT_PLATFORM_SIZE}/${_CURRENT_PLATFORM_STATE}"
if [[ ($_CURRENT_PLATFORM_SIZE -eq $EXPANDED_PLATFORM_SIZE) && ($_CURRENT_PLATFORM_STATE == "available") ]]; then
return 0
fi
# if current size is less than the expanded size, retry the resize command
if [[ $_CURRENT_PLATFORM_SIZE -lt $EXPANDED_PLATFORM_SIZE ]]; then
log "Current platform size is less than ${EXPANDED_PLATFORM_SIZE}G, retrying resize command..."
system controllerfs-modify platform=$EXPANDED_PLATFORM_SIZE
fi
sleep $RESIZE_SLEEP_TIME
done
if [[ $_CURRENT_PLATFORM_SIZE -eq $EXPANDED_PLATFORM_SIZE ]]; then
log "[WARNING] platform fs is resized but not yet in available state."
return 0
fi
return 1
}
# Script start
log "Starting filesystems resize on DC System Controller for increased parallel subcloud deployment, from release $FROM_RELEASE to $TO_RELEASE with action $ACTION"
if [[ "$ACTION" == "activate" ]]; then
if [[ $distributed_cloud_role == "systemcontroller" ]]; then
log "Verifying if filesystems need resizing..."
if ! PLATFORM_SIZE=$(verify_fs_need_resizing); then
log "No need to resize, platform filesystem has been resized already."
exit 0
fi
log "Platform filesystem needs resizing, current size is ${PLATFORM_SIZE}G, ideal size is ${EXPANDED_PLATFORM_SIZE}G."
log "Verifying if there is enough available space to resize..."
for NODE in "${NODE_LIST[@]}"; do
if ! INCREASE_DISK_SIZE=$(verify_space_to_resize $PLATFORM_SIZE $NODE); then
log "Not enough space in cgts-vg on $NODE to resize, parallel subcloud deployment will be limited. Resize operations will be skipped."
exit 0
fi
done
log "LVG cgts-vg has enough space for resizing, continuing with resize operations..."
log "Trying to resize host-fs backup for both controllers..."
for NODE in "${NODE_LIST[@]}"; do
if ! resize_backup_filesystem $INCREASE_DISK_SIZE $NODE; then
log "Failed while resizing backup fs on $NODE, resize operation aborted."
exit 0
fi
log "Successfully resized backup filesystem on $NODE."
done
log "Trying to resize controllerfs platform filesystem..."
if ! resize_platform_controllerfs $PLATFORM_SIZE; then
log "Failed while resizing controllerfs platform filesystem, resize operation aborted."
exit 0
fi
log "Successfully resized controllerfs platform filesystem."
else
log "Not a DC System Controller deployment. No filesystem resize needed."
fi
log "Filesystems resizing for DC System Controller finished successfully, from release $FROM_RELEASE to $TO_RELEASE with action $ACTION"
elif [[ "$ACTION" == "activate-rollback" ]]; then
log "The $ACTION action is not reversible for this script."
else
log "No actions required for from release $FROM_RELEASE to $TO_RELEASE with action $ACTION"
fi
exit 0