yamlencode
Function
yamlencode
encodes a given value to a string using
YAML 1.2 (opens in a new tab) block syntax.
This function maps OpenTofu language values to YAML tags in the following way:
OpenTofu type | YAML type |
---|---|
string | !!str |
number | !!float or !!int |
bool | !!bool |
list(...) | !!seq |
set(...) | !!seq |
tuple(...) | !!seq |
map(...) | !!map |
object(...) | !!map |
Null value | !!null |
yamlencode
uses the implied syntaxes for all of the above types, so it does
not generate explicit YAML tags.
Because the YAML format cannot fully represent all of the OpenTofu language
types, passing the yamlencode
result to yamldecode
will not produce an
identical value, but the OpenTofu language automatic type conversion rules
mean that this is rarely a problem in practice.
YAML is a superset of JSON, and so where possible we recommend generating
JSON using jsonencode
instead, even if
a remote system supports YAML. JSON syntax is equivalent to flow-style YAML
and OpenTofu can present detailed structural change information for JSON
values in plans, whereas OpenTofu will treat block-style YAML just as a normal
multi-line string. However, generating YAML may improve readability if the
resulting value will be directly read or modified in the remote system by
humans.
Examples
> yamlencode({"a":"b", "c":"d"})
"a": "b"
"c": "d"
> yamlencode({"foo":[1, 2, 3], "bar": "baz"})
"bar": "baz"
"foo":
- 1
- 2
- 3
> yamlencode({"foo":[1, {"a":"b","c":"d"}, 3], "bar": "baz"})
"bar": "baz"
"foo":
- 1
- "a": "b"
"c": "d"
- 3
yamlencode
always uses YAML's "block style" for mappings and sequences, unless
the mapping or sequence is empty. To generate flow-style YAML, use
jsonencode
instead: YAML flow-style is a superset
of JSON syntax.
Related Functions
jsonencode
is a similar operation using JSON instead of YAML.yamldecode
performs the opposite operation, decoding a YAML string to obtain its represented value.