lang/functions: set functions from cty
The sethaselement, setintersection, and setunion functions are defined in the cty stdlib. Making them available in Terraform will make it easier to work with sets, and complement the currently-Terraform-specific setproduct function. In the long run setproduct should probably move into the cty stdlib too, but since it was submitted as a Terraform function originally we'll leave it here now for simplicity's sake and reorganize later.
This commit is contained in:
parent
edb5f82de1
commit
da51e72cbb
|
@ -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 {
|
||||
|
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
|
@ -171,10 +171,22 @@
|
|||
<a href="/docs/configuration/functions/merge.html">merge</a>
|
||||
</li>
|
||||
|
||||
<li<%= sidebar_current("docs-funcs-collection-sethaselement") %>>
|
||||
<a href="/docs/configuration/functions/sethaselement.html">sethaselement</a>
|
||||
</li>
|
||||
|
||||
<li<%= sidebar_current("docs-funcs-collection-setintersection") %>>
|
||||
<a href="/docs/configuration/functions/setintersection.html">setintersection</a>
|
||||
</li>
|
||||
|
||||
<li<%= sidebar_current("docs-funcs-collection-setproduct") %>>
|
||||
<a href="/docs/configuration/functions/setproduct.html">setproduct</a>
|
||||
</li>
|
||||
|
||||
<li<%= sidebar_current("docs-funcs-collection-setunion") %>>
|
||||
<a href="/docs/configuration/functions/setunion.html">setunion</a>
|
||||
</li>
|
||||
|
||||
<li<%= sidebar_current("docs-funcs-collection-slice") %>>
|
||||
<a href="/docs/configuration/functions/slice.html">slice</a>
|
||||
</li>
|
||||
|
|
Loading…
Reference in New Issue