Files
update/software/scripts/sync-controllers-feed
Luis Eduardo Bonatti e93d1686f5 Move upgrade scripts from config repo to update repo
Since upgrade is responsibility of USM the upgrade scripts need
to be moved to this repo. This commit adds the upgrade-scripts
from config, note that the upgrade-scripts will still be located
under /usr/local/share/upgrade.d folder.
There's also a change in upgrade-scripts to use the log function
from this repo instead of controllerconfig one.
Also fix a log error in deploy scripts.

Test Plan:
PASS: Build-pkgs && build-image.
PASS: Upgrade from 24.09 to 25.09 in sx.
PASS: Install/bootstrap 25.09 in sx.
PASS: Check if /usr/local/share/upgrade.d have the same scripts.
PASS: Check scripts are logging accordingly.

Story: 2011357
Task: 52196

Change-Id: Iab5e6d6f0348f996daf0adb2447d22c4216e537f
Signed-off-by: Luis Eduardo Bonatti <luizeduardo.bonatti@windriver.com>
2025-05-22 13:17:48 +00:00

103 lines
2.7 KiB
Python

#!/usr/bin/python3
# -*- encoding: utf-8 -*-
#
# vim: tabstop=4 shiftwidth=4 softtabstop=4
#
# Copyright (c) 2023-2024 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
"""
Run feed synchronization between controllers
"""
import logging
import os
import socket
import subprocess
import sys
import upgrade_utils
CONTROLLER_0_HOSTNAME = "controller-0"
CONTROLLER_1_HOSTNAME = "controller-1"
SYSTEM_MODE_SIMPLEX = "simplex"
LOG = logging.getLogger('main_logger')
def sync_controllers(feed):
controller = socket.gethostname()
controller = CONTROLLER_1_HOSTNAME if \
controller == CONTROLLER_0_HOSTNAME else CONTROLLER_0_HOSTNAME
LOG.info(f"Synchronizing feed with {controller}...")
cmd = [
"rsync",
"-ac",
"--delete",
"--exclude", "tmp",
feed,
f"rsync://{controller}/feed"
]
subprocess.run(cmd, check=True, text=True, capture_output=True)
def print_usage(sys_argv):
script_name = sys_argv[0]
print("Usage: %s --feed=<feed>" % script_name)
def get_system_mode():
system_mode=None
with open(os.devnull, "w") as fnull:
cmd = "bash -c 'grep system_mode /etc/platform/platform.conf'"
process = subprocess.Popen(cmd, stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
shell=True,
executable='/bin/bash')
stdout, stderr = process.communicate()
output = stdout.decode("utf-8").strip()
error_output = stderr.decode("utf-8").strip()
if process.returncode == 0:
system_mode = output.split('=')[1]
else:
LOG.error(f"Error: {error_output}")
return system_mode
def main(sys_argv):
args = upgrade_utils.parse_arguments(sys_argv)
try:
feed = args["feed"]
system_mode = get_system_mode()
if system_mode is None:
LOG.error("Unable to get the system mode.")
return 1
elif system_mode == SYSTEM_MODE_SIMPLEX:
LOG.info("System mode is simplex. Skipping sync controllers feed.")
return 0
sync_controllers(feed)
LOG.info("Feed synchronized between controllers.")
except KeyError as e:
msg = "%s is not provided" % str(e)
LOG.error(msg)
print(msg)
print_usage(sys_argv)
return 1
except subprocess.CalledProcessError as e:
LOG.exception("Feed synchronization command failed. Error: %s", e.stderr)
return 1
except Exception as e:
LOG.exception("Feed synchronization failed. Error: %s", e)
return 1
if __name__ == "__main__":
upgrade_utils.configure_logging('/var/log/software.log', log_level=logging.INFO)
sys.exit(main(sys.argv))