Merge pull request #8208 from psinghal20/conventional-format-isotime
feat: add strftime function in templates
This commit is contained in:
commit
90573a97dd
2
go.mod
2
go.mod
|
@ -76,6 +76,7 @@ require (
|
|||
github.com/hetznercloud/hcloud-go v1.15.1
|
||||
github.com/hyperonecom/h1-client-go v0.0.0-20190122232013-cf38e8387775
|
||||
github.com/jdcloud-api/jdcloud-sdk-go v1.9.1-0.20190605102154-3d81a50ca961
|
||||
github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869
|
||||
github.com/joyent/triton-go v0.0.0-20180116165742-545edbe0d564
|
||||
github.com/json-iterator/go v1.1.6 // indirect
|
||||
github.com/jtolds/gls v4.2.1+incompatible // indirect
|
||||
|
@ -97,7 +98,6 @@ require (
|
|||
github.com/mitchellh/go-fs v0.0.0-20180402234041-7b48fa161ea7
|
||||
github.com/mitchellh/go-homedir v1.0.0
|
||||
github.com/mitchellh/go-vnc v0.0.0-20150629162542-723ed9867aed
|
||||
github.com/mitchellh/gox v1.0.1 // indirect
|
||||
github.com/mitchellh/iochan v1.0.0
|
||||
github.com/mitchellh/mapstructure v0.0.0-20180111000720-b4575eea38cc
|
||||
github.com/mitchellh/panicwrap v0.0.0-20170106182340-fce601fe5557
|
||||
|
|
7
go.sum
7
go.sum
|
@ -57,8 +57,6 @@ github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI=
|
|||
github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
||||
github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM=
|
||||
github.com/aws/aws-sdk-go v1.16.22/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
||||
github.com/aws/aws-sdk-go v1.22.2 h1:uYP58k2Cd9y1qBy8CxTe5ADmdi4kANm8Ul8ch3kkIcQ=
|
||||
github.com/aws/aws-sdk-go v1.22.2/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
||||
github.com/aws/aws-sdk-go v1.24.1 h1:B2NRyTV1/+h+Dg8Bh7vnuvW6QZz/NBL+uzgC2uILDMI=
|
||||
github.com/aws/aws-sdk-go v1.24.1/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
||||
github.com/azr/flock v0.0.0-20190823144736-958d66434653 h1:2H3Cu0cbG8iszfcgnANwC/cm0YkPJIQvaJ9/tSpwh9o=
|
||||
|
@ -208,7 +206,6 @@ github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdv
|
|||
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
|
||||
github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE=
|
||||
github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
|
||||
github.com/hashicorp/go-version v1.0.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
|
||||
github.com/hashicorp/go-version v1.1.0 h1:bPIoEKD27tNdebFGGxxYwcL4nepeY4j1QP23PFRGzg0=
|
||||
github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
|
||||
github.com/hashicorp/go-version v1.2.0 h1:3vNe/fWF5CBgRIguda1meWhsZHy3m8gCJ5wx+dIzX/E=
|
||||
|
@ -238,6 +235,8 @@ github.com/hyperonecom/h1-client-go v0.0.0-20190122232013-cf38e8387775 h1:MIteIo
|
|||
github.com/hyperonecom/h1-client-go v0.0.0-20190122232013-cf38e8387775/go.mod h1:R9rU87RxxmcD3DkspW9JqGBXiJyg5MA+WNCtJrBtnXs=
|
||||
github.com/jdcloud-api/jdcloud-sdk-go v1.9.1-0.20190605102154-3d81a50ca961 h1:a2/K4HRhg31A5vafiz5yYiGMjaCxwRpyjJStfVquKds=
|
||||
github.com/jdcloud-api/jdcloud-sdk-go v1.9.1-0.20190605102154-3d81a50ca961/go.mod h1:UrKjuULIWLjHFlG6aSPunArE5QX57LftMmStAZJBEX8=
|
||||
github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 h1:IPJ3dvxmJ4uczJe5YQdrYB16oTJlGSC/OyZDqUk9xX4=
|
||||
github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869/go.mod h1:cJ6Cj7dQo+O6GJNiMx+Pa94qKj+TG8ONdKHgMNIyyag=
|
||||
github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
||||
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM=
|
||||
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
||||
|
@ -304,8 +303,6 @@ github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eI
|
|||
github.com/mitchellh/go-vnc v0.0.0-20150629162542-723ed9867aed h1:FI2NIv6fpef6BQl2u3IZX/Cj20tfypRF4yd+uaHOMtI=
|
||||
github.com/mitchellh/go-vnc v0.0.0-20150629162542-723ed9867aed/go.mod h1:3rdaFaCv4AyBgu5ALFM0+tSuHrBh6v692nyQe3ikrq0=
|
||||
github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
|
||||
github.com/mitchellh/gox v1.0.1 h1:x0jD3dcHk9a9xPSDN6YEL4xL6Qz0dvNYm8yZqui5chI=
|
||||
github.com/mitchellh/gox v1.0.1/go.mod h1:ED6BioOGXMswlXa2zxfh/xdd5QhwYliBFn9V18Ap4z4=
|
||||
github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY=
|
||||
github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
|
||||
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||
|
|
|
@ -14,6 +14,7 @@ import (
|
|||
"github.com/hashicorp/packer/common/uuid"
|
||||
"github.com/hashicorp/packer/version"
|
||||
vaultapi "github.com/hashicorp/vault/api"
|
||||
strftime "github.com/jehiah/go-strftime"
|
||||
)
|
||||
|
||||
// InitTime is the UTC time when this package was initialized. It is
|
||||
|
@ -31,6 +32,7 @@ var FuncGens = map[string]interface{}{
|
|||
"build_type": funcGenBuildType,
|
||||
"env": funcGenEnv,
|
||||
"isotime": funcGenIsotime,
|
||||
"strftime": funcGenStrftime,
|
||||
"pwd": funcGenPwd,
|
||||
"split": funcGenSplitter,
|
||||
"template_dir": funcGenTemplateDir,
|
||||
|
@ -133,6 +135,12 @@ func funcGenIsotime(ctx *Context) interface{} {
|
|||
}
|
||||
}
|
||||
|
||||
func funcGenStrftime(ctx *Context) interface{} {
|
||||
return func(format string) string {
|
||||
return strftime.Format(format, InitTime)
|
||||
}
|
||||
}
|
||||
|
||||
func funcGenPwd(ctx *Context) interface{} {
|
||||
return func() (string, error) {
|
||||
return os.Getwd()
|
||||
|
|
|
@ -141,6 +141,25 @@ func TestFuncIsotime(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestFuncStrftime(t *testing.T) {
|
||||
ctx := &Context{}
|
||||
i := &I{Value: "{{strftime \"%Y-%m-%dT%H:%M:%S%z\"}}"}
|
||||
result, err := i.Render(ctx)
|
||||
if err != nil {
|
||||
t.Fatalf("err: %s", err)
|
||||
}
|
||||
|
||||
val, err := time.Parse("2006-01-02T15:04:05-0700", result)
|
||||
if err != nil {
|
||||
t.Fatalf("err: %s", err)
|
||||
}
|
||||
|
||||
currentTime := time.Now().UTC()
|
||||
if currentTime.Sub(val) > 2*time.Second {
|
||||
t.Fatalf("val: %v (current: %v)", val, currentTime)
|
||||
}
|
||||
}
|
||||
|
||||
func TestFuncPwd(t *testing.T) {
|
||||
wd, err := os.Getwd()
|
||||
if err != nil {
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
# Compiled Object files, Static and Dynamic libs (Shared Objects)
|
||||
*.o
|
||||
*.a
|
||||
*.so
|
||||
|
||||
# Folders
|
||||
_obj
|
||||
_test
|
||||
|
||||
# Architecture specific extensions/prefixes
|
||||
*.[568vq]
|
||||
[568vq].out
|
||||
|
||||
*.cgo1.go
|
||||
*.cgo2.c
|
||||
_cgo_defun.c
|
||||
_cgo_gotypes.go
|
||||
_cgo_export.*
|
||||
|
||||
_testmain.go
|
||||
|
||||
*.exe
|
|
@ -0,0 +1,19 @@
|
|||
Copyright (c) 2012 Jehiah Czebotar
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
|
@ -0,0 +1,26 @@
|
|||
go-strftime
|
||||
===========
|
||||
|
||||
go implementation of strftime
|
||||
|
||||
## Example
|
||||
|
||||
```
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
strftime "github.com/jehiah/go-strftime"
|
||||
)
|
||||
|
||||
func main() {
|
||||
t := time.Unix(1340244776, 0)
|
||||
utc, _ := time.LoadLocation("UTC")
|
||||
t = t.In(utc)
|
||||
fmt.Println(strftime.Format("%Y-%m-%d %H:%M:%S", t))
|
||||
// Output:
|
||||
// 2012-06-21 02:12:56
|
||||
}
|
||||
```
|
|
@ -0,0 +1,72 @@
|
|||
// go implementation of strftime
|
||||
package strftime
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// taken from time/format.go
|
||||
var conversion = map[rune]string{
|
||||
/*stdLongMonth */ 'B': "January",
|
||||
/*stdMonth */ 'b': "Jan",
|
||||
// stdNumMonth */ 'm': "1",
|
||||
/*stdZeroMonth */ 'm': "01",
|
||||
/*stdLongWeekDay */ 'A': "Monday",
|
||||
/*stdWeekDay */ 'a': "Mon",
|
||||
// stdDay */ 'd': "2",
|
||||
// stdUnderDay */ 'd': "_2",
|
||||
/*stdZeroDay */ 'd': "02",
|
||||
/*stdHour */ 'H': "15",
|
||||
// stdHour12 */ 'I': "3",
|
||||
/*stdZeroHour12 */ 'I': "03",
|
||||
// stdMinute */ 'M': "4",
|
||||
/*stdZeroMinute */ 'M': "04",
|
||||
// stdSecond */ 'S': "5",
|
||||
/*stdZeroSecond */ 'S': "05",
|
||||
/*stdLongYear */ 'Y': "2006",
|
||||
/*stdYear */ 'y': "06",
|
||||
/*stdPM */ 'p': "PM",
|
||||
// stdpm */ 'p': "pm",
|
||||
/*stdTZ */ 'Z': "MST",
|
||||
// stdISO8601TZ */ 'z': "Z0700", // prints Z for UTC
|
||||
// stdISO8601ColonTZ */ 'z': "Z07:00", // prints Z for UTC
|
||||
/*stdNumTZ */ 'z': "-0700", // always numeric
|
||||
// stdNumShortTZ */ 'b': "-07", // always numeric
|
||||
// stdNumColonTZ */ 'b': "-07:00", // always numeric
|
||||
/* nonStdMilli */ 'L': ".000",
|
||||
}
|
||||
|
||||
// This is an alternative to time.Format because no one knows
|
||||
// what date 040305 is supposed to create when used as a 'layout' string
|
||||
// this takes standard strftime format options. For a complete list
|
||||
// of format options see http://strftime.org/
|
||||
func Format(format string, t time.Time) string {
|
||||
retval := make([]byte, 0, len(format))
|
||||
for i, ni := 0, 0; i < len(format); i = ni + 2 {
|
||||
ni = strings.IndexByte(format[i:], '%')
|
||||
if ni < 0 {
|
||||
ni = len(format)
|
||||
} else {
|
||||
ni += i
|
||||
}
|
||||
retval = append(retval, []byte(format[i:ni])...)
|
||||
if ni+1 < len(format) {
|
||||
c := format[ni+1]
|
||||
if c == '%' {
|
||||
retval = append(retval, '%')
|
||||
} else {
|
||||
if layoutCmd, ok := conversion[rune(c)]; ok {
|
||||
retval = append(retval, []byte(t.Format(layoutCmd))...)
|
||||
} else {
|
||||
retval = append(retval, '%', c)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ni < len(format) {
|
||||
retval = append(retval, '%')
|
||||
}
|
||||
}
|
||||
}
|
||||
return string(retval)
|
||||
}
|
|
@ -345,6 +345,8 @@ github.com/jdcloud-api/jdcloud-sdk-go/services/vm/models
|
|||
github.com/jdcloud-api/jdcloud-sdk-go/services/vpc/apis
|
||||
github.com/jdcloud-api/jdcloud-sdk-go/services/vpc/client
|
||||
github.com/jdcloud-api/jdcloud-sdk-go/services/vpc/models
|
||||
# github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869
|
||||
github.com/jehiah/go-strftime
|
||||
# github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af
|
||||
github.com/jmespath/go-jmespath
|
||||
# github.com/joyent/triton-go v0.0.0-20180116165742-545edbe0d564
|
||||
|
|
|
@ -66,6 +66,10 @@ Here is a full list of the available functions for reference.
|
|||
[formatted](https://golang.org/pkg/time/#example_Time_Format). See more
|
||||
examples below in [the `isotime` format
|
||||
reference](/docs/templates/engine.html#isotime-function-format-reference).
|
||||
`strftime FORMAT` - UTC time, formated using the ISO C standard format
|
||||
`FORMAT`. See
|
||||
[jehiah/go-strftime](https://github.com/jehiah/go-strftime) for a list
|
||||
of available format specifier.
|
||||
- `lower` - Lowercases the string.
|
||||
- `packer_version` - Returns Packer version.
|
||||
- `pwd` - The working directory while executing Packer.
|
||||
|
|
Loading…
Reference in New Issue