Merge "Add label 'app.starlingx.io/component=platform' to namespace"

This commit is contained in:
Zuul 2023-04-10 20:48:20 +00:00 committed by Gerrit Code Review
commit e7aabfcce3
2 changed files with 75 additions and 0 deletions

View File

@ -10,3 +10,4 @@ HELM_APP_PORTIERIS = 'portieris'
HELM_CHART_PORTIERIS = 'portieris'
HELM_CHART_PORTIERIS_CERTS = 'portieris-certs'
HELM_NS_PORTIERIS = 'portieris'
HELM_COMPONENT_LABEL_PORTIERIS = 'app.starlingx.io/component'

View File

@ -16,6 +16,7 @@ from sysinv.common import constants
from sysinv.common import exception
from sysinv.helm import lifecycle_base as base
from sysinv.helm.lifecycle_hook import LifecycleHookInfo
import yaml
LOG = logging.getLogger(__name__)
@ -33,6 +34,11 @@ class PortierisAppLifecycleOperator(base.AppLifecycleOperator):
:param hook_info: LifecycleHookInfo object
"""
if hook_info.lifecycle_type == constants.APP_LIFECYCLE_TYPE_OPERATION:
if hook_info.operation == constants.APP_APPLY_OP:
if hook_info.relative_timing == constants.APP_LIFECYCLE_TIMING_POST:
return self.post_apply(app_op, app, hook_info)
if hook_info.lifecycle_type == constants.APP_LIFECYCLE_TYPE_OPERATION:
if hook_info.operation == constants.APP_BACKUP:
if hook_info.relative_timing == constants.APP_LIFECYCLE_TIMING_PRE:
@ -52,6 +58,62 @@ class PortierisAppLifecycleOperator(base.AppLifecycleOperator):
context, conductor_obj, app_op, app, hook_info
)
def post_apply(self, app_op, app, hook_info):
"""Pre Apply actions
Creates the local registry secret and migrates helm user overrides
from one chart name to another
:param app_op: AppOperator object
:param app: AppOperator.Application object
:param hook_info: LifecycleHookInfo object
"""
LOG.info(
"Executing post_apply for {} app".format(constants.HELM_APP_PORTIERIS)
)
dbapi_instance = app_op._dbapi
db_app_id = dbapi_instance.kube_app_get(app.name).id
client_core = app_op._kube._get_kubernetesclient_core()
component_constant = app_constants.HELM_COMPONENT_LABEL_PORTIERIS
# chart overrides
chart_overrides = self._get_helm_user_overrides(
dbapi_instance,
db_app_id)
override_label = {}
# Namespaces variables
namespace = client_core.read_namespace(app_constants.HELM_APP_PORTIERIS)
# Old namespace variable
old_namespace_label = (namespace.metadata.labels.get(component_constant)
if component_constant in namespace.metadata.labels
else None)
if component_constant in chart_overrides:
# User Override variables
dict_chart_overrides = yaml.safe_load(chart_overrides)
override_label = dict_chart_overrides.get(component_constant)
if override_label == 'application':
namespace.metadata.labels.update({component_constant: 'application'})
app_op._kube.kube_patch_namespace(app_constants.HELM_APP_PORTIERIS, namespace)
elif override_label == 'platform':
namespace.metadata.labels.update({component_constant: 'platform'})
app_op._kube.kube_patch_namespace(app_constants.HELM_APP_PORTIERIS, namespace)
elif not override_label:
namespace.metadata.labels.update({component_constant: 'platform'})
app_op._kube.kube_patch_namespace(app_constants.HELM_APP_PORTIERIS, namespace)
else:
LOG.info(f'WARNING: Namespace label {override_label} not supported')
namespace_label = namespace.metadata.labels.get(component_constant)
if old_namespace_label != namespace_label:
self._delete_portieris_pods(app_op, client_core)
def pre_backup(self, app_op, app):
LOG.debug(
"Executing pre_backup for {} app".format(constants.HELM_APP_PORTIERIS)
@ -179,3 +241,15 @@ class PortierisAppLifecycleOperator(base.AppLifecycleOperator):
self._update_helm_user_overrides(
dbapi_instance, db_app_id, "\n".join([portieris_override] + other_overrides)
)
def _delete_portieris_pods(self, app_op, client_core):
# pod list
pods = client_core.list_namespaced_pod(app_constants.HELM_NS_PORTIERIS)
# Delete pods to force restart when it have any change in namespace_label
for pod in pods.items:
app_op._kube.kube_delete_pod(
name=pod.metadata.name,
namespace=app_constants.HELM_NS_PORTIERIS,
grace_periods_seconds=0
)