Commit 9a0f92c5 authored by Mitchell Hashimoto's avatar Mitchell Hashimoto

Merge branch 'template-timefmt' of github.com:njones/packer into njones-template-timefmt

Conflicts:
	packer/config_template.go
	website/source/docs/templates/configuration-templates.html.markdown
parents c66b5dbb 04d9b0a1
...@@ -113,8 +113,16 @@ func templateEnv(n string) string { ...@@ -113,8 +113,16 @@ func templateEnv(n string) string {
return os.Getenv(n) return os.Getenv(n)
} }
func templateISOTime() string { func templateISOTime(timeFormat ...string) (string, error) {
return InitTime.Format(time.RFC3339) 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) { func templatePwd() (string, error) {
......
package packer package packer
import ( import (
"fmt"
"math" "math"
"os" "os"
"strconv" "strconv"
...@@ -42,6 +43,33 @@ func TestConfigTemplateProcess_isotime(t *testing.T) { ...@@ -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) { func TestConfigTemplateProcess_pwd(t *testing.T) {
tpl, err := NewConfigTemplate() tpl, err := NewConfigTemplate()
if err != nil { if err != nil {
......
...@@ -53,13 +53,68 @@ While some configuration settings have local variables specific to only that ...@@ -53,13 +53,68 @@ While some configuration settings have local variables specific to only that
configuration, a set of functions are available globally for use in _any string_ configuration, a set of functions are available globally for use in _any string_
in Packer templates. These are listed below for reference. in Packer templates. These are listed below for reference.
* `isotime` - UTC time in RFC-3339 format.
* `lower` - Lowercases the string. * `lower` - Lowercases the string.
* `pwd` - The working directory while executing Packer. * `pwd` - The working directory while executing Packer.
* `isotime [FORMAT]` - UTC time, which can be [formatted](http://golang.org/pkg/time/#example_Time_Format).
See more examples below.
* `timestamp` - The current Unix timestamp in UTC. * `timestamp` - The current Unix timestamp in UTC.
* `uuid` - Returns a random UUID. * `uuid` - Returns a random UUID.
* `upper` - Uppercases the string. * `upper` - Uppercases the string.
### isotime Format
Formatting for the function `isotime` uses the magic reference date
**Mon Jan 2 15:04:05 -0700 MST 2006**, which breaks down to the following:
<table border="1" cellpadding="5" width="100%">
<tr bgcolor="lightgray">
<td></td>
<td align="center"><strong>Day of Week</strong></td>
<td align="center"><strong>Month</strong></td>
<td align="center"><strong>Date</strong></td>
<td align="center"><strong>Hour</strong></td>
<td align="center"><strong>Minute</strong></td>
<td align="center"><strong>Second</strong></td>
<td align="center"><strong>Year</strong></td>
<td align="center"><strong>Timezone</strong></td>
</tr>
<tr>
<td><strong>Numeric</strong></td>
<td align="center">-</td>
<td align="center">01</td>
<td align="center">02</td>
<td align="center">03 (15)</td>
<td align="center">04</td>
<td align="center">05</td>
<td align="center">06</td>
<td align="center">-0700</td>
</tr>
<tr>
<td><strong>Textual</strong></td>
<td align="center">Monday (Mon)</td>
<td align="center">January (Jan)</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">-</td>
<td align="center">MST</td>
</tr>
</table>
_The values in parentheses are the abbreviated, or 24-hour clock values_
Here are some example formated time, using the above format options:
<pre>
isotime = June 7, 7:22:43pm 2014
{{isotime "2006-01-02"}} = 2014-06-07
{{isotime "Mon 1506"}} = Sat 1914
{{isotime "01-Jan-06 03\_04\_05"}} = 07-Jun-2014 07\_22\_43
{{isotime "Hour15Year200603"}} = Hour19Year201407
</pre>
## Amazon Specific Functions ## Amazon Specific Functions
Specific to Amazon builders: Specific to Amazon builders:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment