Files
update/software/upgrade-scripts/20-enable-fluxcd-controllers.py
T
Igor Soares 704b2ef74e Refactor Flux upgrade and rollback
Enable Flux upgrade and rollback scripts to make use of the
FluxDeploymentManager class implemented in sysinv.

Flux operations are now triggered via sysinv client and fully performed
by the deployment manager class, allowing for faster upgrades/rollbacks
and better maintainability.

Test plan:
PASS: AIO-SX upgrade from stx 11
PASS: AIO-DX upgrade from stx 11
PASS: AIO-DX rollback from master
PASS: AIO-SX rollback from master

Story: 2011598
Task: 53100

Depends-On: https://review.opendev.org/c/starlingx/config/+/966232
Depends-On: https://review.opendev.org/c/starlingx/config/+/967134

Change-Id: I39915f228776ab961f27ce6b6c3b5ce267fbac94
Signed-off-by: Igor Soares <Igor.PiresSoares@windriver.com>
2025-11-18 11:42:29 -03:00

100 lines
2.3 KiB
Python

#!/usr/bin/python
# Copyright (c) 2022-2025 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
# This script upgrades fluxcd controllers in the flux-helm namespace
# in kubernetes
#
import logging
import os
import sys
from cgtsclient import client as cgts_client
from software.utilities.utils import configure_logging
from sysinv.common.kubernetes import test_k8s_health
from sysinv.common.retrying import retry
LOG = logging.getLogger('main_logger')
def get_sysinv_client():
""" Get an authenticated cgts client
Returns:
Client: cgts client object
"""
sysinv_client = cgts_client.get_client(
"1",
os_auth_token=os.environ.get("OS_AUTH_TOKEN"),
system_url=os.environ.get("SYSTEM_URL")
)
return sysinv_client
@retry(retry_on_result=lambda x: x is False, stop_max_attempt_number=3)
@test_k8s_health
def upgrade_controllers():
""" Upgrade Flux controllers
Returns:
bool: True if upgrade is sucessful. False otherwise.
"""
LOG.info("Upgrading Flux controllers")
client = get_sysinv_client()
result = False
try:
result = client.flux.upgrade_controllers()
if result:
LOG.info("Flux controllers successfully upgraded")
else:
LOG.error("Error while upgrading flux controllers. "
"Check /var/log/sysinv.log for more details.")
except Exception as e:
LOG.error("Cannot upgrade flux controllers: %s", e)
return result
def main():
action = None
from_release = None
to_release = None
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]
pass
else:
print("Invalid option %s." % sys.argv[arg])
return 1
arg += 1
configure_logging()
if action == "activate" and from_release >= "25.09":
LOG.info(
"%s invoked with from_release = %s to_release = %s "
"action = %s" % (sys.argv[0], from_release, to_release, action)
)
if upgrade_controllers():
return 0
return 1
if __name__ == "__main__":
sys.exit(main())