Skip to content

Commit

Permalink
Merge pull request #491 from kellerza/unwrap
Browse files Browse the repository at this point in the history
config: No text/template wrapper
  • Loading branch information
hellt authored Jul 7, 2021
2 parents 4d5938e + 7a0a055 commit ef66122
Showing 1 changed file with 33 additions and 8 deletions.
41 changes: 33 additions & 8 deletions clab/config/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@ package config
import (
"encoding/json"
"fmt"
"path/filepath"
"strings"

"text/template"

jT "github.com/kellerza/template"

log "github.com/sirupsen/logrus"
Expand All @@ -27,6 +30,18 @@ type NodeConfig struct {
Info []string
}

// Load templates from all paths for the specific role/kind
func LoadTemplates(tmpl *template.Template, role string) error {
for i := range TemplatePaths {
fn := filepath.Join(TemplatePaths[i], fmt.Sprintf("*__%s.tmpl", role))
_, err := tmpl.ParseGlob(fn)
if err != nil {
return fmt.Errorf("could not load templates from %s: %s", fn, err)
}
}
return nil
}

func RenderAll(nodes map[string]nodes.Node, links map[int]*types.Link) (map[string]*NodeConfig, error) {
res := make(map[string]*NodeConfig)

Expand All @@ -45,10 +60,7 @@ func RenderAll(nodes map[string]nodes.Node, links map[int]*types.Link) (map[stri
}
}

tmpl, err := jT.New("", jT.SearchPath(TemplatePaths...))
if err != nil {
return nil, err
}
tmpl := template.New("").Funcs(jT.Funcs)

for nodeName, vars := range PrepareVars(nodes, links) {
res[nodeName] = &NodeConfig{
Expand All @@ -58,19 +70,32 @@ func RenderAll(nodes map[string]nodes.Node, links map[int]*types.Link) (map[stri

for _, baseN := range TemplateNames {
tmplN := fmt.Sprintf("%s__%s.tmpl", baseN, vars["role"])
data1, err := tmpl.ExecuteTemplate(tmplN, vars)

if tmpl.Lookup(tmplN) == nil {
err := LoadTemplates(tmpl, tmplN)
if err != nil {
return nil, err
}
if tmpl.Lookup(tmplN) == nil {
return nil, fmt.Errorf("template not found %s", tmplN)
}
}

var buf strings.Builder
err := tmpl.ExecuteTemplate(&buf, tmplN, vars)
if err != nil {
return nil, err
}
data1 = strings.ReplaceAll(strings.Trim(data1, "\n \t"), "\n\n\n", "\n\n")
res[nodeName].Data = append(res[nodeName].Data, data1)

data := strings.ReplaceAll(strings.Trim(buf.String(), "\n \t"), "\n\n\n", "\n\n")
res[nodeName].Data = append(res[nodeName].Data, data)
res[nodeName].Info = append(res[nodeName].Info, tmplN)
}
}
return res, nil
}

// Implement stringer for conf snippet
// Implement stringer for NodeConfig
func (c *NodeConfig) String() string {

s := fmt.Sprintf("%s: %v", c.TargetNode.ShortName, c.Info)
Expand Down

0 comments on commit ef66122

Please sign in to comment.