diff --git a/python3-k8sapp-openstack/k8sapp_openstack/k8sapp_openstack/lifecycle/lifecycle_openstack.py b/python3-k8sapp-openstack/k8sapp_openstack/k8sapp_openstack/lifecycle/lifecycle_openstack.py index b41be88b..061ce528 100644 --- a/python3-k8sapp-openstack/k8sapp_openstack/k8sapp_openstack/lifecycle/lifecycle_openstack.py +++ b/python3-k8sapp-openstack/k8sapp_openstack/k8sapp_openstack/lifecycle/lifecycle_openstack.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2023 Wind River Systems, Inc. +# Copyright (c) 2023-2025 Wind River Systems, Inc. # # SPDX-License-Identifier: Apache-2.0 # @@ -453,3 +453,12 @@ class OpenstackAppLifecycleOperator(base.AppLifecycleOperator): status = helm_utils.delete_helm_release( release=release_failed, namespace=app_constants.HELM_NS_OPENSTACK) LOG.info(status) + + # Downgrading is not officially supported for MariaDB: + # https://mariadb.com/kb/en/downgrading-between-major-versions-of-mariadb/ + # Because of that, we need to delete the Helmrelease for the new MariaDB + # before deploying the old one. + app_utils.delete_kubernetes_resource( + resource_type='helmrelease', + resource_name='mariadb' + ) diff --git a/python3-k8sapp-openstack/k8sapp_openstack/k8sapp_openstack/utils.py b/python3-k8sapp-openstack/k8sapp_openstack/k8sapp_openstack/utils.py index c858403a..c9ef02b3 100644 --- a/python3-k8sapp-openstack/k8sapp_openstack/k8sapp_openstack/utils.py +++ b/python3-k8sapp-openstack/k8sapp_openstack/k8sapp_openstack/utils.py @@ -606,3 +606,33 @@ def update_helmrelease(release, patch): LOG.error(f"Failed to update helmrelease: {release}, with error: {e}") except Exception as e: LOG.error(f"Unexpected error while updating helmrelease: {e}") + + +def delete_kubernetes_resource(resource_type, resource_name): + """ + Delete a Kubernetes resource. + + Args: + resource_type (str): The type of the Kubernetes resource. + resource_name (str): The name of the Kubernetes resource. + """ + cmd = [ + "kubectl", "--kubeconfig", kubernetes.KUBERNETES_ADMIN_CONF, + "delete", resource_type, resource_name, + "-n", app_constants.HELM_NS_OPENSTACK + ] + + try: + process = subprocess.run( + args=cmd, + capture_output=True, + text=True, + shell=False) + + LOG.info(f"Stdout: {process.stdout}") + LOG.info(f"Stderr: {process.stderr}") + process.check_returncode() + except KubeApiException as e: + LOG.error(f"Failed to delete {resource_type}: {resource_name}, with error: {e}") + except Exception as e: + LOG.error(f"Unexpected error while deleting {resource_type}: {e}")