
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>
124 lines
3.3 KiB
Python
Executable File
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
|