Skip to content

Commit abcb80c

Browse files
authored
Merge pull request #124 from weaveworks/add-to-yaml-function
Add toYaml function to the template context.
2 parents 131c554 + 2b1b114 commit abcb80c

File tree

3 files changed

+98
-0
lines changed

3 files changed

+98
-0
lines changed

controllers/templates/renderer.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,14 @@ func makeTemplateFunctions() template.FuncMap {
251251

252252
return def
253253
}
254+
f["toYaml"] = func(v interface{}) string {
255+
data, err := syaml.Marshal(v)
256+
if err != nil {
257+
// Swallow errors inside of a template.
258+
return ""
259+
}
260+
return strings.TrimSuffix(string(data), "\n")
261+
}
254262

255263
return f
256264
}

controllers/templates/renderer_test.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,56 @@ func TestRender(t *testing.T) {
418418
},
419419
},
420420
},
421+
{
422+
name: "toYaml function",
423+
elements: []apiextensionsv1.JSON{
424+
{Raw: []byte(`{"env":"testing","depends":[{"name":"testing"}]}`)},
425+
},
426+
setOptions: []func(*templatesv1.GitOpsSet){
427+
func(s *templatesv1.GitOpsSet) {
428+
s.ObjectMeta.Annotations = map[string]string{
429+
"templates.weave.works/delimiters": "((,))",
430+
}
431+
s.Spec.Templates = []templatesv1.GitOpsSetTemplate{
432+
{
433+
Content: runtime.RawExtension{
434+
Raw: []byte(`{"apiVersion":"kustomize.toolkit.fluxcd.io/v1beta2","kind":"Kustomization","metadata":{"name":"testing-demo"},"spec":{"dependsOn":"(( .Element.depends | toYaml | nindent 8 ))","interval":"5m","path":"./examples/kustomize/environments/(( .Element.env ))","prune":true,"sourceRef":{"kind":"GitRepository","name":"go-demo-repo"}}}`),
435+
},
436+
},
437+
}
438+
},
439+
},
440+
want: []*unstructured.Unstructured{
441+
{
442+
Object: map[string]interface{}{
443+
"apiVersion": "kustomize.toolkit.fluxcd.io/v1beta2",
444+
"kind": "Kustomization",
445+
"metadata": map[string]interface{}{
446+
"name": "testing-demo",
447+
"namespace": "demo",
448+
"labels": map[string]interface{}{
449+
"templates.weave.works/name": "test-gitops-set",
450+
"templates.weave.works/namespace": "demo",
451+
},
452+
},
453+
"spec": map[string]interface{}{
454+
"dependsOn": []any{
455+
map[string]any{
456+
"name": "testing",
457+
},
458+
},
459+
"interval": "5m",
460+
"path": "./examples/kustomize/environments/testing",
461+
"prune": true,
462+
"sourceRef": map[string]interface{}{
463+
"kind": "GitRepository",
464+
"name": "go-demo-repo",
465+
},
466+
},
467+
},
468+
},
469+
},
470+
},
421471
}
422472

423473
for _, tt := range generatorTests {

paul.yaml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
apiVersion: templates.weave.works/v1alpha1
2+
kind: GitOpsSet
3+
metadata:
4+
annotations:
5+
templates.weave.works/delimiters: "((,))"
6+
labels:
7+
app.kubernetes.io/name: gitopsset
8+
name: gitopsset-sample
9+
spec:
10+
generators:
11+
- list:
12+
elements:
13+
- env: dev
14+
team: dev-team
15+
depends:
16+
- name: testing
17+
- env: production
18+
team: ops-team
19+
depends: []
20+
- env: staging
21+
team: ops-team
22+
depends: []
23+
templates:
24+
- content:
25+
kind: Kustomization
26+
apiVersion: kustomize.toolkit.fluxcd.io/v1beta2
27+
metadata:
28+
name: "(( .Element.env ))-demo"
29+
labels:
30+
app.kubernetes.io/name: go-demo
31+
app.kubernetes.io/instance: "(( .Element.env ))"
32+
com.example/team: "(( .Element.team ))"
33+
spec:
34+
interval: 5m
35+
path: "./examples/kustomize/environments/(( .Element.env ))"
36+
prune: true
37+
sourceRef:
38+
kind: GitRepository
39+
name: go-demo-repo
40+
dependsOn: (( .Element.depends | toYaml | nindent 8))

0 commit comments

Comments
 (0)