bake: add timestamp function

Terraform includes a timestamp function to get the current time. go-cty
has imported a number of the timestamp functions to it's standard
library, however, this was one was not included.

This patch simply pulls in the TimestampFunc from Terraform's
internal/lang/funcs/datetime.go to allow easily fetching the current
time in bake.

Signed-off-by: Justin Chadwell <me@jedevc.com>
This commit is contained in:
Justin Chadwell 2022-07-18 11:29:35 +01:00
parent 724cb29042
commit 691723f9f9

View File

@ -1,12 +1,15 @@
package hclparser package hclparser
import ( import (
"time"
"github.com/hashicorp/go-cty-funcs/cidr" "github.com/hashicorp/go-cty-funcs/cidr"
"github.com/hashicorp/go-cty-funcs/crypto" "github.com/hashicorp/go-cty-funcs/crypto"
"github.com/hashicorp/go-cty-funcs/encoding" "github.com/hashicorp/go-cty-funcs/encoding"
"github.com/hashicorp/go-cty-funcs/uuid" "github.com/hashicorp/go-cty-funcs/uuid"
"github.com/hashicorp/hcl/v2/ext/tryfunc" "github.com/hashicorp/hcl/v2/ext/tryfunc"
"github.com/hashicorp/hcl/v2/ext/typeexpr" "github.com/hashicorp/hcl/v2/ext/typeexpr"
"github.com/zclconf/go-cty/cty"
"github.com/zclconf/go-cty/cty/function" "github.com/zclconf/go-cty/cty/function"
"github.com/zclconf/go-cty/cty/function/stdlib" "github.com/zclconf/go-cty/cty/function/stdlib"
) )
@ -96,6 +99,7 @@ var stdlibFunctions = map[string]function.Function{
"substr": stdlib.SubstrFunc, "substr": stdlib.SubstrFunc,
"subtract": stdlib.SubtractFunc, "subtract": stdlib.SubtractFunc,
"timeadd": stdlib.TimeAddFunc, "timeadd": stdlib.TimeAddFunc,
"timestamp": timestampFunc,
"title": stdlib.TitleFunc, "title": stdlib.TitleFunc,
"trim": stdlib.TrimFunc, "trim": stdlib.TrimFunc,
"trimprefix": stdlib.TrimPrefixFunc, "trimprefix": stdlib.TrimPrefixFunc,
@ -109,3 +113,14 @@ var stdlibFunctions = map[string]function.Function{
"values": stdlib.ValuesFunc, "values": stdlib.ValuesFunc,
"zipmap": stdlib.ZipmapFunc, "zipmap": stdlib.ZipmapFunc,
} }
// timestampFunc constructs a function that returns a string representation of the current date and time.
//
// This function was imported from terraform's datetime utilities.
var timestampFunc = function.New(&function.Spec{
Params: []function.Parameter{},
Type: function.StaticReturnType(cty.String),
Impl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {
return cty.StringVal(time.Now().UTC().Format(time.RFC3339)), nil
},
})