From aebdbdbbd70836bdf4fa2ca60ad70fa57569ebc4 Mon Sep 17 00:00:00 2001 From: Jithin James Date: Thu, 21 Apr 2022 18:29:04 +0530 Subject: [PATCH] feat: new functionalities to create and delete repository (#36) --- bentoctl_lambda/__init__.py | 6 +++--- bentoctl_lambda/registry_utils.py | 30 ++++++++++++++++++++++++------ 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/bentoctl_lambda/__init__.py b/bentoctl_lambda/__init__.py index 46f3979..45deb6c 100644 --- a/bentoctl_lambda/__init__.py +++ b/bentoctl_lambda/__init__.py @@ -1,5 +1,5 @@ -from .generate import generate from .create_deployable import create_deployable -from .registry_utils import get_registry_info +from .generate import generate +from .registry_utils import create_repository, delete_repository -__all__ = ["create_deployable", "generate", "get_registry_info"] +__all__ = ["create_deployable", "generate", "create_repository", "delete_repository"] diff --git a/bentoctl_lambda/registry_utils.py b/bentoctl_lambda/registry_utils.py index 7cfb397..0b782a5 100644 --- a/bentoctl_lambda/registry_utils.py +++ b/bentoctl_lambda/registry_utils.py @@ -16,12 +16,18 @@ def get_ecr_login_info(region, repository_id): return registry_url, username, password +def get_repository(ecr_client, repository_name): + result = ecr_client.describe_repositories(repositoryNames=[repository_name]) + repository_id = result["repositories"][0]["registryId"] + repository_uri = result["repositories"][0]["repositoryUri"] + + return repository_id, repository_uri + + def create_ecr_repository_if_not_exists(region, repository_name): ecr_client = boto3.client("ecr", region) try: - result = ecr_client.describe_repositories(repositoryNames=[repository_name]) - repository_id = result["repositories"][0]["registryId"] - repository_uri = result["repositories"][0]["repositoryUri"] + repository_id, repository_uri = get_repository(ecr_client, repository_name) except ecr_client.exceptions.RepositoryNotFoundException: result = ecr_client.create_repository(repositoryName=repository_name) repository_id = result["repository"]["registryId"] @@ -29,13 +35,25 @@ def create_ecr_repository_if_not_exists(region, repository_name): return repository_id, repository_uri -def get_registry_info(deployment_name, operator_spec): +def create_repository(repository_name, operator_spec): """ - Return registry info + Create the ECR registry and return the info. """ repo_id, _ = create_ecr_repository_if_not_exists( - operator_spec["region"], deployment_name + operator_spec.get("region"), repository_name ) repo_url, username, password = get_ecr_login_info(operator_spec["region"], repo_id) return repo_url, username, password + + +def delete_repository(repository_name, operator_spec): + """ + Destroy the ECR registry created. + """ + ecr_client = boto3.client("ecr", operator_spec.get("region")) + try: + get_repository(ecr_client, repository_name) + ecr_client.delete_repository(repositoryName=repository_name, force=True) + except ecr_client.exceptions.RepositoryNotFoundException: + print(f"Repository {repository_name} not found. Skipping registry cleanup")