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

[Nuclio] Delete remote function config map #5530

Merged
merged 3 commits into from
May 8, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
10 changes: 9 additions & 1 deletion server/api/api/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -1353,10 +1353,17 @@ async def delete_function(
project: str,
function: str,
_semaphore: asyncio.Semaphore,
k8s_helper: server.api.utils.singletons.k8s.K8sHelper,
) -> tuple[str, str]:
async with _semaphore:
try:
await nuclio_client.delete_function(name=function, project_name=project)

config_map = k8s_helper.get_configmap_for_function(
function, mlrun.common.constants.MLRUN_MODEL_CONF
)
if config_map:
k8s_helper.delete_config_map(config_map.items[0].metadata.name)
return None
except Exception as exc:
# return tuple with failure info
Expand All @@ -1370,8 +1377,9 @@ async def delete_function(
failed_requests = []

async with server.api.utils.clients.async_nuclio.Client(auth_info) as client:
k8s_helper = server.api.utils.singletons.k8s.get_k8s_helper()
tasks = [
delete_function(client, project_name, function_name, semaphore)
delete_function(client, project_name, function_name, semaphore, k8s_helper)
for function_name in function_names
]

Expand Down
45 changes: 28 additions & 17 deletions server/api/utils/singletons/k8s.py
Original file line number Diff line number Diff line change
Expand Up @@ -552,28 +552,22 @@ def ensure_configmap(
labels: dict = None,
):
namespace = self.resolve_namespace(namespace)

have_confmap = False
label_name = "resource_name"
full_name = f"{resource}-{name}"
name = (
full_name
if len(full_name) <= 63
else full_name[:59] + self._generate_rand_string(4)
)

have_confmap = False
configmaps_with_label = self.v1api.list_namespaced_config_map(
namespace=namespace, label_selector=f"{label_name}={full_name}"
configmap_with_label = self.get_configmap_for_function(
rokatyy marked this conversation as resolved.
Show resolved Hide resolved
name, resource, namespace
)

if len(configmaps_with_label.items) > 1:
raise mlrun.errors.MLRunInternalServerError(
f"Received more than one config map for label: {full_name}"
)

if len(configmaps_with_label.items) == 1:
name = configmaps_with_label.items[0].metadata.name
if configmap_with_label:
name = configmap_with_label.metadata.name
have_confmap = True
else:
name = (
full_name
if len(full_name) <= 63
else full_name[:59] + self._generate_rand_string(4)
)

if labels is None:
labels = {label_name: full_name}
Expand Down Expand Up @@ -610,6 +604,23 @@ def ensure_configmap(
raise exc
return name

@raise_for_status_code
def get_configmap_for_function(
self, function_name: str, resource: str, namespace: str = ""
):
namespace = self.resolve_namespace(namespace)
label_name = "resource_name"
full_name = f"{resource}-{function_name}"
configmaps_with_label = self.v1api.list_namespaced_config_map(
namespace=namespace, label_selector=f"{label_name}={full_name}"
)
if len(configmaps_with_label.items) > 1:
raise mlrun.errors.MLRunInternalServerError(
f"Received more than one config map for label: {full_name}"
)

return configmaps_with_label.items[0] if configmaps_with_label.items else None

@raise_for_status_code
def delete_configmap(self, name: str, namespace: str = "", raise_on_error=True):
namespace = self.resolve_namespace(namespace)
Expand Down
Loading