mirror of
https://github.com/mikefarah/yq.git
synced 2026-06-29 08:38:48 +00:00
* feat: K8S KYAML output format support Reference: https://github.com/kubernetes/enhancements/blob/master/keps/sig-cli/5295-kyaml/README.md Co-authored-by: Codex <codex@openai.com> Generated-with: OpenAI Codex CLI (partial) Signed-off-by: Robin H. Johnson <rjohnson@coreweave.com> * build: gomodcache/gocache should not be committed Signed-off-by: Robin H. Johnson <rjohnson@coreweave.com> * chore: fix spelling of behaviour Signed-off-by: Robin H. Johnson <robbat2@gentoo.org> * build: pass GOFLAGS to docker to support buildvcs=false In trying to develop the KYAML support, various tests gave false positive results because they made assumptions about Git functionality Make it possible to avoid that by passing GOFLAGS='-buildvcs=false' to to Makefile. Signed-off-by: Robin H. Johnson <robbat2@gentoo.org> * doc: cover documentScenarios for tests Signed-off-by: Robin H. Johnson <rjohnson@coreweave.com> * build: exclude go caches from gosec Without tuning, gosec scans all of the vendor/gocache/gomodcache, taking several minutes (3m35 here), whereas the core of the yq takes only 15 seconds to scan. If we intend to remediate upstream issues in future; add a seperate target to scan those. Signed-off-by: Robin H. Johnson <rjohnson@coreweave.com> --------- Signed-off-by: Robin H. Johnson <rjohnson@coreweave.com> Signed-off-by: Robin H. Johnson <robbat2@gentoo.org> Co-authored-by: Codex <codex@openai.com>
254 lines
3.1 KiB
Markdown
254 lines
3.1 KiB
Markdown
# KYaml
|
|
|
|
Encode and decode to and from KYaml (a restricted subset of YAML that uses flow-style collections).
|
|
|
|
KYaml is useful when you want YAML data rendered in a compact, JSON-like form while still supporting YAML features like comments.
|
|
|
|
Notes:
|
|
- Strings are always double-quoted in KYaml output.
|
|
- Anchors and aliases are expanded (KYaml output does not emit them).
|
|
|
|
## Encode kyaml: plain string scalar
|
|
Strings are always double-quoted in KYaml output.
|
|
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
cat
|
|
|
|
```
|
|
then
|
|
```bash
|
|
yq -o=kyaml '.' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
"cat"
|
|
```
|
|
|
|
## encode flow mapping and sequence
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
a: b
|
|
c:
|
|
- d
|
|
|
|
```
|
|
then
|
|
```bash
|
|
yq -o=kyaml '.' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
{
|
|
a: "b",
|
|
c: [
|
|
"d",
|
|
],
|
|
}
|
|
```
|
|
|
|
## encode non-string scalars
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
a: 12
|
|
b: true
|
|
c: null
|
|
d: "true"
|
|
|
|
```
|
|
then
|
|
```bash
|
|
yq -o=kyaml '.' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
{
|
|
a: 12,
|
|
b: true,
|
|
c: null,
|
|
d: "true",
|
|
}
|
|
```
|
|
|
|
## quote non-identifier keys
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
"1a": b
|
|
"has space": c
|
|
|
|
```
|
|
then
|
|
```bash
|
|
yq -o=kyaml '.' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
{
|
|
"1a": "b",
|
|
"has space": "c",
|
|
}
|
|
```
|
|
|
|
## escape quoted strings
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
a: "line1\nline2\t\"q\""
|
|
|
|
```
|
|
then
|
|
```bash
|
|
yq -o=kyaml '.' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
{
|
|
a: "line1\nline2\t\"q\"",
|
|
}
|
|
```
|
|
|
|
## preserve comments when encoding
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
# leading
|
|
a: 1 # a line
|
|
# head b
|
|
b: 2
|
|
c:
|
|
# head d
|
|
- d # d line
|
|
- e
|
|
# trailing
|
|
|
|
```
|
|
then
|
|
```bash
|
|
yq -o=kyaml '.' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
# leading
|
|
{
|
|
a: 1, # a line
|
|
# head b
|
|
b: 2,
|
|
c: [
|
|
# head d
|
|
"d", # d line
|
|
"e",
|
|
],
|
|
# trailing
|
|
}
|
|
```
|
|
|
|
## Encode kyaml: anchors and aliases
|
|
KYaml output does not support anchors/aliases; they are expanded to concrete values.
|
|
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
base: &base
|
|
a: b
|
|
copy: *base
|
|
|
|
```
|
|
then
|
|
```bash
|
|
yq -o=kyaml '.' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
{
|
|
base: {
|
|
a: "b",
|
|
},
|
|
copy: {
|
|
a: "b",
|
|
},
|
|
}
|
|
```
|
|
|
|
## Encode kyaml: yaml to kyaml shows formatting differences
|
|
KYaml uses flow-style collections (braces/brackets) and explicit commas.
|
|
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
person:
|
|
name: John
|
|
pets:
|
|
- cat
|
|
- dog
|
|
|
|
```
|
|
then
|
|
```bash
|
|
yq -o=kyaml '.' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
{
|
|
person: {
|
|
name: "John",
|
|
pets: [
|
|
"cat",
|
|
"dog",
|
|
],
|
|
},
|
|
}
|
|
```
|
|
|
|
## Encode kyaml: nested lists of objects
|
|
Lists and objects can be nested arbitrarily; KYaml always uses flow-style collections.
|
|
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
- name: a
|
|
items:
|
|
- id: 1
|
|
tags:
|
|
- k: x
|
|
v: y
|
|
- k: x2
|
|
v: y2
|
|
- id: 2
|
|
tags:
|
|
- k: z
|
|
v: w
|
|
|
|
```
|
|
then
|
|
```bash
|
|
yq -o=kyaml '.' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
[
|
|
{
|
|
name: "a",
|
|
items: [
|
|
{
|
|
id: 1,
|
|
tags: [
|
|
{
|
|
k: "x",
|
|
v: "y",
|
|
},
|
|
{
|
|
k: "x2",
|
|
v: "y2",
|
|
},
|
|
],
|
|
},
|
|
{
|
|
id: 2,
|
|
tags: [
|
|
{
|
|
k: "z",
|
|
v: "w",
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
]
|
|
```
|
|
|