diff options
Diffstat (limited to 'vendor/github.com/hashicorp/terraform/lang/funcs/datetime.go')
-rw-r--r-- | vendor/github.com/hashicorp/terraform/lang/funcs/datetime.go | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/vendor/github.com/hashicorp/terraform/lang/funcs/datetime.go b/vendor/github.com/hashicorp/terraform/lang/funcs/datetime.go new file mode 100644 index 0000000..5dae198 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform/lang/funcs/datetime.go | |||
@@ -0,0 +1,70 @@ | |||
1 | package funcs | ||
2 | |||
3 | import ( | ||
4 | "time" | ||
5 | |||
6 | "github.com/zclconf/go-cty/cty" | ||
7 | "github.com/zclconf/go-cty/cty/function" | ||
8 | ) | ||
9 | |||
10 | // TimestampFunc constructs a function that returns a string representation of the current date and time. | ||
11 | var TimestampFunc = function.New(&function.Spec{ | ||
12 | Params: []function.Parameter{}, | ||
13 | Type: function.StaticReturnType(cty.String), | ||
14 | Impl: func(args []cty.Value, retType cty.Type) (cty.Value, error) { | ||
15 | return cty.StringVal(time.Now().UTC().Format(time.RFC3339)), nil | ||
16 | }, | ||
17 | }) | ||
18 | |||
19 | // TimeAddFunc constructs a function that adds a duration to a timestamp, returning a new timestamp. | ||
20 | var TimeAddFunc = function.New(&function.Spec{ | ||
21 | Params: []function.Parameter{ | ||
22 | { | ||
23 | Name: "timestamp", | ||
24 | Type: cty.String, | ||
25 | }, | ||
26 | { | ||
27 | Name: "duration", | ||
28 | Type: cty.String, | ||
29 | }, | ||
30 | }, | ||
31 | Type: function.StaticReturnType(cty.String), | ||
32 | Impl: func(args []cty.Value, retType cty.Type) (cty.Value, error) { | ||
33 | ts, err := time.Parse(time.RFC3339, args[0].AsString()) | ||
34 | if err != nil { | ||
35 | return cty.UnknownVal(cty.String), err | ||
36 | } | ||
37 | duration, err := time.ParseDuration(args[1].AsString()) | ||
38 | if err != nil { | ||
39 | return cty.UnknownVal(cty.String), err | ||
40 | } | ||
41 | |||
42 | return cty.StringVal(ts.Add(duration).Format(time.RFC3339)), nil | ||
43 | }, | ||
44 | }) | ||
45 | |||
46 | // Timestamp returns a string representation of the current date and time. | ||
47 | // | ||
48 | // In the Terraform language, timestamps are conventionally represented as | ||
49 | // strings using RFC 3339 "Date and Time format" syntax, and so timestamp | ||
50 | // returns a string in this format. | ||
51 | func Timestamp() (cty.Value, error) { | ||
52 | return TimestampFunc.Call([]cty.Value{}) | ||
53 | } | ||
54 | |||
55 | // TimeAdd adds a duration to a timestamp, returning a new timestamp. | ||
56 | // | ||
57 | // In the Terraform language, timestamps are conventionally represented as | ||
58 | // strings using RFC 3339 "Date and Time format" syntax. Timeadd requires | ||
59 | // the timestamp argument to be a string conforming to this syntax. | ||
60 | // | ||
61 | // `duration` is a string representation of a time difference, consisting of | ||
62 | // sequences of number and unit pairs, like `"1.5h"` or `1h30m`. The accepted | ||
63 | // units are `ns`, `us` (or `µs`), `"ms"`, `"s"`, `"m"`, and `"h"`. The first | ||
64 | // number may be negative to indicate a negative duration, like `"-2h5m"`. | ||
65 | // | ||
66 | // The result is a string, also in RFC 3339 format, representing the result | ||
67 | // of adding the given direction to the given timestamp. | ||
68 | func TimeAdd(timestamp cty.Value, duration cty.Value) (cty.Value, error) { | ||
69 | return TimeAddFunc.Call([]cty.Value{timestamp, duration}) | ||
70 | } | ||