github.com/beauknowssoftware/makehcl@v0.0.0-20200322000747-1b9bb1e1c008/internal/functions/functions.go (about) 1 package functions 2 3 import ( 4 "github.com/hashicorp/hcl/v2/ext/tryfunc" 5 "github.com/hashicorp/terraform/lang/funcs" 6 ctyyaml "github.com/zclconf/go-cty-yaml" 7 "github.com/zclconf/go-cty/cty" 8 "github.com/zclconf/go-cty/cty/function" 9 "github.com/zclconf/go-cty/cty/function/stdlib" 10 ) 11 12 func mergeFunctions(ms ...map[string]function.Function) map[string]function.Function { 13 r := make(map[string]function.Function) 14 15 for _, m := range ms { 16 for k, v := range m { 17 r[k] = v 18 } 19 } 20 21 return r 22 } 23 24 var customFunctions = map[string]function.Function{ 25 "exists": function.New(&ExistsSpec), 26 "filename": function.New(&FilenameSpec), 27 "glob": function.New(&GlobSpec), 28 "path": function.New(&PathSpec), 29 "concat": function.New(&ConcatSpec), 30 "shell": function.New(&ShellSpec), 31 } 32 33 func getTerraformFunctions(wd string) map[string]function.Function { 34 return map[string]function.Function{ 35 "abs": stdlib.AbsoluteFunc, 36 "abspath": funcs.AbsPathFunc, 37 "basename": funcs.BasenameFunc, 38 "base64decode": funcs.Base64DecodeFunc, 39 "base64encode": funcs.Base64EncodeFunc, 40 "base64gzip": funcs.Base64GzipFunc, 41 "base64sha256": funcs.Base64Sha256Func, 42 "base64sha512": funcs.Base64Sha512Func, 43 "bcrypt": funcs.BcryptFunc, 44 "can": tryfunc.CanFunc, 45 "ceil": stdlib.CeilFunc, 46 "chomp": stdlib.ChompFunc, 47 "cidrhost": funcs.CidrHostFunc, 48 "cidrnetmask": funcs.CidrNetmaskFunc, 49 "cidrsubnet": funcs.CidrSubnetFunc, 50 "cidrsubnets": funcs.CidrSubnetsFunc, 51 "coalesce": funcs.CoalesceFunc, 52 "coalescelist": stdlib.CoalesceListFunc, 53 "compact": stdlib.CompactFunc, 54 "contains": stdlib.ContainsFunc, 55 "csvdecode": stdlib.CSVDecodeFunc, 56 "dirname": funcs.DirnameFunc, 57 "distinct": stdlib.DistinctFunc, 58 "element": stdlib.ElementFunc, 59 "chunklist": stdlib.ChunklistFunc, 60 "file": funcs.MakeFileFunc(wd, false), 61 "fileexists": funcs.MakeFileExistsFunc(wd), 62 "fileset": funcs.MakeFileSetFunc(wd), 63 "filebase64": funcs.MakeFileFunc(wd, true), 64 "filebase64sha256": funcs.MakeFileBase64Sha256Func(wd), 65 "filebase64sha512": funcs.MakeFileBase64Sha512Func(wd), 66 "filemd5": funcs.MakeFileMd5Func(wd), 67 "filesha1": funcs.MakeFileSha1Func(wd), 68 "filesha256": funcs.MakeFileSha256Func(wd), 69 "filesha512": funcs.MakeFileSha512Func(wd), 70 "flatten": stdlib.FlattenFunc, 71 "floor": stdlib.FloorFunc, 72 "format": stdlib.FormatFunc, 73 "formatdate": stdlib.FormatDateFunc, 74 "formatlist": stdlib.FormatListFunc, 75 "indent": stdlib.IndentFunc, 76 "index": funcs.IndexFunc, // stdlib.IndexFunc is not compatible 77 "join": stdlib.JoinFunc, 78 "jsondecode": stdlib.JSONDecodeFunc, 79 "jsonencode": stdlib.JSONEncodeFunc, 80 "keys": stdlib.KeysFunc, 81 "length": funcs.LengthFunc, 82 "list": funcs.ListFunc, 83 "log": stdlib.LogFunc, 84 "lookup": funcs.LookupFunc, 85 "lower": stdlib.LowerFunc, 86 "map": funcs.MapFunc, 87 "matchkeys": funcs.MatchkeysFunc, 88 "max": stdlib.MaxFunc, 89 "md5": funcs.Md5Func, 90 "merge": stdlib.MergeFunc, 91 "min": stdlib.MinFunc, 92 "parseint": stdlib.ParseIntFunc, 93 "pathexpand": funcs.PathExpandFunc, 94 "pow": stdlib.PowFunc, 95 "range": stdlib.RangeFunc, 96 "regex": stdlib.RegexFunc, 97 "regexall": stdlib.RegexAllFunc, 98 "replace": funcs.ReplaceFunc, 99 "reverse": stdlib.ReverseListFunc, 100 "rsadecrypt": funcs.RsaDecryptFunc, 101 "setintersection": stdlib.SetIntersectionFunc, 102 "setproduct": stdlib.SetProductFunc, 103 "setsubtract": stdlib.SetSubtractFunc, 104 "setunion": stdlib.SetUnionFunc, 105 "sha1": funcs.Sha1Func, 106 "sha256": funcs.Sha256Func, 107 "sha512": funcs.Sha512Func, 108 "signum": stdlib.SignumFunc, 109 "slice": stdlib.SliceFunc, 110 "sort": stdlib.SortFunc, 111 "split": stdlib.SplitFunc, 112 "strrev": stdlib.ReverseFunc, 113 "substr": stdlib.SubstrFunc, 114 "timestamp": funcs.TimestampFunc, 115 "timeadd": stdlib.TimeAddFunc, 116 "title": stdlib.TitleFunc, 117 "tostring": funcs.MakeToFunc(cty.String), 118 "tonumber": funcs.MakeToFunc(cty.Number), 119 "tobool": funcs.MakeToFunc(cty.Bool), 120 "toset": funcs.MakeToFunc(cty.Set(cty.DynamicPseudoType)), 121 "tolist": funcs.MakeToFunc(cty.List(cty.DynamicPseudoType)), 122 "tomap": funcs.MakeToFunc(cty.Map(cty.DynamicPseudoType)), 123 "transpose": funcs.TransposeFunc, 124 "trim": stdlib.TrimFunc, 125 "trimprefix": stdlib.TrimPrefixFunc, 126 "trimspace": stdlib.TrimSpaceFunc, 127 "trimsuffix": stdlib.TrimSuffixFunc, 128 "try": tryfunc.TryFunc, 129 "upper": stdlib.UpperFunc, 130 "urlencode": funcs.URLEncodeFunc, 131 "uuid": funcs.UUIDFunc, 132 "uuidv5": funcs.UUIDV5Func, 133 "values": stdlib.ValuesFunc, 134 "yamldecode": ctyyaml.YAMLDecodeFunc, 135 "yamlencode": ctyyaml.YAMLEncodeFunc, 136 "zipmap": stdlib.ZipmapFunc, 137 } 138 } 139 140 func GetFunctions(wd string) map[string]function.Function { 141 return mergeFunctions( 142 customFunctions, 143 getTerraformFunctions(wd), 144 ) 145 }