|
|
@ -2,10 +2,12 @@ from typing import List, Optional
|
|
|
|
from pathlib import Path
|
|
|
|
from pathlib import Path
|
|
|
|
from .common import (
|
|
|
|
from .common import (
|
|
|
|
Validateable,
|
|
|
|
Validateable,
|
|
|
|
|
|
|
|
ProviderType,
|
|
|
|
DnsRecord,
|
|
|
|
DnsRecord,
|
|
|
|
Devops,
|
|
|
|
Devops,
|
|
|
|
filter_none,
|
|
|
|
filter_none,
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
from .provider_digitalocean import Digitalocean
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TerraformDomain(Validateable):
|
|
|
|
class TerraformDomain(Validateable):
|
|
|
@ -15,6 +17,7 @@ class TerraformDomain(Validateable):
|
|
|
|
self.tf_additional_vars = inp.get("tf_additional_vars")
|
|
|
|
self.tf_additional_vars = inp.get("tf_additional_vars")
|
|
|
|
self.tf_output_json_name = inp.get("tf_output_json_name")
|
|
|
|
self.tf_output_json_name = inp.get("tf_output_json_name")
|
|
|
|
self.tf_build_commons_path = inp.get("tf_build_commons_path")
|
|
|
|
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(
|
|
|
|
self.tf_additional_resources_from_package = inp.get(
|
|
|
|
"tf_additional_resources_from_package", []
|
|
|
|
"tf_additional_resources_from_package", []
|
|
|
|
)
|
|
|
|
)
|
|
|
@ -31,6 +34,11 @@ class TerraformDomain(Validateable):
|
|
|
|
)
|
|
|
|
)
|
|
|
|
self.tf_use_package_common_files = inp.get("tf_use_package_common_files", True)
|
|
|
|
self.tf_use_package_common_files = inp.get("tf_use_package_common_files", True)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
provider_types = self.__parse_provider_types__(self.tf_provider_types)
|
|
|
|
|
|
|
|
self.providers = {}
|
|
|
|
|
|
|
|
if ProviderType.DIGITALOCEAN in provider_types:
|
|
|
|
|
|
|
|
self.providers[ProviderType.DIGITALOCEAN] = Digitalocean(inp)
|
|
|
|
|
|
|
|
|
|
|
|
def validate(self) -> List[str]:
|
|
|
|
def validate(self) -> List[str]:
|
|
|
|
result = []
|
|
|
|
result = []
|
|
|
|
result += self.__validate_is_not_empty__("module")
|
|
|
|
result += self.__validate_is_not_empty__("module")
|
|
|
@ -38,6 +46,9 @@ class TerraformDomain(Validateable):
|
|
|
|
result += self.__validate_is_not_empty__("tf_build_commons_dir_name")
|
|
|
|
result += self.__validate_is_not_empty__("tf_build_commons_dir_name")
|
|
|
|
result += self.__validate_is_not_none__("tf_additional_resources_from_package")
|
|
|
|
result += self.__validate_is_not_none__("tf_additional_resources_from_package")
|
|
|
|
result += self.__validate_is_not_none__("tf_additional_tfvar_files")
|
|
|
|
result += self.__validate_is_not_none__("tf_additional_tfvar_files")
|
|
|
|
|
|
|
|
result += self.__validate_is_not_none__("tf_provider_types")
|
|
|
|
|
|
|
|
for provider in self.providers.values():
|
|
|
|
|
|
|
|
result += provider.validate()
|
|
|
|
return result
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
def output_json_name(self) -> str:
|
|
|
|
def output_json_name(self) -> str:
|
|
|
@ -51,12 +62,24 @@ class TerraformDomain(Validateable):
|
|
|
|
return Path("/".join(filter_none(mylist)) + "/")
|
|
|
|
return Path("/".join(filter_none(mylist)) + "/")
|
|
|
|
|
|
|
|
|
|
|
|
def project_vars(self):
|
|
|
|
def project_vars(self):
|
|
|
|
ret = {"stage": self.stage, "module": self.module}
|
|
|
|
result = {"stage": self.stage, "module": self.module}
|
|
|
|
|
|
|
|
for provider in self.providers.values():
|
|
|
|
|
|
|
|
result.update(provider.project_vars())
|
|
|
|
if self.tf_additional_vars:
|
|
|
|
if self.tf_additional_vars:
|
|
|
|
ret.update(self.tf_additional_vars)
|
|
|
|
result.update(self.tf_additional_vars)
|
|
|
|
return ret
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
def resources_from_package(self) -> List[str]:
|
|
|
|
def resources_from_package(self) -> List[str]:
|
|
|
|
result = ["version.tf", "terraform_build_vars.tf"]
|
|
|
|
result = ["version.tf", "terraform_build_vars.tf"]
|
|
|
|
|
|
|
|
for provider in self.providers.values():
|
|
|
|
|
|
|
|
result += provider.resources_from_package()
|
|
|
|
result += self.tf_additional_resources_from_package
|
|
|
|
result += self.tf_additional_resources_from_package
|
|
|
|
return result
|
|
|
|
return result
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def __parse_provider_types__(
|
|
|
|
|
|
|
|
self, tf_provider_types: List[str]
|
|
|
|
|
|
|
|
) -> List[ProviderType]:
|
|
|
|
|
|
|
|
result = []
|
|
|
|
|
|
|
|
for provider_type in tf_provider_types:
|
|
|
|
|
|
|
|
result.append(ProviderType[provider_type])
|
|
|
|
|
|
|
|
return result
|
|
|
|