Repository navigation
Expand file tree
/
Copy pathhelm.py
More file actions
89 lines (80 loc) · 3.04 KB
/
Copy pathhelm.py
File metadata and controls
89 lines (80 loc) · 3.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import logging
import shutil
from pathlib import Path
from ch_cli_tools.utils import write_values_overrides # type: ignore
from .model import CHAppInstance, CHValues, register_file
from .utils import ( # type: ignore
_merge_base_chain,
collect_and_merge_env_specific_files,
dict_merge,
)
logger = logging.getLogger(__name__)
@register_file(
"helm_chart",
lambda root: root / "deployment-configuration" / "helm" / "Chart.yaml",
)
class CHHelmChart(CHValues):
def overrides(self) -> dict:
config = self.project.config
metadata = {}
if config.chart_name:
metadata["name"] = config.chart_name
if config.namespace:
metadata["metadata"] = {"namespace": config.namespace}
if config.chart_version:
metadata["version"] = config.chart_version
if config.app_version:
metadata["appVersion"] = config.app_version
return metadata
def write(self, output_path=None) -> None:
overrides = self.overrides()
if not overrides:
return
chart = dict_merge(self.merge_with_base_and_envs(), overrides)
super().write(chart, output_path=output_path)
def generate(self) -> None:
project = self.project
dest = Path(project.config.output_path) / "helm"
shutil.rmtree(dest, ignore_errors=True)
_merge_base_chain(
project, lambda p: p.root / "deployment-configuration" / "helm", dest
)
self.write(dest)
for app in project.involved_apps:
if isinstance(app, str):
continue
if isinstance(app, CHAppInstance):
self._collect_instance_deploy_directories(app, dest)
continue
_merge_base_chain(
app,
lambda a: a.path / "deploy" / "templates",
dest / "templates" / app.name,
)
_merge_base_chain(
app,
lambda a: a.path / "deploy" / "resources",
dest / "resources" / app.name,
)
_merge_base_chain(
app, lambda a: a.path / "deploy" / "charts", dest / "charts" / app.name
)
collect_and_merge_env_specific_files(dest, project.config.envs)
values = project.build_final_helm_values(write_on_disk=False).to_dict()
write_values_overrides(values, dest)
logger.info("Wrote %s", dest / "values-overrides.yaml")
def _collect_instance_deploy_directories(
self, instance: CHAppInstance, dest: Path
) -> None:
parent, own = instance.parent_app, instance.instance_name
for kind in ("templates", "resources", "charts"):
_merge_base_chain(
parent,
lambda a, kind=kind: a.path / "deploy" / kind,
dest / kind / instance.name,
)
_merge_base_chain(
parent,
lambda a, kind=kind: a.path / "deploy" / "instances" / own / kind,
dest / kind / instance.name,
)