87 lines
2.9 KiB
Python
87 lines
2.9 KiB
Python
from typing import List
|
|
from .python_util import filter_none
|
|
|
|
|
|
class Validateable:
|
|
def __validate_is_not_empty__(self, field_name: str) -> List[str]:
|
|
value = self.__dict__[field_name]
|
|
if value is None or value == "":
|
|
return [f"Field '{field_name}' may not be empty."]
|
|
else:
|
|
return []
|
|
|
|
def validate(self) -> List[str]:
|
|
return []
|
|
|
|
def is_valid(self) -> bool:
|
|
return len(self.validate()) < 1
|
|
|
|
|
|
class Build(Validateable):
|
|
def __init__(self, project, config):
|
|
self.stage = config["stage"]
|
|
self.project_root_path = config["project_root_path"]
|
|
self.module = config["module"]
|
|
self.build_dir_name = config["build_dir_name"]
|
|
self.stack = {}
|
|
self.project = project
|
|
|
|
def name(self):
|
|
return self.project.name
|
|
|
|
def build_path(self):
|
|
path = [self.project_root_path, self.build_dir_name, self.name(), self.module]
|
|
return "/".join(filter_none(path))
|
|
|
|
# TODO: these functions should be located at TerraformBuild later on.
|
|
def update_runtime_config(self, fqdn, ipv4, ipv6):
|
|
self.__put__('fqdn', fqdn)
|
|
self.__put__('ipv4', ipv4)
|
|
self.__put__('ipv6', ipv6)
|
|
|
|
def __put__(self, key, value):
|
|
self.stack[key] = value
|
|
|
|
def __get__(self, key):
|
|
return self.stack[key]
|
|
|
|
def __get_keys__(self, keys):
|
|
result = {}
|
|
for key in keys:
|
|
result[key] = self.__get__(key)
|
|
return result
|
|
|
|
|
|
class DockerBuild(Validateable):
|
|
def __init__(self, project, config):
|
|
project.build_depends_on("dda-python-terraform")
|
|
self.build = Build(project, config)
|
|
self.dockerhub_user = config["dockerhub_user"]
|
|
self.dockerhub_password = config["dockerhub_password"]
|
|
self.use_package_common_files = config["use_package_common_files"]
|
|
self.build_commons_path = config["build_commons_path"]
|
|
self.docker_build_commons_dir_name = config["docker_build_commons_dir_name"]
|
|
self.docker_publish_tag = config["docker_publish_tag"]
|
|
|
|
def docker_build_commons_path(self):
|
|
list = [self.build_commons_path, self.docker_build_commons_dir_name]
|
|
return "/".join(filter_none(list)) + "/"
|
|
|
|
|
|
class C4kBuild(Validateable):
|
|
def __init__(self, build: Build, project, config):
|
|
self.build = build
|
|
self.c4k_mixin_config = config["C4kMixin"]["Config"]
|
|
self.c4k_mixin_auth = config["C4kMixin"]["Auth"]
|
|
tmp = self.c4k_mixin_config["mon-cfg"]
|
|
tmp.update({"cluster-name": self.build.module, "cluster-stage": self.build.stage})
|
|
self.c4k_mixin_config.update({"mon-cfg": tmp})
|
|
|
|
def update_runtime_config(self, fqdn, ipv4, ipv6):
|
|
self.build.update_runtime_config(fqdn, ipv4, ipv6)
|
|
|
|
def config(self):
|
|
fqdn = self.build.__get__('fqdn')
|
|
self.c4k_mixin_config.update({'fqdn': fqdn})
|
|
return self.c4k_mixin_config
|
|
|