Fixes #1092, Adds a format option to the {{isotime}} variable.

Now using the golang magic date: Mon Jan 2 15:04:05 -0700 MST 2006
One can format the time like:

    {{isotime "2006-01-02"}} == "YYYY-MM-DD"
    {{isotime "060102-15"}}  == "YYMMDD-HH" (24-hour clock)
    {{isotime "060102-3"}}   == "YYMMDD-H"  (12-hour clock)

Using {{isotime}} as a standalone variable doesn't change. It still returns RFC3339 formatted time.
This commit is contained in:
Nika Jones 2014-05-06 06:00:56 -07:00
parent 7b09052845
commit cd29c8d586
2 changed files with 38 additions and 2 deletions

View File

@ -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) {

View File

@ -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 {