mirror of
https://github.com/hashicorp/packer.git
synced 2026-05-24 02:48:47 -04:00
cty's new "refinements" concept allows us to reduce the range of unknown values from our functions. This initial changeset focuses only on declaring which functions are guaranteed to return a non-null result, which is a helpful baseline refinement because it allows "== null" and "!= null" tests to produce known results even when the given value is otherwise unknown. This commit also includes some updates to test results that are now refined based on cty's own built-in refinement behaviors, just as a result of us having updated cty in the previous commit.
36 lines
876 B
Go
36 lines
876 B
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
package function
|
|
|
|
import (
|
|
"os"
|
|
|
|
"github.com/zclconf/go-cty/cty"
|
|
"github.com/zclconf/go-cty/cty/function"
|
|
)
|
|
|
|
// EnvFunc constructs a function that returns a string representation of the
|
|
// env var behind a value
|
|
var EnvFunc = function.New(&function.Spec{
|
|
Params: []function.Parameter{
|
|
{
|
|
Name: "key",
|
|
Type: cty.String,
|
|
AllowNull: false,
|
|
AllowUnknown: false,
|
|
},
|
|
},
|
|
Type: function.StaticReturnType(cty.String),
|
|
RefineResult: refineNotNull,
|
|
Impl: func(args []cty.Value, retType cty.Type) (cty.Value, error) {
|
|
key := args[0].AsString()
|
|
value := os.Getenv(key)
|
|
return cty.StringVal(value), nil
|
|
},
|
|
})
|
|
|
|
// Env returns a string representation of the env var behind key.
|
|
func Env(key cty.Value) (cty.Value, error) {
|
|
return EnvFunc.Call([]cty.Value{key})
|
|
}
|