diff --git a/packer/config_template.go b/packer/config_template.go index d76e3e672..99f4dc03f 100644 --- a/packer/config_template.go +++ b/packer/config_template.go @@ -110,8 +110,16 @@ func templateEnv(n string) string { return os.Getenv(n) } -func templateISOTime() string { - return time.Now().UTC().Format(time.RFC3339) +func templateISOTime(timeFormat ...string) (string, error) { + if len(timeFormat) == 0 { + return time.Now().UTC().Format(time.RFC3339), nil + } + + if len(timeFormat) > 1 { + return "", fmt.Errorf("too many values, 1 needed: %v", timeFormat) + } + + return time.Now().UTC().Format(timeFormat[0]), nil } func templatePwd() (string, error) { diff --git a/packer/config_template_test.go b/packer/config_template_test.go index 8604f2c43..e74e30c0d 100644 --- a/packer/config_template_test.go +++ b/packer/config_template_test.go @@ -1,6 +1,7 @@ package packer import ( + "fmt" "math" "os" "strconv" @@ -42,6 +43,33 @@ func TestConfigTemplateProcess_isotime(t *testing.T) { } } +// Note must format with the magic Date: Mon Jan 2 15:04:05 -0700 MST 2006 +func TestConfigTemplateProcess_isotime_withFormat(t *testing.T) { + tpl, err := NewConfigTemplate() + if err != nil { + t.Fatalf("err: %s", err) + } + + // Checking for a too-many arguments error + // Because of the variadic function, compile time checking won't work + _, err = tpl.Process(`{{isotime "20060102" "huh"}}`, nil) + if err == nil { + t.Fatalf("err: cannot have more than 1 input") + } + + result, err := tpl.Process(`{{isotime "20060102"}}`, nil) + if err != nil { + t.Fatalf("err: %s", err) + } + + ti := time.Now().UTC() + val := fmt.Sprintf("%04d%02d%02d", ti.Year(), ti.Month(), ti.Day()) + + if result != val { + t.Fatalf("val: %s (formated: %s)", val, result) + } +} + func TestConfigTemplateProcess_pwd(t *testing.T) { tpl, err := NewConfigTemplate() if err != nil {