From 480de4f9889d8f4a1bd180f905cda1c461dc6b9e Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Tue, 3 Aug 2021 06:51:56 +0200 Subject: [PATCH] Add HCL `env` func Signed-off-by: CrazyMax --- bake/hclparser/stdlib.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/bake/hclparser/stdlib.go b/bake/hclparser/stdlib.go index 8ee31748..f0b30d05 100644 --- a/bake/hclparser/stdlib.go +++ b/bake/hclparser/stdlib.go @@ -1,12 +1,15 @@ package hclparser import ( + "os" + "github.com/hashicorp/go-cty-funcs/cidr" "github.com/hashicorp/go-cty-funcs/crypto" "github.com/hashicorp/go-cty-funcs/encoding" "github.com/hashicorp/go-cty-funcs/uuid" "github.com/hashicorp/hcl/v2/ext/tryfunc" "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/stdlib" ) @@ -38,6 +41,7 @@ var stdlibFunctions = map[string]function.Function{ "distinct": stdlib.DistinctFunc, "divide": stdlib.DivideFunc, "element": stdlib.ElementFunc, + "env": EnvFunc, "equal": stdlib.EqualFunc, "flatten": stdlib.FlattenFunc, "floor": stdlib.FloorFunc, @@ -109,3 +113,18 @@ var stdlibFunctions = map[string]function.Function{ "values": stdlib.ValuesFunc, "zipmap": stdlib.ZipmapFunc, } + +// EnvFunc is a function that retrieves the value of the environment +// variable named by the key. +var EnvFunc = function.New(&function.Spec{ + Params: []function.Parameter{ + { + Name: "key", + Type: cty.String, + }, + }, + Type: function.StaticReturnType(cty.String), + Impl: func(args []cty.Value, retType cty.Type) (cty.Value, error) { + return cty.StringVal(os.Getenv(args[0].AsString())), nil + }, +})