From c17a6ceb2af3afe9719eeca0b57a2bb831f3be6a Mon Sep 17 00:00:00 2001 From: Matt Moyer Date: Sat, 16 Jan 2016 23:54:04 +0000 Subject: [PATCH] Add a sha256(...) interpolation function. --- config/interpolate_funcs.go | 16 ++++++++++++++++ config/interpolate_funcs_test.go | 12 ++++++++++++ .../docs/configuration/interpolation.html.md | 6 +++++- 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/config/interpolate_funcs.go b/config/interpolate_funcs.go index 487efdd54b17..a0ceeeec4a27 100644 --- a/config/interpolate_funcs.go +++ b/config/interpolate_funcs.go @@ -3,6 +3,7 @@ package config import ( "bytes" "crypto/sha1" + "crypto/sha256" "encoding/base64" "encoding/hex" "errors" @@ -39,6 +40,7 @@ func Funcs() map[string]ast.Function { "replace": interpolationFuncReplace(), "split": interpolationFuncSplit(), "sha1": interpolationFuncSha1(), + "sha256": interpolationFuncSha256(), "base64encode": interpolationFuncBase64Encode(), "base64decode": interpolationFuncBase64Decode(), "upper": interpolationFuncUpper(), @@ -601,3 +603,17 @@ func interpolationFuncSha1() ast.Function { }, } } + +func interpolationFuncSha256() ast.Function { + return ast.Function{ + ArgTypes: []ast.Type{ast.TypeString}, + ReturnType: ast.TypeString, + Callback: func(args []interface{}) (interface{}, error) { + s := args[0].(string) + h := sha256.New() + h.Write([]byte(s)) + hash := hex.EncodeToString(h.Sum(nil)) + return hash, nil + }, + } +} diff --git a/config/interpolate_funcs_test.go b/config/interpolate_funcs_test.go index 8c633361d922..78139aa2da72 100644 --- a/config/interpolate_funcs_test.go +++ b/config/interpolate_funcs_test.go @@ -846,6 +846,18 @@ func TestInterpolateFuncSha1(t *testing.T) { }) } +func TestInterpolateFuncSha256(t *testing.T) { + testFunction(t, testFunctionConfig{ + Cases: []testFunctionCase{ + { + `${sha256("test")}`, + "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", + false, + }, + }, + }) +} + type testFunctionConfig struct { Cases []testFunctionCase Vars map[string]ast.Variable diff --git a/website/source/docs/configuration/interpolation.html.md b/website/source/docs/configuration/interpolation.html.md index 018aed599bc1..2b0c5af522d0 100644 --- a/website/source/docs/configuration/interpolation.html.md +++ b/website/source/docs/configuration/interpolation.html.md @@ -80,10 +80,14 @@ The supported built-in functions are: * `base64encode(string)` - Returns a base64-encoded representation of the given string. - * `sha1(string)` - Returns a sha1 hash representation of the + * `sha1(string)` - Returns a SHA-1 hash representation of the given string. Example: `"${sha1(concat(aws_vpc.default.tags.customer, "-s3-bucket"))}"` + * `sha256(string)` - Returns a SHA-256 hash representation of the + given string. + Example: `"${sha256(concat(aws_vpc.default.tags.customer, "-s3-bucket"))}"` + * `cidrhost(iprange, hostnum)` - Takes an IP address range in CIDR notation and creates an IP address with the given host number. For example, ``cidrhost("10.0.0.0/8", 2)`` returns ``10.0.0.2``.