From dc091263e2bfcacae224de98a538ab2fb0c0ac25 Mon Sep 17 00:00:00 2001 From: Niko Kivel Date: Fri, 26 Mar 2021 15:20:52 +0100 Subject: [PATCH] additional functions for templates --- docs/docs/about/templating.md | 38 +++++++++++++++++++++++++++++++++ internal/pkg/overlay/overlay.go | 8 ++++--- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/docs/docs/about/templating.md b/docs/docs/about/templating.md index edc22337..32fb6e42 100644 --- a/docs/docs/about/templating.md +++ b/docs/docs/about/templating.md @@ -2,3 +2,41 @@ id: templating title: Templating --- + +# Templating + +## loops + +### range + +iterate over elements of an array + +```go +{{ range $devname, $netdev := .NetDevs }} + # netdev = {{ $netdev.Hwaddr }} +{{ end }} +``` + +#### increment variable in loop + +iterate over elements of an array and increment `i` each loop cycle + +```go +{{ $i := 0 }} +{{ range $devname, $netdev := .NetDevs }} + # netdev{{$i}} = {{ $netdev.Hwaddr }} + {{ $i = inc $i }} +{{ end }} +``` + +#### decrement + +iterate over elements of an array and decrement `i` each loop cycle + +```go +{{ $i := 10 }} +{{ range $devname, $netdev := .NetDevs }} + # netdev{{$i}} = {{ $netdev.Hwaddr }} + {{ $i = dec $i }} +{{ end }} +``` diff --git a/internal/pkg/overlay/overlay.go b/internal/pkg/overlay/overlay.go index d8bca3e9..4577bfa1 100644 --- a/internal/pkg/overlay/overlay.go +++ b/internal/pkg/overlay/overlay.go @@ -215,22 +215,24 @@ func buildOverlay(nodeList []node.NodeInfo, overlayType string) error { tmpl, err := template.New(path.Base(location)).Funcs(template.FuncMap{ "Include": templateFileInclude, "IncludeFrom": templateContainerFileInclude, + "inc": func(i int) int { return i + 1 }, + "dec": func(i int) int { return i - 1 }, }).ParseGlob(path.Join(OverlayDir, destFile+".ww*")) if err != nil { - wwlog.Printf(wwlog.ERROR, "%s\n", err) + wwlog.Printf(wwlog.ERROR, "template.New %s\n", err) return nil } w, err := os.OpenFile(path.Join(tmpDir, destFile), os.O_RDWR|os.O_CREATE, info.Mode()) if err != nil { - wwlog.Printf(wwlog.ERROR, "%s\n", err) + wwlog.Printf(wwlog.ERROR, "path.Join %s\n", err) return err } defer w.Close() err = tmpl.Execute(w, t) if err != nil { - wwlog.Printf(wwlog.ERROR, "%s\n", err) + wwlog.Printf(wwlog.ERROR, "tmpl.Execute %s\n", err) return nil }