diff --git a/lang/functions.go b/lang/functions.go index 6b03a1271..d133d3906 100644 --- a/lang/functions.go +++ b/lang/functions.go @@ -29,77 +29,80 @@ func (s *Scope) Functions() map[string]function.Function { // that would be useful to all applications using cty functions. s.funcs = map[string]function.Function{ - "abs": stdlib.AbsoluteFunc, - "basename": funcs.BasenameFunc, - "base64decode": funcs.Base64DecodeFunc, - "base64encode": funcs.Base64EncodeFunc, - "base64gzip": funcs.Base64GzipFunc, - "base64sha256": funcs.Base64Sha256Func, - "base64sha512": funcs.Base64Sha512Func, - "bcrypt": funcs.BcryptFunc, - "ceil": funcs.CeilFunc, - "chomp": funcs.ChompFunc, - "cidrhost": funcs.CidrHostFunc, - "cidrnetmask": funcs.CidrNetmaskFunc, - "cidrsubnet": funcs.CidrSubnetFunc, - "coalesce": stdlib.CoalesceFunc, - "coalescelist": funcs.CoalesceListFunc, - "compact": funcs.CompactFunc, - "concat": stdlib.ConcatFunc, - "contains": funcs.ContainsFunc, - "csvdecode": stdlib.CSVDecodeFunc, - "dirname": funcs.DirnameFunc, - "distinct": funcs.DistinctFunc, - "element": funcs.ElementFunc, - "chunklist": funcs.ChunklistFunc, - "file": funcs.MakeFileFunc(s.BaseDir, false), - "fileexists": funcs.MakeFileExistsFunc(s.BaseDir), - "filebase64": funcs.MakeFileFunc(s.BaseDir, true), - "flatten": funcs.FlattenFunc, - "floor": funcs.FloorFunc, - "format": stdlib.FormatFunc, - "formatdate": stdlib.FormatDateFunc, - "formatlist": stdlib.FormatListFunc, - "indent": funcs.IndentFunc, - "index": funcs.IndexFunc, - "join": funcs.JoinFunc, - "jsondecode": stdlib.JSONDecodeFunc, - "jsonencode": stdlib.JSONEncodeFunc, - "keys": funcs.KeysFunc, - "length": funcs.LengthFunc, - "list": funcs.ListFunc, - "log": funcs.LogFunc, - "lookup": funcs.LookupFunc, - "lower": stdlib.LowerFunc, - "map": funcs.MapFunc, - "matchkeys": funcs.MatchkeysFunc, - "max": stdlib.MaxFunc, - "md5": funcs.Md5Func, - "merge": funcs.MergeFunc, - "min": stdlib.MinFunc, - "pathexpand": funcs.PathExpandFunc, - "pow": funcs.PowFunc, - "replace": funcs.ReplaceFunc, - "rsadecrypt": funcs.RsaDecryptFunc, - "setproduct": funcs.SetProductFunc, - "sha1": funcs.Sha1Func, - "sha256": funcs.Sha256Func, - "sha512": funcs.Sha512Func, - "signum": funcs.SignumFunc, - "slice": funcs.SliceFunc, - "sort": funcs.SortFunc, - "split": funcs.SplitFunc, - "substr": stdlib.SubstrFunc, - "timestamp": funcs.TimestampFunc, - "timeadd": funcs.TimeAddFunc, - "title": funcs.TitleFunc, - "transpose": funcs.TransposeFunc, - "trimspace": funcs.TrimSpaceFunc, - "upper": stdlib.UpperFunc, - "urlencode": funcs.URLEncodeFunc, - "uuid": funcs.UUIDFunc, - "values": funcs.ValuesFunc, - "zipmap": funcs.ZipmapFunc, + "abs": stdlib.AbsoluteFunc, + "basename": funcs.BasenameFunc, + "base64decode": funcs.Base64DecodeFunc, + "base64encode": funcs.Base64EncodeFunc, + "base64gzip": funcs.Base64GzipFunc, + "base64sha256": funcs.Base64Sha256Func, + "base64sha512": funcs.Base64Sha512Func, + "bcrypt": funcs.BcryptFunc, + "ceil": funcs.CeilFunc, + "chomp": funcs.ChompFunc, + "cidrhost": funcs.CidrHostFunc, + "cidrnetmask": funcs.CidrNetmaskFunc, + "cidrsubnet": funcs.CidrSubnetFunc, + "coalesce": stdlib.CoalesceFunc, + "coalescelist": funcs.CoalesceListFunc, + "compact": funcs.CompactFunc, + "concat": stdlib.ConcatFunc, + "contains": funcs.ContainsFunc, + "csvdecode": stdlib.CSVDecodeFunc, + "dirname": funcs.DirnameFunc, + "distinct": funcs.DistinctFunc, + "element": funcs.ElementFunc, + "chunklist": funcs.ChunklistFunc, + "file": funcs.MakeFileFunc(s.BaseDir, false), + "fileexists": funcs.MakeFileExistsFunc(s.BaseDir), + "filebase64": funcs.MakeFileFunc(s.BaseDir, true), + "flatten": funcs.FlattenFunc, + "floor": funcs.FloorFunc, + "format": stdlib.FormatFunc, + "formatdate": stdlib.FormatDateFunc, + "formatlist": stdlib.FormatListFunc, + "indent": funcs.IndentFunc, + "index": funcs.IndexFunc, + "join": funcs.JoinFunc, + "jsondecode": stdlib.JSONDecodeFunc, + "jsonencode": stdlib.JSONEncodeFunc, + "keys": funcs.KeysFunc, + "length": funcs.LengthFunc, + "list": funcs.ListFunc, + "log": funcs.LogFunc, + "lookup": funcs.LookupFunc, + "lower": stdlib.LowerFunc, + "map": funcs.MapFunc, + "matchkeys": funcs.MatchkeysFunc, + "max": stdlib.MaxFunc, + "md5": funcs.Md5Func, + "merge": funcs.MergeFunc, + "min": stdlib.MinFunc, + "pathexpand": funcs.PathExpandFunc, + "pow": funcs.PowFunc, + "replace": funcs.ReplaceFunc, + "rsadecrypt": funcs.RsaDecryptFunc, + "sethaselement": stdlib.SetHasElementFunc, + "setintersection": stdlib.SetIntersectionFunc, + "setproduct": funcs.SetProductFunc, + "setunion": stdlib.SetUnionFunc, + "sha1": funcs.Sha1Func, + "sha256": funcs.Sha256Func, + "sha512": funcs.Sha512Func, + "signum": funcs.SignumFunc, + "slice": funcs.SliceFunc, + "sort": funcs.SortFunc, + "split": funcs.SplitFunc, + "substr": stdlib.SubstrFunc, + "timestamp": funcs.TimestampFunc, + "timeadd": funcs.TimeAddFunc, + "title": funcs.TitleFunc, + "transpose": funcs.TransposeFunc, + "trimspace": funcs.TrimSpaceFunc, + "upper": stdlib.UpperFunc, + "urlencode": funcs.URLEncodeFunc, + "uuid": funcs.UUIDFunc, + "values": funcs.ValuesFunc, + "zipmap": funcs.ZipmapFunc, } s.funcs["templatefile"] = funcs.MakeTemplateFileFunc(s.BaseDir, func() map[string]function.Function { diff --git a/website/docs/configuration/functions/sethaselement.html.md b/website/docs/configuration/functions/sethaselement.html.md new file mode 100644 index 000000000..e60059a94 --- /dev/null +++ b/website/docs/configuration/functions/sethaselement.html.md @@ -0,0 +1,33 @@ +--- +layout: "functions" +page_title: "sethaselement - Functions - Configuration Language" +sidebar_current: "docs-funcs-collection-sethaselement" +description: |- + The sethaselement function tests whether a given value is in a given set. +--- + +# `sethaselement` Function + +The `sethaselement` function tests whether a given value is in a given set. + +```hcl +sethaselement(set, value) +``` + +## Examples + +``` +> sethaselement(["a", "b"], "b") +true +> sethaselement(["a", "b"], "c") +false +``` + +## Related Functions + +* [`setintersection`](./setintersection.html) computes the _intersection_ of + multiple sets. +* [`setproduct`](./setproduct.html) computes the _cartesian product_ of multiple + sets. +* [`setunion`](./setunion.html) computes the _union_ of + multiple sets. diff --git a/website/docs/configuration/functions/setintersection.html.md b/website/docs/configuration/functions/setintersection.html.md new file mode 100644 index 000000000..d3ae11eca --- /dev/null +++ b/website/docs/configuration/functions/setintersection.html.md @@ -0,0 +1,40 @@ +--- +layout: "functions" +page_title: "setintersection - Functions - Configuration Language" +sidebar_current: "docs-funcs-collection-setintersection" +description: |- + The setintersection function takes multiple sets and produces a single set + containing only the elements that all of the given sets have in common. +--- + +# `setintersection` Function + +The `setintersection` function takes multiple sets and produces a single set +containing only the elements that all of the given sets have in common. +In other words, it computes the +[intersection](https://en.wikipedia.org/wiki/Intersection_(set_theory)) of the sets. + +```hcl +setintersection(sets...) +``` + +## Examples + +``` +> setintersection(["a", "b"], ["b", "c"], ["b", "d"]) +[ + "b", +] +``` + +The given arguments are converted to sets, so the result is also a set and +the ordering of the given elements is not preserved. + +## Related Functions + +* [`sethaselement`](./sethaselement.html) tests whether a given set contains + a given element value. +* [`setproduct`](./setproduct.html) computes the _cartesian product_ of multiple + sets. +* [`setunion`](./setunion.html) computes the _union_ of + multiple sets. diff --git a/website/docs/configuration/functions/setproduct.html.md b/website/docs/configuration/functions/setproduct.html.md index 2ccb74e6d..30cdf1979 100644 --- a/website/docs/configuration/functions/setproduct.html.md +++ b/website/docs/configuration/functions/setproduct.html.md @@ -113,3 +113,12 @@ elements all have a consistent type: ], ] ``` + +## Related Functions + +* [`sethaselement`](./sethaselement.html) tests whether a given set contains + a given element value. +* [`setintersection`](./setintersection.html) computes the _intersection_ of + multiple sets. +* [`setunion`](./setunion.html) computes the _union_ of multiple + sets. diff --git a/website/docs/configuration/functions/setunion.html.md b/website/docs/configuration/functions/setunion.html.md new file mode 100644 index 000000000..1636d20a4 --- /dev/null +++ b/website/docs/configuration/functions/setunion.html.md @@ -0,0 +1,43 @@ +--- +layout: "functions" +page_title: "setunion - Functions - Configuration Language" +sidebar_current: "docs-funcs-collection-setunion" +description: |- + The setunion function takes multiple sets and produces a single set + containing the elements from all of the given sets. +--- + +# `setunion` Function + +The `setunion` function takes multiple sets and produces a single set +containing the elements from all of the given sets. In other words, it +computes the [union](https://en.wikipedia.org/wiki/Union_(set_theory)) of +the sets. + +```hcl +setunion(sets...) +``` + +## Examples + +``` +> setunion(["a", "b"], ["b", "c"], ["d"]) +[ + "d", + "b", + "c", + "a", +] +``` + +The given arguments are converted to sets, so the result is also a set and +the ordering of the given elements is not preserved. + +## Related Functions + +* [`sethaselement`](./sethaselement.html) tests whether a given set contains + a given element value. +* [`setintersection`](./setintersection.html) computes the _intersection_ of + multiple sets. +* [`setproduct`](./setproduct.html) computes the _cartesian product_ of multiple + sets. diff --git a/website/layouts/functions.erb b/website/layouts/functions.erb index 2546c67b1..9c77cf089 100644 --- a/website/layouts/functions.erb +++ b/website/layouts/functions.erb @@ -171,10 +171,22 @@ merge + > + sethaselement + + + > + setintersection + + > setproduct + > + setunion + + > slice