Skip to content

Commit 4c3cc3b

Browse files
committed
generate.mk: Clean up how the static yamls are generated from Helm
Signed-off-by: Luke Shumaker <[email protected]>
1 parent 7b09165 commit 4c3cc3b

File tree

3 files changed

+33
-54
lines changed

3 files changed

+33
-54
lines changed

build-aux/generate.mk

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -407,22 +407,22 @@ python-setup: create-venv
407407
$(OSS_HOME)/venv/bin/python -m pip install ruamel.yaml
408408
.PHONY: python-setup
409409

410-
define generate_emissary_yaml_from_helm
411-
mkdir -p $(OSS_HOME)/build/yaml/$(1) && \
412-
helm template $(4) -n $(2) \
413-
-f $(OSS_HOME)/k8s-config/$(1)/values.yaml \
414-
$(OSS_HOME)/charts/emissary-ingress > $(OSS_HOME)/build/yaml/$(1)/helm-expanded.yaml
415-
$(OSS_HOME)/venv/bin/python $(OSS_HOME)/k8s-config/create_yaml.py \
416-
$(OSS_HOME)/build/yaml/$(1)/helm-expanded.yaml $(OSS_HOME)/k8s-config/$(1)/require.yaml > $(3)
417-
endef
418-
419-
$(OSS_HOME)/manifests/emissary/emissary-ingress.yaml: $(OSS_HOME)/k8s-config/create_yaml.py $(OSS_HOME)/k8s-config/emissary-ingress/require.yaml $(OSS_HOME)/k8s-config/emissary-ingress/values.yaml $(OSS_HOME)/charts/emissary-ingress/templates/*.yaml $(OSS_HOME)/charts/emissary-ingress/values.yaml python-setup
420-
@printf ' $(CYN)$@$(END)\n'
421-
$(call generate_emissary_yaml_from_helm,emissary-ingress,emissary,$@,emissary-ingress)
422-
423-
$(OSS_HOME)/manifests/emissary/ambassador.yaml: $(OSS_HOME)/k8s-config/create_yaml.py $(OSS_HOME)/k8s-config/ambassador/require.yaml $(OSS_HOME)/k8s-config/ambassador/values.yaml $(OSS_HOME)/charts/emissary-ingress/templates/*.yaml $(OSS_HOME)/charts/emissary-ingress/values.yaml python-setup
424-
@printf ' $(CYN)$@$(END)\n'
425-
$(call generate_emissary_yaml_from_helm,ambassador,default,$@,ambassador)
410+
helm-namespace.emissary-ingress = emissary
411+
helm-namespace.ambassador = default
412+
$(OSS_HOME)/k8s-config/%/helm-expanded.yaml: \
413+
$(OSS_HOME)/k8s-config/%/values.yaml \
414+
$(OSS_HOME)/charts/emissary-ingress/templates $(wildcard $(OSS_HOME)/charts/emissary-ingress/templates/*.yaml) \
415+
$(OSS_HOME)/charts/emissary-ingress/values.yaml \
416+
FORCE
417+
helm template --namespace=$(helm-namespace.$*) --values=$(@D)/values.yaml $* $(OSS_HOME)/charts/emissary-ingress >$@
418+
$(OSS_HOME)/k8s-config/%/output.yaml: \
419+
$(OSS_HOME)/k8s-config/%/helm-expanded.yaml \
420+
$(OSS_HOME)/k8s-config/%/require.yaml \
421+
$(OSS_HOME)/k8s-config/create_yaml.py \
422+
python-setup
423+
. $(OSS_HOME)/venv/bin/activate && $(filter %.py,$^) $(filter %/helm-expanded.yaml,$^) $(filter %/require.yaml,$^) >$@
424+
$(OSS_HOME)/manifests/emissary/%.yaml: $(OSS_HOME)/k8s-config/%/output.yaml
425+
cp $< $@
426426

427427
#
428428
# Generate report on dependencies

k8s-config/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
helm-expanded.yaml
2+
output.yaml

k8s-config/create_yaml.py

100644100755
Lines changed: 15 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#!/usr/bin/env python
2+
13
# This script is to help generate any flat yaml files from the ambassador helm chart.
24
#
35
# This script takes two arguments:
@@ -29,52 +31,27 @@ def get_requirement_key(req):
2931
return '{}.{}.{}'.format(req['kind'], req['name'], ns)
3032

3133

32-
# ensure that the yaml docs are sorted in the same way as in the requirements.
33-
# order actually matters here. for example, we need the namespace show up before any
34-
# namespaced resources.
35-
# Also this ensures that all the "required" resources make it into the final yaml
36-
def same_sort(requirements, yaml_docs):
37-
sorted_resources = []
38-
for req in requirements.get('resources'):
39-
req_key = get_requirement_key(req)
40-
if req_key not in yaml_docs:
41-
raise Exception('Resource %s not found in generated yaml' % req_key)
42-
sorted_resources.append(yaml_docs[req_key])
43-
return sorted_resources
44-
45-
46-
class RequirementChecker():
47-
48-
def __init__(self, requirements):
49-
self.requirements = {}
50-
for req in requirements:
51-
key = get_requirement_key(req)
52-
self.requirements[key] = True
53-
54-
55-
def is_required(self, resource):
56-
key = get_resource_key(resource)
57-
return key in self.requirements
58-
59-
6034
def main(templated_helm_file, require_file):
6135
yaml = ruamel.yaml.YAML()
6236
yaml.indent(mapping=2)
6337
with open(templated_helm_file, 'r') as f:
64-
templated_helm = yaml.load_all(f.read())
38+
templated_helm = {}
39+
for yaml_doc in yaml.load_all(f.read()):
40+
if yaml_doc is None:
41+
continue
42+
templated_helm[get_resource_key(yaml_doc)] = yaml_doc
6543
with open(require_file, 'r') as f:
6644
requirements = yaml.load(f.read())
67-
checker = RequirementChecker(requirements.get('resources'))
6845

69-
new_doc = {}
70-
for yaml_doc in templated_helm:
71-
if yaml_doc is None:
72-
continue
73-
if checker.is_required(yaml_doc):
74-
new_doc[get_resource_key(yaml_doc)] = yaml_doc
7546
print('# GENERATED FILE: edits made by hand will not be preserved.')
76-
print('---')
77-
yaml.dump_all(same_sort(requirements, new_doc), sys.stdout)
47+
# Print out required resources in the order they appear in require_file. Order actually matters
48+
# here, for example, we need the namespace show up before any namespaced resources.
49+
for requirement in requirements.get('resources'):
50+
print('---')
51+
key = get_requirement_key(requirement)
52+
if key not in templated_helm:
53+
raise Exception(f'Resource {key} not found in generated yaml (known resources are: {templated_helm.keys()})')
54+
yaml.dump(templated_helm[key], sys.stdout)
7855

7956

8057
if __name__ == '__main__':

0 commit comments

Comments
 (0)