Skip to content

Commit

Permalink
core: services: kraken: properly cleanup when uninstalling an extension
Browse files Browse the repository at this point in the history
  • Loading branch information
Williangalvani committed Oct 21, 2022
1 parent ed0536f commit 41ae620
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 2 deletions.
2 changes: 2 additions & 0 deletions core/services/kraken/exceptions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class ContainerDoesNotExist(RuntimeError):
"""Attempted to use a non-existing container"""
16 changes: 14 additions & 2 deletions core/services/kraken/kraken.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from commonwealth.settings.manager import Manager
from loguru import logger

from exceptions import ContainerDoesNotExist
from settings import Extension, SettingsV1

REPO_URL = "https://bluerobotics.github.io/BlueOS-Extensions-Repository/manifest.json"
Expand Down Expand Up @@ -93,6 +94,17 @@ async def kill(self, container_name: str) -> None:
if container:
await container[0].kill()

async def remove(self, container_name: str) -> None:
logger.info(f"Removing container {container_name}")
container = await self.client.containers.list(filters={"name": {container_name: True}}) # type: ignore
if not container:
raise ContainerDoesNotExist(f"Unable remove {container_name}. container not found")
image = container[0]["Image"]
await self.kill(container_name)
await container[0].delete()
logger.info(f"Removing {container_name}")
await self.client.images.delete(image, force=False, noprune=False)

async def uninstall_extension(self, extension_name: str) -> None:
regex = re.compile("[^a-zA-Z0-9]")
expected_container_name = "extension-" + regex.sub("", f"{extension_name}")
Expand All @@ -102,8 +114,8 @@ async def uninstall_extension(self, extension_name: str) -> None:
if extension.container_name().startswith(expected_container_name)
]
logger.info(f"uninstalling: {extension}")
if extension:
await self.kill(extension[0].container_name())
container_name = extension[0].container_name()
await self.remove(container_name)
self.settings.extensions = [
extension for extension in self.settings.extensions if extension.name != extension_name
]
Expand Down

0 comments on commit 41ae620

Please sign in to comment.