Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor kfp-api's on_remove to use KRH built-in delete #385

Merged
merged 1 commit into from
Nov 22, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 31 additions & 10 deletions charms/kfp-api/src/charm.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@
from pathlib import Path

from charmed_kubeflow_chisme.exceptions import ErrorWithStatus, GenericCharmRuntimeError
from charmed_kubeflow_chisme.kubernetes import KubernetesResourceHandler
from charmed_kubeflow_chisme.lightkube.batch import delete_many
from charmed_kubeflow_chisme.kubernetes import (
KubernetesResourceHandler,
create_charm_default_labels,
)
from charmed_kubeflow_chisme.pebble import update_layer
from charms.data_platform_libs.v0.data_interfaces import DatabaseRequires
from charms.observability_libs.v1.kubernetes_service_patch import KubernetesServicePatch
Expand All @@ -21,6 +23,8 @@
from lightkube import ApiError
from lightkube.generic_resource import load_in_cluster_generic_resources
from lightkube.models.core_v1 import ServicePort
from lightkube.resources.core_v1 import Service, ServiceAccount
from lightkube.resources.rbac_authorization_v1 import ClusterRole, ClusterRoleBinding
from ops.charm import CharmBase
from ops.main import main
from ops.model import ActiveStatus, BlockedStatus, MaintenanceStatus, ModelError, WaitingStatus
Expand Down Expand Up @@ -142,6 +146,15 @@ def __init__(self, *args):
],
)

@property
def _charm_default_kubernetes_labels(self):
"""Return default labels for Kubernetes resources."""
return create_charm_default_labels(
application_name=self.model.app.name,
model_name=self.model.name,
scope="all-resources",
)

@property
def container(self):
"""Return container."""
Expand All @@ -156,6 +169,8 @@ def k8s_resource_handler(self):
template_files=K8S_RESOURCE_FILES,
context=self._context,
logger=self.logger,
labels=self._charm_default_kubernetes_labels,
resource_types={Service, ServiceAccount, ClusterRole, ClusterRoleBinding},
)
load_in_cluster_generic_resources(self._k8s_resource_handler.lightkube_client)
return self._k8s_resource_handler
Expand Down Expand Up @@ -554,14 +569,20 @@ def _on_upgrade(self, _):
def _on_remove(self, _):
"""Remove all resources."""
self.unit.status = MaintenanceStatus("Removing K8S resources")
k8s_resources_manifests = self.k8s_resource_handler.render_manifests()
try:
delete_many(self.k8s_resource_handler.lightkube_client, k8s_resources_manifests)
except ApiError as error:
# do not log/report when resources were not found
if error.status.code != 404:
self.logger.error(f"Failed to delete K8S resources, with error: {error}")
raise error
# Define the KubernetesResourceHandler manually because the object storage conflict in
# `self._context` is not available anymore, and all we need is the labels/resource_types
# to delete the resources anyway
k8s_resource_handler = KubernetesResourceHandler(
field_manager=self._lightkube_field_manager,
template_files=[],
context={},
logger=self.logger,
labels=self._charm_default_kubernetes_labels,
resource_types={Service, ServiceAccount, ClusterRole, ClusterRoleBinding},
)
load_in_cluster_generic_resources(k8s_resource_handler.lightkube_client)
k8s_resource_handler.delete()

self.unit.status = MaintenanceStatus("K8S resources removed")

def _on_update_status(self, _):
Expand Down
Loading