Files
update/software/upgrade-scripts/04-remove-out-of-tree-service-parameter.py
Rahul Roshan Kachchap 79bbc6f2e6 Managing out_of_tree_drivers param during upgrade & rollback
This commit updates out_of_tree_drivers service parameter
to backup_oot_drivers_24.09 and removes out-of-tree-drivers
kernel parameter when upgrading from stx.10 to stx.11.
In case of rollback this commit update backup_oot_drivers_24.09
to out_of_tree_drivers service parameter & out-of-tree-drivers
kernel parameters to same value set before the upgrade.

Added migrate script that:
 - Delete any existing backup_oot_drivers_24.09 service
   parameter from sysinv DB.
 - Updates the original out_of_tree_drivers service parameter
   to backup_oot_drivers_24.09

Added delete script that:
 - Removes the backup_oot_drivers_24.09 service parameter entry
   when action=delete

Added an upgrade and rollback hook that:
 - Removes out-of-tree-drivers kernel parameter during upgrade
 - Retrieve and restores the out-of-tree-drivers kernel parameter
   from backup_oot_drivers if present during rollback

TestPlan:
PASS: build-pkgs -c software
PASS: build-image
PASS: bootstrap
PASS: AIO-SX & Standard upgrade and rollback (Verfied below by
      presetting out_of_tree_drivers to 'none' before upgrade and
      also without presetting)
      - After deploy-activate validated no out_of_tree_drivers
        service parameter exists
      - After delpoy-activate, validated no out-of-tree-drivers
        kernel parameter exists
      - After deploy-delete, validated the backup_oot_drivers
        service parameter gets removed
      - After rollback, Validated out_of_tree_drivers service
        parameter value is restored to original value
      - Validated out-of-tree-drivers kernel parameter value is
        restored to original value
PASS: AIO-SX & Standard upgrade and rollback succesfully
PASS: No double-reboot is observed after upgrade & rollback unlock

Story: 2011384
Task: 52853

Change-Id: I30aa179e329d7ea4cfa659737f66bad9ab4036e9
Signed-off-by: Rahul Roshan Kachchap <rahulroshan.kachchap@windriver.com>
2025-09-25 14:37:23 -04:00

124 lines
3.3 KiB
Python
Executable File

#!/usr/bin/env python
# Copyright (c) 2025 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
# This script updates the out_of_tree_drivers service parameter
# name to backup_oot_drivers_24.09 from sysinv DB during upgrade
# from 24.09 to 25.09.
#
import logging
import sys
from packaging import version
import psycopg2
from software.utilities.utils import configure_logging
DEFAULT_POSTGRES_PORT = 5432
LOG = logging.getLogger('main_logger')
PARAM_NAME = "out_of_tree_drivers"
BACKUP_NAME = "backup_oot_drivers_24.09"
PARAM_SERVICE = "platform"
PARAM_SECTION = "kernel"
def main():
action = None
from_release = None
to_release = None
postgres_port = DEFAULT_POSTGRES_PORT
arg = 1
while arg < len(sys.argv):
if arg == 1:
from_release = sys.argv[arg]
elif arg == 2:
to_release = sys.argv[arg]
elif arg == 3:
action = sys.argv[arg]
elif arg == 4:
postgres_port = sys.argv[arg]
else:
print("Invalid option %s." % sys.argv[arg])
return 1
arg += 1
configure_logging()
LOG.info(
"%s invoked from_release=%s to_release=%s action=%s",
sys.argv[0], from_release, to_release, action
)
res = 0
to_release_version = version.Version(to_release)
target_version = version.Version("25.09")
# Only remove service param on migrate to 25.09
if action == 'migrate' and to_release_version == target_version:
try:
conn = psycopg2.connect(
"dbname=sysinv user=postgres port=%s" % postgres_port
)
update_service_param(conn)
conn.close()
except Exception as e:
LOG.exception("Error removing service parameter: %s", e)
res = 1
return res
def update_service_param(conn):
"""Update out_of_tree_drivers service parameter to backup_oot_drivers
and ensure any old backup is cleaned up first.
"""
# Delete any existing backup entry to avoid stale values
cleanup_query = (
"DELETE FROM service_parameter "
"WHERE name='%s' AND service='%s' AND section='%s';"
% (BACKUP_NAME, PARAM_SERVICE, PARAM_SECTION)
)
db_update(conn, cleanup_query)
LOG.info("Cleaned up any existing '%s' backup entry.", BACKUP_NAME)
# Update the original parameter to backup_oot_drivers_24.09
update_query = (
"UPDATE service_parameter "
"SET name='%s' "
"WHERE name='%s' AND service='%s' AND section='%s';"
% (BACKUP_NAME, PARAM_NAME, PARAM_SERVICE, PARAM_SECTION)
)
db_update(conn, update_query)
LOG.info(
"Updated service parameter '%s' to '%s' successfully.",
PARAM_NAME, BACKUP_NAME
)
def db_query(conn, query):
"""Execute a read-only query and return results."""
result = []
with conn.cursor() as cur:
cur.execute(query)
for rec in cur:
result.append(rec)
return result
def db_update(conn, query):
"""Execute a write query and commit changes."""
with conn.cursor() as cur:
cur.execute(query)
conn.commit()
if __name__ == "__main__":
try:
sys.exit(main())
except Exception as e:
LOG.error("An error occurred: %s", e)
raise