handle backends in init_client
This commit is contained in:
parent
f399d1e637
commit
4a2fa628f1
5 changed files with 46 additions and 36 deletions
|
@ -2,7 +2,7 @@ from pathlib import Path
|
||||||
from dda_python_terraform import Terraform, IsFlagged
|
from dda_python_terraform import Terraform, IsFlagged
|
||||||
from packaging import version
|
from packaging import version
|
||||||
|
|
||||||
from ..domain import Devops, BuildType
|
from ..domain import Devops, TerraformDomain, BuildType
|
||||||
from ..infrastructure import FileApi, ResourceApi, TerraformApi
|
from ..infrastructure import FileApi, ResourceApi, TerraformApi
|
||||||
|
|
||||||
|
|
||||||
|
@ -58,7 +58,9 @@ class TerraformService:
|
||||||
def rescue_local_state(self, devops: Devops):
|
def rescue_local_state(self, devops: Devops):
|
||||||
terraform_domain = devops.specialized_builds[BuildType.TERRAFORM]
|
terraform_domain = devops.specialized_builds[BuildType.TERRAFORM]
|
||||||
if terraform_domain.is_local_state():
|
if terraform_domain.is_local_state():
|
||||||
self.file_api.cp(f"{devops.build_path()}/terraform.tfstate", ".", check=False)
|
self.file_api.cp(
|
||||||
|
f"{devops.build_path()}/terraform.tfstate", ".", check=False
|
||||||
|
)
|
||||||
|
|
||||||
def initialize_build_dir(self, devops: Devops):
|
def initialize_build_dir(self, devops: Devops):
|
||||||
terraform = devops.specialized_builds[BuildType.TERRAFORM]
|
terraform = devops.specialized_builds[BuildType.TERRAFORM]
|
||||||
|
@ -74,12 +76,17 @@ class TerraformService:
|
||||||
|
|
||||||
# TODO: internal?
|
# TODO: internal?
|
||||||
def init_client(self, devops: Devops):
|
def init_client(self, devops: Devops):
|
||||||
terraform_domain = devops.specialized_builds[BuildType.TERRAFORM]
|
terraform_domain: TerraformDomain = devops.specialized_builds[
|
||||||
|
BuildType.TERRAFORM
|
||||||
|
]
|
||||||
terraform = Terraform(
|
terraform = Terraform(
|
||||||
working_dir=devops.build_path(),
|
working_dir=devops.build_path(),
|
||||||
terraform_semantic_version=terraform_domain.tf_terraform_semantic_version,
|
terraform_semantic_version=terraform_domain.tf_terraform_semantic_version,
|
||||||
)
|
)
|
||||||
terraform.init()
|
if terraform_domain.is_local_state():
|
||||||
|
terraform.init()
|
||||||
|
else:
|
||||||
|
terraform.init(backend_config=terraform_domain.backend_config())
|
||||||
self.__print_terraform_command__(terraform, devops)
|
self.__print_terraform_command__(terraform, devops)
|
||||||
if terraform_domain.tf_use_workspace:
|
if terraform_domain.tf_use_workspace:
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -19,19 +19,3 @@ class DigitaloceanBackendPropertiesMixin():
|
||||||
ret.update({"key": self.key})
|
ret.update({"key": self.key})
|
||||||
ret.update({"region": self.region})
|
ret.update({"region": self.region})
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def init_client(self):
|
|
||||||
terraform = Terraform(
|
|
||||||
working_dir=self.build_path(),
|
|
||||||
terraform_semantic_version=self.terraform_semantic_version,
|
|
||||||
)
|
|
||||||
terraform.init(backend_config=self.backend_config)
|
|
||||||
self.print_terraform_command(terraform)
|
|
||||||
if self.use_workspace:
|
|
||||||
try:
|
|
||||||
terraform.workspace("select", self.stage)
|
|
||||||
self.print_terraform_command(terraform)
|
|
||||||
except:
|
|
||||||
terraform.workspace("new", self.stage)
|
|
||||||
self.print_terraform_command(terraform)
|
|
||||||
return terraform
|
|
||||||
|
|
|
@ -37,7 +37,9 @@ class Digitalocean(Validateable, CredentialMappingDefault):
|
||||||
def resources_from_package(self) -> Set[str]:
|
def resources_from_package(self) -> Set[str]:
|
||||||
result = {"provider_registry.tf", "do_provider.tf", "do_mixin_vars.tf"}
|
result = {"provider_registry.tf", "do_provider.tf", "do_mixin_vars.tf"}
|
||||||
if self.do_as_backend:
|
if self.do_as_backend:
|
||||||
result.update({"do_backend_properties_vars.tf", "do_backend_with_properties.tf"})
|
result.update(
|
||||||
|
{"do_backend_properties_vars.tf", "do_backend_with_properties.tf"}
|
||||||
|
)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def project_vars(self):
|
def project_vars(self):
|
||||||
|
@ -63,7 +65,7 @@ class Digitalocean(Validateable, CredentialMappingDefault):
|
||||||
"region": self.do_region,
|
"region": self.do_region,
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def is_local_state(self):
|
def is_local_state(self):
|
||||||
return not self.do_as_backend
|
return not self.do_as_backend
|
||||||
|
|
||||||
|
|
|
@ -83,10 +83,14 @@ class TerraformDomain(Validateable):
|
||||||
result = result and provider.is_local_state()
|
result = result and provider.is_local_state()
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def backend_config(self) -> map:
|
||||||
|
result = {}
|
||||||
|
for provider in self.providers.values():
|
||||||
|
result.update(provider.backend_config())
|
||||||
|
return result
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def parse_provider_types(
|
def parse_provider_types(cls, tf_provider_types: List[str]) -> List[ProviderType]:
|
||||||
cls, tf_provider_types: List[str]
|
|
||||||
) -> List[ProviderType]:
|
|
||||||
result = []
|
result = []
|
||||||
for provider_type in tf_provider_types:
|
for provider_type in tf_provider_types:
|
||||||
result.append(ProviderType[provider_type])
|
result.append(ProviderType[provider_type])
|
||||||
|
|
|
@ -100,10 +100,14 @@ def test_should_calculate_resources_from_package():
|
||||||
"do_mixin_vars.tf",
|
"do_mixin_vars.tf",
|
||||||
} == sut.resources_from_package()
|
} == sut.resources_from_package()
|
||||||
|
|
||||||
sut = TerraformDomain(devops_config({
|
sut = TerraformDomain(
|
||||||
"tf_provider_types": ["DIGITALOCEAN"],
|
devops_config(
|
||||||
"do_as_backend": True,
|
{
|
||||||
}))
|
"tf_provider_types": ["DIGITALOCEAN"],
|
||||||
|
"do_as_backend": True,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
)
|
||||||
assert {
|
assert {
|
||||||
"versions.tf",
|
"versions.tf",
|
||||||
"terraform_build_vars.tf",
|
"terraform_build_vars.tf",
|
||||||
|
@ -143,14 +147,23 @@ def test_should_calculate_resources_from_package():
|
||||||
"my.file",
|
"my.file",
|
||||||
} == sut.resources_from_package()
|
} == sut.resources_from_package()
|
||||||
|
|
||||||
|
|
||||||
def test_should_calculate_local_state_handling():
|
def test_should_calculate_local_state_handling():
|
||||||
sut = TerraformDomain(devops_config({
|
sut = TerraformDomain(
|
||||||
"tf_provider_types": [],
|
devops_config(
|
||||||
}))
|
{
|
||||||
|
"tf_provider_types": [],
|
||||||
|
}
|
||||||
|
)
|
||||||
|
)
|
||||||
assert sut.is_local_state()
|
assert sut.is_local_state()
|
||||||
|
|
||||||
sut = TerraformDomain(devops_config({
|
sut = TerraformDomain(
|
||||||
"tf_provider_types": ["DIGITALOCEAN"],
|
devops_config(
|
||||||
"do_as_backend": True,
|
{
|
||||||
}))
|
"tf_provider_types": ["DIGITALOCEAN"],
|
||||||
|
"do_as_backend": True,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
)
|
||||||
assert not sut.is_local_state()
|
assert not sut.is_local_state()
|
||||||
|
|
Loading…
Reference in a new issue