bring credentials-mapping-defaults closer to the domain
This commit is contained in:
parent
cb17b39433
commit
70a671a06d
8 changed files with 79 additions and 104 deletions
|
@ -1,4 +1,4 @@
|
||||||
from .common import Validateable, DnsRecord, Devops, BuildType, MixinType, ReleaseType, ProviderType
|
from .common import Validateable, CredentialMappingDefault, DnsRecord, Devops, BuildType, MixinType, ReleaseType, ProviderType
|
||||||
from .devops_factory import DevopsFactory
|
from .devops_factory import DevopsFactory
|
||||||
from .image import Image
|
from .image import Image
|
||||||
from .c4k import C4k
|
from .c4k import C4k
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
from .common import (
|
from .common import (
|
||||||
Validateable,
|
Validateable,
|
||||||
|
CredentialMappingDefault,
|
||||||
DnsRecord,
|
DnsRecord,
|
||||||
Devops,
|
Devops,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class C4k(Validateable):
|
class C4k(Validateable, CredentialMappingDefault):
|
||||||
def __init__(self, inp: dict):
|
def __init__(self, inp: dict):
|
||||||
self.module = inp.get("module")
|
self.module = inp.get("module")
|
||||||
self.stage = inp.get("stage")
|
self.stage = inp.get("stage")
|
||||||
|
@ -17,8 +18,8 @@ class C4k(Validateable):
|
||||||
"https://prometheus-prod-01-eu-west-0.grafana.net/api/prom/push",
|
"https://prometheus-prod-01-eu-west-0.grafana.net/api/prom/push",
|
||||||
)
|
)
|
||||||
self.c4k_auth = inp.get("c4k_auth", {})
|
self.c4k_auth = inp.get("c4k_auth", {})
|
||||||
self.c4k_grafana_cloud_user = inp.get('c4k_grafana_cloud_user')
|
self.c4k_grafana_cloud_user = inp.get("c4k_grafana_cloud_user")
|
||||||
self.c4k_grafana_cloud_password = inp.get('c4k_grafana_cloud_password')
|
self.c4k_grafana_cloud_password = inp.get("c4k_grafana_cloud_password")
|
||||||
self.dns_record: Optional[DnsRecord] = None
|
self.dns_record: Optional[DnsRecord] = None
|
||||||
|
|
||||||
def update_runtime_config(self, dns_record: DnsRecord):
|
def update_runtime_config(self, dns_record: DnsRecord):
|
||||||
|
@ -63,3 +64,17 @@ class C4k(Validateable):
|
||||||
auth_path = f"{build_path}/out_c4k_auth.yaml"
|
auth_path = f"{build_path}/out_c4k_auth.yaml"
|
||||||
output_path = f"{build_path}/out_{module}.yaml"
|
output_path = f"{build_path}/out_{module}.yaml"
|
||||||
return f"c4k-{self.c4k_executable_name}-standalone.jar {config_path} {auth_path} > {output_path}"
|
return f"c4k-{self.c4k_executable_name}-standalone.jar {config_path} {auth_path} > {output_path}"
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_mapping_default(cls) -> List[map]:
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
"gopass_path": "server/meissa/grafana-cloud",
|
||||||
|
"gopass_field": "grafana-cloud-user",
|
||||||
|
"name": "c4k_grafana_cloud_user",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"gopass_path": "server/meissa/grafana-cloud",
|
||||||
|
"name": "c4k_grafana_cloud_password",
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
|
@ -57,6 +57,11 @@ class Validateable:
|
||||||
raise ValueError(f"Invalid Validateable: {issues}")
|
raise ValueError(f"Invalid Validateable: {issues}")
|
||||||
|
|
||||||
|
|
||||||
|
class CredentialMappingDefault:
|
||||||
|
@classmethod
|
||||||
|
def get_mapping_default(cls) -> List[map]:
|
||||||
|
return []
|
||||||
|
|
||||||
class DnsRecord(Validateable):
|
class DnsRecord(Validateable):
|
||||||
def __init__(self, fqdn, ipv4=None, ipv6=None):
|
def __init__(self, fqdn, ipv4=None, ipv6=None):
|
||||||
self.fqdn = fqdn
|
self.fqdn = fqdn
|
||||||
|
|
|
@ -36,3 +36,17 @@ class Image(Validateable):
|
||||||
self.image_build_commons_dir_name,
|
self.image_build_commons_dir_name,
|
||||||
]
|
]
|
||||||
return "/".join(filter_none(commons_path)) + "/"
|
return "/".join(filter_none(commons_path)) + "/"
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_mapping_default(cls) -> List[map]:
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
"gopass_path": "meissa/web/docker.com",
|
||||||
|
"gopass_field": "login",
|
||||||
|
"name": "image_dockerhub_user",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"gopass_path": "meissa/web/docker.com",
|
||||||
|
"name": "image_dockerhub_password",
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
|
@ -1,8 +1,12 @@
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
from .common import Devops, MixinType, BuildType
|
from .common import Devops, MixinType, BuildType, ProviderType
|
||||||
from .credentials import CredentialMapping, Credentials, GopassType
|
from .credentials import CredentialMapping, Credentials, GopassType
|
||||||
from .devops_factory import DevopsFactory
|
from .devops_factory import DevopsFactory
|
||||||
|
from .terraform import TerraformDomain
|
||||||
|
from .provider_digitalocean import Digitalocean
|
||||||
|
from .c4k import C4k
|
||||||
|
from .image import Image
|
||||||
from .release import ReleaseType
|
from .release import ReleaseType
|
||||||
from ..infrastructure import BuildFileRepository, CredentialsApi, EnvironmentApi, GitApi
|
from ..infrastructure import BuildFileRepository, CredentialsApi, EnvironmentApi, GitApi
|
||||||
|
|
||||||
|
@ -35,47 +39,20 @@ class InitService:
|
||||||
def initialize(self, inp: dict) -> Devops:
|
def initialize(self, inp: dict) -> Devops:
|
||||||
build_types = self.devops_factory.__parse_build_types__(inp["build_types"])
|
build_types = self.devops_factory.__parse_build_types__(inp["build_types"])
|
||||||
mixin_types = self.devops_factory.__parse_mixin_types__(inp["mixin_types"])
|
mixin_types = self.devops_factory.__parse_mixin_types__(inp["mixin_types"])
|
||||||
|
provider_types = TerraformDomain.parse_provider_types(inp["tf_provider_types"])
|
||||||
|
|
||||||
version = None
|
version = None
|
||||||
default_mappings = []
|
default_mappings = []
|
||||||
|
|
||||||
if BuildType.C4K in build_types:
|
if BuildType.C4K in build_types:
|
||||||
default_mappings += [
|
default_mappings += C4k.get_mapping_default()
|
||||||
{
|
|
||||||
"gopass_path": "server/meissa/grafana-cloud",
|
|
||||||
"gopass_field": "grafana-cloud-user",
|
|
||||||
"name": "c4k_grafana_cloud_user",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"gopass_path": "server/meissa/grafana-cloud",
|
|
||||||
"name": "c4k_grafana_cloud_password",
|
|
||||||
},
|
|
||||||
]
|
|
||||||
if BuildType.IMAGE in build_types:
|
if BuildType.IMAGE in build_types:
|
||||||
default_mappings += [
|
default_mappings += Image.get_mapping_default()
|
||||||
{
|
if (
|
||||||
"gopass_path": "meissa/web/docker.com",
|
BuildType.TERRAFORM in build_types
|
||||||
"gopass_field": "login",
|
and ProviderType.DIGITALOCEAN in provider_types
|
||||||
"name": "image_dockerhub_user",
|
):
|
||||||
},
|
default_mappings += Digitalocean.get_mapping_default()
|
||||||
{
|
|
||||||
"gopass_path": "meissa/web/docker.com",
|
|
||||||
"name": "image_dockerhub_password",
|
|
||||||
},
|
|
||||||
]
|
|
||||||
if False:
|
|
||||||
default_mappings += [
|
|
||||||
{
|
|
||||||
"gopass_path": "server/devops/digitalocean/s3",
|
|
||||||
"gopass_field": "id",
|
|
||||||
"name": "do_spaces_access_id",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"gopass_path": "server/devops/digitalocean/s3",
|
|
||||||
"gopass_field": "secret",
|
|
||||||
"name": "do_spaces_secret_key",
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
||||||
if MixinType.RELEASE in mixin_types:
|
if MixinType.RELEASE in mixin_types:
|
||||||
primary_build_file_id = inp.get(
|
primary_build_file_id = inp.get(
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
from typing import List
|
from typing import List
|
||||||
from .common import (
|
from .common import Validateable, CredentialMappingDefault
|
||||||
Validateable,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class Digitalocean(Validateable):
|
class Digitalocean(Validateable, CredentialMappingDefault):
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
inp: dict,
|
inp: dict,
|
||||||
|
@ -24,6 +22,23 @@ class Digitalocean(Validateable):
|
||||||
return ["provider_registry.tf", "do_provider.tf", "do_mixin_vars.tf"]
|
return ["provider_registry.tf", "do_provider.tf", "do_mixin_vars.tf"]
|
||||||
|
|
||||||
def project_vars(self):
|
def project_vars(self):
|
||||||
return {"do_api_key": self.do_api_key,
|
return {
|
||||||
"do_spaces_access_id": self.do_spaces_access_id,
|
"do_api_key": self.do_api_key,
|
||||||
"do_spaces_secret_key": self.do_spaces_secret_key,}
|
"do_spaces_access_id": self.do_spaces_access_id,
|
||||||
|
"do_spaces_secret_key": self.do_spaces_secret_key,
|
||||||
|
}
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_mapping_default(cls) -> List[map]:
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
"gopass_path": "server/devops/digitalocean/s3",
|
||||||
|
"gopass_field": "id",
|
||||||
|
"name": "do_spaces_access_id",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"gopass_path": "server/devops/digitalocean/s3",
|
||||||
|
"gopass_field": "secret",
|
||||||
|
"name": "do_spaces_secret_key",
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
|
@ -34,7 +34,7 @@ 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)
|
provider_types = TerraformDomain.parse_provider_types(self.tf_provider_types)
|
||||||
self.providers = {}
|
self.providers = {}
|
||||||
if ProviderType.DIGITALOCEAN in provider_types:
|
if ProviderType.DIGITALOCEAN in provider_types:
|
||||||
self.providers[ProviderType.DIGITALOCEAN] = Digitalocean(inp)
|
self.providers[ProviderType.DIGITALOCEAN] = Digitalocean(inp)
|
||||||
|
@ -76,8 +76,9 @@ class TerraformDomain(Validateable):
|
||||||
result += self.tf_additional_resources_from_package
|
result += self.tf_additional_resources_from_package
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def __parse_provider_types__(
|
@classmethod
|
||||||
self, tf_provider_types: List[str]
|
def parse_provider_types(
|
||||||
|
cls, tf_provider_types: List[str]
|
||||||
) -> List[ProviderType]:
|
) -> List[ProviderType]:
|
||||||
result = []
|
result = []
|
||||||
for provider_type in tf_provider_types:
|
for provider_type in tf_provider_types:
|
||||||
|
|
|
@ -8,9 +8,10 @@ from src.main.python.ddadevops.domain import Devops, Release
|
||||||
from .domain.helper import devops_config
|
from .domain.helper import devops_config
|
||||||
from .resource_helper import copy_resource
|
from .resource_helper import copy_resource
|
||||||
|
|
||||||
|
|
||||||
def test_release_mixin(tmp_path):
|
def test_release_mixin(tmp_path):
|
||||||
str_tmp_path = str(tmp_path)
|
str_tmp_path = str(tmp_path)
|
||||||
copy_resource(Path('package.json'), tmp_path)
|
copy_resource(Path("package.json"), tmp_path)
|
||||||
project = Project(str_tmp_path, name="name")
|
project = Project(str_tmp_path, name="name")
|
||||||
|
|
||||||
sut = ReleaseMixin(
|
sut = ReleaseMixin(
|
||||||
|
@ -27,56 +28,3 @@ def test_release_mixin(tmp_path):
|
||||||
|
|
||||||
sut.initialize_build_dir()
|
sut.initialize_build_dir()
|
||||||
assert sut.build_path() == f"{str_tmp_path}/target/name/release-test"
|
assert sut.build_path() == f"{str_tmp_path}/target/name/release-test"
|
||||||
|
|
||||||
|
|
||||||
# def test_release_mixin_git(tmp_path: Path, monkeypatch: pt.MonkeyPatch):
|
|
||||||
# # init
|
|
||||||
# th = ResourceHelper()
|
|
||||||
# th.copy_files(th.TEST_FILE_PATH, tmp_path)
|
|
||||||
# th.TEST_FILE_PATH = tmp_path / th.TEST_FILE_NAME
|
|
||||||
|
|
||||||
# change_test_dir(tmp_path, monkeypatch)
|
|
||||||
# project = Project(tmp_path)
|
|
||||||
|
|
||||||
# git_api = GitApi()
|
|
||||||
# git_api.init()
|
|
||||||
# git_api.set_user_config("ex.ample@mail.com", "Ex Ample")
|
|
||||||
# git_api.add_file(th.TEST_FILE_NAME)
|
|
||||||
# git_api.commit("MAJOR release")
|
|
||||||
|
|
||||||
# build = initialize_with_object(project, th.TEST_FILE_PATH)
|
|
||||||
# build.prepare_release()
|
|
||||||
# release_version = build.release_repo.version_repository.get_version()
|
|
||||||
|
|
||||||
# # test
|
|
||||||
# assert "124.0.1-SNAPSHOT" in release_version.get_version_string()
|
|
||||||
|
|
||||||
|
|
||||||
# def test_release_mixin_environment(tmp_path: Path, monkeypatch: pt.MonkeyPatch):
|
|
||||||
|
|
||||||
# # init
|
|
||||||
# th = Helper()
|
|
||||||
# th.copy_files(th.TEST_FILE_PATH, tmp_path)
|
|
||||||
# th.TEST_FILE_PATH = tmp_path / th.TEST_FILE_NAME
|
|
||||||
|
|
||||||
# change_test_dir(tmp_path, monkeypatch)
|
|
||||||
# project = Project(tmp_path)
|
|
||||||
|
|
||||||
# git_api = GitApi()
|
|
||||||
# git_api.init()
|
|
||||||
# git_api.set_user_config("ex.ample@mail.com", "Ex Ample")
|
|
||||||
# git_api.add_file(th.TEST_FILE_NAME)
|
|
||||||
# git_api.commit("Commit Message")
|
|
||||||
|
|
||||||
# environment_api = EnvironmentApi()
|
|
||||||
# environment_api.set("DDADEVOPS_RELEASE_TYPE", "MAJOR")
|
|
||||||
|
|
||||||
# build = initialize_with_object(project, th.TEST_FILE_PATH)
|
|
||||||
# build.prepare_release()
|
|
||||||
# release_version = build.release_repo.version_repository.get_version()
|
|
||||||
|
|
||||||
# # test
|
|
||||||
# assert "124.0.1-SNAPSHOT" in release_version.get_version_string()
|
|
||||||
|
|
||||||
# # tear down
|
|
||||||
# environment_api.set("DDADEVOPS_RELEASE_TYPE", "")
|
|
||||||
|
|
Loading…
Reference in a new issue