From 664f3cfd799538d1c0c7b4ec4fef5155aa2dd74f Mon Sep 17 00:00:00 2001 From: bom Date: Thu, 25 May 2023 14:49:34 +0200 Subject: [PATCH] Implement DigitaloceanTerraform build type --- src/main/python/ddadevops/domain/__init__.py | 1 + src/main/python/ddadevops/domain/common.py | 1 + .../python/ddadevops/domain/devops_factory.py | 5 ++++- .../domain/digitalocean_terraform.py | 22 +++++++++++++++++++ src/test/python/domain/helper.py | 3 +++ src/test/python/domain/test_devops_factory.py | 22 ++++++++++++++++++- .../domain/test_digitalocean_terraform.py | 15 +++++++++++++ 7 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 src/main/python/ddadevops/domain/digitalocean_terraform.py create mode 100644 src/test/python/domain/test_digitalocean_terraform.py diff --git a/src/main/python/ddadevops/domain/__init__.py b/src/main/python/ddadevops/domain/__init__.py index c45278d..e8f0454 100644 --- a/src/main/python/ddadevops/domain/__init__.py +++ b/src/main/python/ddadevops/domain/__init__.py @@ -3,6 +3,7 @@ from .devops_factory import DevopsFactory from .image import Image from .c4k import C4k from .terraform import TerraformDomain +from .digitalocean_terraform import DigitaloceanTerraform from .provs_k3s import K3s from .release import Release from .credentials import Credentials, CredentialMapping, GopassType diff --git a/src/main/python/ddadevops/domain/common.py b/src/main/python/ddadevops/domain/common.py index c270a49..af62ed0 100644 --- a/src/main/python/ddadevops/domain/common.py +++ b/src/main/python/ddadevops/domain/common.py @@ -11,6 +11,7 @@ class BuildType(Enum): C4K = 1 K3S = 2 TERRAFORM = 3 + DIGITALOCEAN_TERRAFORM = 4 class MixinType(Enum): diff --git a/src/main/python/ddadevops/domain/devops_factory.py b/src/main/python/ddadevops/domain/devops_factory.py index f43e69e..26eb72f 100644 --- a/src/main/python/ddadevops/domain/devops_factory.py +++ b/src/main/python/ddadevops/domain/devops_factory.py @@ -4,6 +4,7 @@ from .image import Image from .c4k import C4k from .provs_k3s import K3s from .terraform import TerraformDomain +from .digitalocean_terraform import DigitaloceanTerraform from .release import Release from .version import Version @@ -23,8 +24,10 @@ class DevopsFactory: specialized_builds[BuildType.C4K] = C4k(inp) if BuildType.K3S in build_types: specialized_builds[BuildType.K3S] = K3s(inp) - if BuildType.K3S in build_types: + if BuildType.TERRAFORM in build_types: specialized_builds[BuildType.TERRAFORM] = TerraformDomain(inp) + if BuildType.DIGITALOCEAN_TERRAFORM in build_types: + specialized_builds[BuildType.DIGITALOCEAN_TERRAFORM] = DigitaloceanTerraform(inp) mixins: Dict[MixinType, Validateable] = {} if MixinType.RELEASE in mixin_types: diff --git a/src/main/python/ddadevops/domain/digitalocean_terraform.py b/src/main/python/ddadevops/domain/digitalocean_terraform.py new file mode 100644 index 0000000..98f541c --- /dev/null +++ b/src/main/python/ddadevops/domain/digitalocean_terraform.py @@ -0,0 +1,22 @@ +from typing import List +from .common import ( + Validateable, +) + + +class DigitaloceanTerraform(Validateable): + def __init__( + self, + inp: dict, + ): + self.do_api_key = inp.get("do_api_key") + self.do_spaces_access_id = inp.get("do_spaces_access_id") + self.do_spaces_secret_key = inp.get("do_spaces_secret_key") + + def validate(self) -> List[str]: + result = [] + result += self.__validate_is_not_empty__("do_api_key") + result += self.__validate_is_not_empty__("do_spaces_access_id") + result += self.__validate_is_not_empty__("do_spaces_secret_key") + return result + diff --git a/src/test/python/domain/helper.py b/src/test/python/domain/helper.py index 358803f..af6a9df 100644 --- a/src/test/python/domain/helper.py +++ b/src/test/python/domain/helper.py @@ -33,6 +33,9 @@ def devops_config(overrides: dict) -> dict: "tf_debug_print_terraform_command": None, "tf_additional_tfvar_files": None, "tf_terraform_semantic_version": None, + "do_api_key": "api_key", + "do_spaces_access_id": "spaces_id", + "do_spaces_secret_key": "spaces_secret", "release_type": "NONE", "release_main_branch": "main", diff --git a/src/test/python/domain/test_devops_factory.py b/src/test/python/domain/test_devops_factory.py index 7287869..4d470cb 100644 --- a/src/test/python/domain/test_devops_factory.py +++ b/src/test/python/domain/test_devops_factory.py @@ -1,6 +1,6 @@ import pytest from src.main.python.ddadevops.domain import ( - DevopsFactory, Version + DevopsFactory, Version, BuildType, MixinType ) @@ -29,6 +29,7 @@ def test_devops_factory(): } ) assert sut is not None + assert sut.specialized_builds[BuildType.IMAGE] is not None sut = DevopsFactory().build_devops( { @@ -44,6 +45,24 @@ def test_devops_factory(): Version.from_str("1.0.0") ) assert sut is not None + assert sut.specialized_builds[BuildType.C4K] is not None + + sut = DevopsFactory().build_devops( + { + "stage": "test", + "name": "mybuild", + "module": "test_image", + "project_root_path": "../../..", + "build_types": ["DIGITALOCEAN_TERRAFORM"], + "mixin_types": [], + "do_api_key": "api_key", + "do_spaces_access_id": "spaces_id", + "do_spaces_secret_key": "spaces_secret", + }, + Version.from_str("1.0.0") + ) + assert sut is not None + assert sut.specialized_builds[BuildType.DIGITALOCEAN_TERRAFORM] is not None sut = DevopsFactory().build_devops( { @@ -61,3 +80,4 @@ def test_devops_factory(): Version.from_str("1.0.0") ) assert sut is not None + assert sut.mixins[MixinType.RELEASE] is not None diff --git a/src/test/python/domain/test_digitalocean_terraform.py b/src/test/python/domain/test_digitalocean_terraform.py new file mode 100644 index 0000000..2e3bb32 --- /dev/null +++ b/src/test/python/domain/test_digitalocean_terraform.py @@ -0,0 +1,15 @@ +from pybuilder.core import Project +from pathlib import Path +from src.main.python.ddadevops.domain import ( + BuildType, + DigitaloceanTerraform, +) +from .helper import devops_config + + +def test_digitalocean_terraform(): + sut = DigitaloceanTerraform(devops_config({'do_api_key': 'api_key', + 'do_spaces_access_id': 'spaces_id', + 'do_spaces_secret_key': 'spaces_secret'})) + assert sut is not None + assert sut.is_valid()