From 349a83d6d63d4d5e6d1809d2980ec60ce258c016 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Thu, 15 Aug 2013 19:11:42 -0700 Subject: [PATCH] common: Remove Template, in packer now --- common/template.go | 81 ----------------------------------------- common/template_test.go | 67 ---------------------------------- 2 files changed, 148 deletions(-) delete mode 100644 common/template.go delete mode 100644 common/template_test.go diff --git a/common/template.go b/common/template.go deleted file mode 100644 index 199c910b5..000000000 --- a/common/template.go +++ /dev/null @@ -1,81 +0,0 @@ -package common - -import ( - "bytes" - "fmt" - "strconv" - "text/template" - "time" -) - -// Template processes string data as a text/template with some common -// elements and functions available. Plugin creators should process as -// many fields as possible through this. -type Template struct { - UserVars map[string]string - - root *template.Template - i int -} - -// NewTemplate creates a new template processor. -func NewTemplate() (*Template, error) { - result := &Template{ - UserVars: make(map[string]string), - } - - result.root = template.New("configTemplateRoot") - result.root.Funcs(template.FuncMap{ - "timestamp": templateTimestamp, - "user": result.templateUser, - }) - - return result, nil -} - -// Process processes a single string, compiling and executing the template. -func (t *Template) Process(s string, data interface{}) (string, error) { - tpl, err := t.root.New(t.nextTemplateName()).Parse(s) - if err != nil { - return "", err - } - - buf := new(bytes.Buffer) - if err := tpl.Execute(buf, data); err != nil { - return "", err - } - - return buf.String(), nil -} - -// Validate the template. -func (t *Template) Validate(s string) error { - root, err := t.root.Clone() - if err != nil { - return err - } - - _, err = root.New("template").Parse(s) - return err -} - -func (t *Template) nextTemplateName() string { - name := fmt.Sprintf("tpl%d", t.i) - t.i++ - return name -} - -// User is the function exposed as "user" within the templates and -// looks up user variables. -func (t *Template) templateUser(n string) (string, error) { - result, ok := t.UserVars[n] - if !ok { - return "", fmt.Errorf("uknown user var: %s", n) - } - - return result, nil -} - -func templateTimestamp() string { - return strconv.FormatInt(time.Now().UTC().Unix(), 10) -} diff --git a/common/template_test.go b/common/template_test.go deleted file mode 100644 index 51d34fe7d..000000000 --- a/common/template_test.go +++ /dev/null @@ -1,67 +0,0 @@ -package common - -import ( - "math" - "strconv" - "testing" - "time" -) - -func TestTemplateProcess_timestamp(t *testing.T) { - tpl, err := NewTemplate() - if err != nil { - t.Fatalf("err: %s", err) - } - - result, err := tpl.Process(`{{timestamp}}`, nil) - if err != nil { - t.Fatalf("err: %s", err) - } - - val, err := strconv.ParseInt(result, 10, 64) - if err != nil { - t.Fatalf("err: %s", err) - } - - currentTime := time.Now().UTC().Unix() - if math.Abs(float64(currentTime-val)) > 10 { - t.Fatalf("val: %d (current: %d)", val, currentTime) - } -} - -func TestTemplateProcess_user(t *testing.T) { - tpl, err := NewTemplate() - if err != nil { - t.Fatalf("err: %s", err) - } - - tpl.UserVars["foo"] = "bar" - - result, err := tpl.Process(`{{user "foo"}}`, nil) - if err != nil { - t.Fatalf("err: %s", err) - } - - if result != "bar" { - t.Fatalf("bad: %s", result) - } -} - -func TestTemplateValidate(t *testing.T) { - tpl, err := NewTemplate() - if err != nil { - t.Fatalf("err: %s", err) - } - - // Valid - err = tpl.Validate(`{{user "foo"}}`) - if err != nil { - t.Fatalf("err: %s", err) - } - - // Invalid - err = tpl.Validate(`{{idontexist}}`) - if err == nil { - t.Fatal("should have error") - } -}