mirror of
https://github.com/opentffoundation/opentf.git
synced 2025-12-21 02:37:43 -05:00
Signed-off-by: Janos <86970079+janosdebugs@users.noreply.github.com> Signed-off-by: Damian Stasik <920747+damianstasik@users.noreply.github.com> Signed-off-by: Roman Grinovski <roman.grinovski@gmail.com> Co-authored-by: Damian Stasik <920747+damianstasik@users.noreply.github.com> Co-authored-by: Roman Grinovski <roman.grinovski@gmail.com>
78 lines
2.5 KiB
Plaintext
78 lines
2.5 KiB
Plaintext
---
|
|
sidebar_label: yamlencode
|
|
description: The yamlencode function encodes a given value as a YAML string.
|
|
---
|
|
|
|
# `yamlencode` Function
|
|
|
|
`yamlencode` encodes a given value to a string using
|
|
[YAML 1.2](https://yaml.org/spec/1.2/spec.html) block syntax.
|
|
|
|
This function maps
|
|
[OpenTofu language values](../../language/expressions/types.mdx)
|
|
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`](../../language/functions/jsonencode.mdx) 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`](../../language/functions/jsonencode.mdx) instead: YAML flow-style is a superset
|
|
of JSON syntax.
|
|
|
|
## Related Functions
|
|
|
|
- [`jsonencode`](../../language/functions/jsonencode.mdx) is a similar operation using JSON instead
|
|
of YAML.
|
|
- [`yamldecode`](../../language/functions/yamldecode.mdx) performs the opposite operation, _decoding_
|
|
a YAML string to obtain its represented value.
|