From 7ad5468a1175641b0c220f7cf57f0e6896f49bd4 Mon Sep 17 00:00:00 2001 From: bom Date: Fri, 26 May 2023 08:40:41 +0200 Subject: [PATCH] Implement additional resources as sets Avoids duplicates when using multiple providers --- .../ddadevops/domain/provider_digitalocean.py | 6 +++--- .../python/ddadevops/domain/provider_hetzner.py | 6 +++--- src/main/python/ddadevops/domain/terraform.py | 12 ++++++------ src/test/python/domain/test_terraform.py | 16 ++++++++-------- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/main/python/ddadevops/domain/provider_digitalocean.py b/src/main/python/ddadevops/domain/provider_digitalocean.py index aeded28..af1b4e0 100644 --- a/src/main/python/ddadevops/domain/provider_digitalocean.py +++ b/src/main/python/ddadevops/domain/provider_digitalocean.py @@ -1,4 +1,4 @@ -from typing import List, Dict +from typing import List, Dict, Set from .common import Validateable, CredentialMappingDefault @@ -18,8 +18,8 @@ class Digitalocean(Validateable, CredentialMappingDefault): result += self.__validate_is_not_empty__("do_spaces_secret_key") return result - def resources_from_package(self) -> List[str]: - return ["provider_registry.tf", "do_provider.tf", "do_mixin_vars.tf"] + def resources_from_package(self) -> Set[str]: + return {"provider_registry.tf", "do_provider.tf", "do_mixin_vars.tf"} def project_vars(self): return { diff --git a/src/main/python/ddadevops/domain/provider_hetzner.py b/src/main/python/ddadevops/domain/provider_hetzner.py index 636b007..f3f691a 100644 --- a/src/main/python/ddadevops/domain/provider_hetzner.py +++ b/src/main/python/ddadevops/domain/provider_hetzner.py @@ -1,4 +1,4 @@ -from typing import List, Dict +from typing import List, Dict, Set from .common import Validateable, CredentialMappingDefault class Hetzner(Validateable, CredentialMappingDefault): @@ -13,8 +13,8 @@ class Hetzner(Validateable, CredentialMappingDefault): result += self.__validate_is_not_empty__("hetzner_api_key") return result - def resources_from_package(self) -> List[str]: - return ["provider_registry.tf", "hetzner_provider.tf", "hetzner_mixin_vars.tf"] + def resources_from_package(self) -> Set[str]: + return {"provider_registry.tf", "hetzner_provider.tf", "hetzner_mixin_vars.tf"} def project_vars(self): return { diff --git a/src/main/python/ddadevops/domain/terraform.py b/src/main/python/ddadevops/domain/terraform.py index 42304af..a865f3b 100644 --- a/src/main/python/ddadevops/domain/terraform.py +++ b/src/main/python/ddadevops/domain/terraform.py @@ -1,4 +1,4 @@ -from typing import List +from typing import List, Set from pathlib import Path from .common import ( Validateable, @@ -18,7 +18,7 @@ class TerraformDomain(Validateable): self.tf_build_commons_path = inp.get("tf_build_commons_path") self.tf_provider_types = inp.get("tf_provider_types", []) self.tf_additional_resources_from_package = inp.get( - "tf_additional_resources_from_package", [] + "tf_additional_resources_from_package", set() ) self.tf_additional_tfvar_files = inp.get("tf_additional_tfvar_files", []) self.tf_use_workspace = inp.get("tf_use_workspace", True) @@ -70,11 +70,11 @@ class TerraformDomain(Validateable): result.update(self.tf_additional_vars) return result - def resources_from_package(self) -> List[str]: - result = ["versions.tf", "terraform_build_vars.tf"] + def resources_from_package(self) -> Set[str]: + result = {"versions.tf", "terraform_build_vars.tf"} for provider in self.providers.values(): - result += provider.resources_from_package() - result += self.tf_additional_resources_from_package + result = result.union(provider.resources_from_package()) + result = result.union(self.tf_additional_resources_from_package) return result @classmethod diff --git a/src/test/python/domain/test_terraform.py b/src/test/python/domain/test_terraform.py index ac6a377..23af2c7 100644 --- a/src/test/python/domain/test_terraform.py +++ b/src/test/python/domain/test_terraform.py @@ -83,7 +83,7 @@ def test_should_calculate_resources_from_package(): } ) sut = TerraformDomain(config) - assert ["versions.tf", "terraform_build_vars.tf"] == sut.resources_from_package() + assert {"versions.tf", "terraform_build_vars.tf"} == sut.resources_from_package() config = devops_config( { @@ -91,13 +91,13 @@ def test_should_calculate_resources_from_package(): } ) sut = TerraformDomain(config) - assert [ + assert { "versions.tf", "terraform_build_vars.tf", "provider_registry.tf", "do_provider.tf", "do_mixin_vars.tf", - ] == sut.resources_from_package() + } == sut.resources_from_package() config = devops_config( { @@ -105,17 +105,17 @@ def test_should_calculate_resources_from_package(): } ) sut = TerraformDomain(config) - assert [ + assert { "versions.tf", "terraform_build_vars.tf", "provider_registry.tf", "hetzner_provider.tf", "hetzner_mixin_vars.tf", - ] == sut.resources_from_package() + } == sut.resources_from_package() - config = devops_config({"tf_additional_resources_from_package": ["my.file"]}) + config = devops_config({"tf_additional_resources_from_package": {"my.file"}}) sut = TerraformDomain(config) - assert [ + assert { "versions.tf", "terraform_build_vars.tf", "provider_registry.tf", @@ -125,4 +125,4 @@ def test_should_calculate_resources_from_package(): "hetzner_provider.tf", "hetzner_mixin_vars.tf", "my.file", - ] == sut.resources_from_package() + } == sut.resources_from_package()