Skip to content

Commit fee02d1

Browse files
committed
Templating scope for generated results
This adds the generated data to a .element scope in the templates to make it easier to add additional data without overwriting the changes.
1 parent 183aabc commit fee02d1

File tree

4 files changed

+25
-21
lines changed

4 files changed

+25
-21
lines changed

controllers/gitopsset_controller_test.go

+11-11
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,13 @@ func TestReconciliation(t *testing.T) {
105105
{
106106
Content: runtime.RawExtension{
107107
Raw: mustMarshalJSON(t, makeTestKustomization(nsn("unused", "unused"), func(ks *kustomizev1.Kustomization) {
108-
ks.Name = "{{.cluster}}-demo"
108+
ks.Name = "{{ .element.cluster }}-demo"
109109
ks.Annotations = map[string]string{
110-
"testing.cluster": "{{.cluster}}",
110+
"testing.cluster": "{{ .element.cluster }}",
111111
"testing": "newVersion",
112112
}
113-
ks.Spec.Path = "./templated/clusters/{{ .cluster }}/"
114-
ks.Spec.KubeConfig = &meta.KubeConfigReference{SecretRef: meta.SecretKeyReference{Name: "{{ .cluster }}"}}
113+
ks.Spec.Path = "./templated/clusters/{{ .element.cluster }}/"
114+
ks.Spec.KubeConfig = &meta.KubeConfigReference{SecretRef: meta.SecretKeyReference{Name: "{{ .element.cluster }}"}}
115115
ks.Spec.Force = true
116116
})),
117117
},
@@ -195,13 +195,13 @@ func TestReconciliation(t *testing.T) {
195195
{
196196
Content: runtime.RawExtension{
197197
Raw: mustMarshalJSON(t, makeTestKustomization(nsn("unused", "unused"), func(ks *kustomizev1.Kustomization) {
198-
ks.Name = "{{.cluster}}-demo"
198+
ks.Name = "{{ .element.cluster }}-demo"
199199
ks.Annotations = map[string]string{
200-
"testing.cluster": "{{.cluster}}",
200+
"testing.cluster": "{{ .element.cluster }}",
201201
"testing": "newVersion",
202202
}
203-
ks.Spec.Path = "./templated/clusters/{{ .cluster }}/"
204-
ks.Spec.KubeConfig = &meta.KubeConfigReference{SecretRef: meta.SecretKeyReference{Name: "{{ .cluster }}"}}
203+
ks.Spec.Path = "./templated/clusters/{{ .element.cluster }}/"
204+
ks.Spec.KubeConfig = &meta.KubeConfigReference{SecretRef: meta.SecretKeyReference{Name: "{{ .element.cluster }}"}}
205205
ks.Spec.Force = true
206206
})),
207207
},
@@ -367,18 +367,18 @@ func makeTestGitOpsSet(t *testing.T, opts ...func(*templatesv1.GitOpsSet)) *temp
367367
Templates: []templatesv1.GitOpsSetTemplate{
368368
{
369369
Content: runtime.RawExtension{
370-
Raw: mustMarshalJSON(t, makeTestKustomization(nsn("default", "{{.cluster}}-demo"), func(k *kustomizev1.Kustomization) {
370+
Raw: mustMarshalJSON(t, makeTestKustomization(nsn("default", "{{ .element.cluster }}-demo"), func(k *kustomizev1.Kustomization) {
371371
k.Spec = kustomizev1.KustomizationSpec{
372372
Interval: metav1.Duration{Duration: 5 * time.Minute},
373-
Path: "./clusters/{{.cluster}}/",
373+
Path: "./clusters/{{ .element.cluster }}/",
374374
Prune: true,
375375
SourceRef: kustomizev1.CrossNamespaceSourceReference{
376376
Kind: "GitRepository",
377377
Name: "demo-repo",
378378
},
379379
KubeConfig: &meta.KubeConfigReference{
380380
SecretRef: meta.SecretKeyReference{
381-
Name: "{{.cluster}}",
381+
Name: "{{ .element.cluster }}",
382382
},
383383
},
384384
}

controllers/templates/renderer.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,12 @@ func render(b []byte, params map[string]any) ([]byte, error) {
9494
return nil, fmt.Errorf("failed to parse template: %w", err)
9595
}
9696

97+
data := map[string]any{
98+
"element": params,
99+
}
100+
97101
var out bytes.Buffer
98-
if err := t.Execute(&out, params); err != nil {
102+
if err := t.Execute(&out, data); err != nil {
99103
return nil, fmt.Errorf("failed to render template: %w", err)
100104
}
101105

controllers/templates/renderer_test.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ func TestRender(t *testing.T) {
6363
s.Spec.Templates = []templatesv1.GitOpsSetTemplate{
6464
{
6565
Content: runtime.RawExtension{
66-
Raw: mustMarshalJSON(t, makeTestService(types.NamespacedName{Name: "{{sanitize .env}}-demo"})),
66+
Raw: mustMarshalJSON(t, makeTestService(types.NamespacedName{Name: "{{ sanitize .element.env }}-demo"})),
6767
},
6868
},
6969
}
@@ -86,12 +86,12 @@ func TestRender(t *testing.T) {
8686
s.Spec.Templates = []templatesv1.GitOpsSetTemplate{
8787
{
8888
Content: runtime.RawExtension{
89-
Raw: mustMarshalJSON(t, makeTestService(types.NamespacedName{Name: "{{ .env}}-demo1"})),
89+
Raw: mustMarshalJSON(t, makeTestService(types.NamespacedName{Name: "{{ .element.env }}-demo1"})),
9090
},
9191
},
9292
{
9393
Content: runtime.RawExtension{
94-
Raw: mustMarshalJSON(t, makeTestService(types.NamespacedName{Name: "{{ .env}}-demo2"})),
94+
Raw: mustMarshalJSON(t, makeTestService(types.NamespacedName{Name: "{{ .element.env }}-demo2"})),
9595
},
9696
},
9797
}
@@ -185,7 +185,7 @@ func makeTestGitOpsSet(t *testing.T, opts ...func(*templatesv1.GitOpsSet)) *temp
185185
Templates: []templatesv1.GitOpsSetTemplate{
186186
{
187187
Content: runtime.RawExtension{
188-
Raw: mustMarshalJSON(t, makeTestService(types.NamespacedName{Name: "{{.env}}-demo"})),
188+
Raw: mustMarshalJSON(t, makeTestService(types.NamespacedName{Name: "{{ .element.env }}-demo"})),
189189
},
190190
},
191191
},
@@ -208,11 +208,11 @@ func makeTestService(name types.NamespacedName, opts ...func(*corev1.Service)) *
208208
Name: name.Name,
209209
Namespace: name.Namespace,
210210
Annotations: map[string]string{
211-
"app.kubernetes.io/instance": "{{ .env }}",
211+
"app.kubernetes.io/instance": "{{ .element.env }}",
212212
},
213213
},
214214
Spec: corev1.ServiceSpec{
215-
ClusterIP: "{{ .externalIP }}",
215+
ClusterIP: "{{ .element.externalIP }}",
216216
Ports: []corev1.ServicePort{
217217
{
218218
Name: "http",

examples/list-generator/list-generator.yaml

+3-3
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@ spec:
2323
kind: Kustomization
2424
apiVersion: kustomize.toolkit.fluxcd.io/v1beta2
2525
metadata:
26-
name: "{{ .env }}-demo"
26+
name: "{{ .element.env }}-demo"
2727
labels:
2828
app.kubernetes.io/name: go-demo
29-
app.kubernetes.io/instance: "{{ .env }}"
29+
app.kubernetes.io/instance: "{{ .element.env }}"
3030
com.example/team: "{{ .team }}"
3131
spec:
3232
interval: 5m
33-
path: "./examples/kustomize/environments/{{ .env }}"
33+
path: "./examples/kustomize/environments/{{ .element.env }}"
3434
prune: true
3535
sourceRef:
3636
kind: GitRepository

0 commit comments

Comments
 (0)