Files
update/software/scripts/sync-controllers-feed
Heitor Matsui f88638a374 Include missing data migration steps on deploy start
There are additional steps needed to enable "deploy host"
operation for major release upgrades. This commit adds these
additional steps, which are:

1. Create TO release platform config directory, done during
   upgrade-start on legacy upgrade procedure
2. Create TO release rabbitmq directory, done by upgrade
   manifest after controller-1 reinstall on legacy upgrade

The commit also fixes some issues:

1. shell-utils logging functions logging nowhere after
   being sourced by other scripts
2. sync-controllers-feed script was only syncing the
   ostree_repo directory instead of the full feed content
3. major release deployment scripts ran from different
   places, now all scripts are executed from the TO release
   feed directory, or from checked out TO release ostree
   repo in case of chroot
4. change umount command from chroot_mounts to lazy umount

Note: Since the "deploy host" endpoint for major release
deployment is not yet implemented, the test plan will have
test cases that simulate the "deploy host" operation.

Test Plan
PASS: simulate "deploy host" successfully for AIO-SX
PASS: simulate "deploy host" successfully for AIO-DX

Depends-on: https://review.opendev.org/c/starlingx/config/+/913715

Story: 2010676
Task: 49703

Change-Id: Ib6ae49b3590a1e50acb305ac7482e28bcc4de403
Signed-off-by: Heitor Matsui <heitorvieira.matsui@windriver.com>
2024-03-22 15:12:14 -03:00

93 lines
2.4 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 as LOG
import subprocess
import sys
import upgrade_utils
CONTROLLER_1_HOSTNAME = "controller-1"
SYSTEM_MODE_SIMPLEX = "simplex"
def sync_controllers(to_release, feed, controller):
cmd = [
"rsync",
"-ac",
"--delete",
"--exclude", "tmp",
feed,
f"rsync://{controller}/feed"
]
subprocess.run(cmd)
def main(sys_argv):
args = upgrade_utils.parse_arguments(sys_argv)
try:
feed = args["feed"]
to_release = args["to_release"]
except KeyError as e:
msg = "%s is not provided" % str(e)
LOG.error(msg)
print(msg)
upgrade_utils.print_usage(sys_argv[0], "--feed=<feed>")
return 1
if feed is None or to_release is None:
msg = "feed or to_release are missing"
LOG.error(msg)
print(msg)
upgrade_utils.print_usage(sys_argv[0], "--feed=<feed>")
return 1
try:
keystone_config = upgrade_utils.get_keystone_config(args)
token, endpoint = upgrade_utils.get_token_endpoint(keystone_config)
sysinv_client = upgrade_utils.get_sysinv_client(token, endpoint)
_, system_mode = upgrade_utils.get_system_info(sysinv_client)
simplex = (system_mode == SYSTEM_MODE_SIMPLEX)
if simplex:
LOG.info("System mode is simplex. Skipping sync controllers feed.. ")
return 0
except ImportError:
msg = "Failed to import cgtsclient"
LOG.exception(msg)
return 1
except Exception as e:
LOG.exception("Failed to get host attributes from sysinv. Error: %s", e)
return 1
LOG.info("Syncing feed.")
try:
sync_controllers(to_release, feed, CONTROLLER_1_HOSTNAME)
LOG.info("Feed synchronized between controllers.")
except subprocess.CalledProcessError as e:
LOG.exception("Feed synchronization command failed. Error: %s", e)
return 1
except Exception as e:
LOG.exception("Feed synchronization failed. Error: %s", e)
return 1
return 0
if __name__ == "__main__":
upgrade_utils.configure_logging('/var/log/software.log', log_level=LOG.INFO)
sys.exit(main(sys.argv))