mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-18 05:05:14 +00:00
87 lines
1.2 KiB
Markdown
87 lines
1.2 KiB
Markdown
# yaml-patch
|
|
|
|
`yaml-patch` is a version of Evan Phoenix's
|
|
[json-patch](https://github.com/evanphx/json-patch), which is an implementation
|
|
of [JavaScript Object Notation (JSON) Patch](https://tools.ietf.org/html/rfc6902),
|
|
but for YAML.
|
|
|
|
|
|
## Installing
|
|
|
|
`go get github.com/krishicks/yaml-patch`
|
|
|
|
If you want to use the CLI:
|
|
|
|
`go get github.com/krishicks/yaml-patch/cmd/yaml-patch`
|
|
|
|
## API
|
|
|
|
Given the following RFC6902-ish YAML document, `ops`:
|
|
|
|
```
|
|
---
|
|
- op: add
|
|
path: /baz/waldo
|
|
value: fred
|
|
```
|
|
|
|
And the following YAML that is to be modified, `src`:
|
|
|
|
```
|
|
---
|
|
foo: bar
|
|
baz:
|
|
quux: grault
|
|
```
|
|
|
|
Decode the ops file into a patch:
|
|
|
|
```
|
|
patch, err := yamlpatch.DecodePatch(ops)
|
|
// handle err
|
|
```
|
|
|
|
Then apply that patch to the document:
|
|
|
|
```
|
|
dst, err := patch.Apply(src)
|
|
// handle err
|
|
|
|
// do something with dst
|
|
```
|
|
|
|
### Example
|
|
|
|
```
|
|
doc := []byte(`---
|
|
foo: bar
|
|
baz:
|
|
quux: grault
|
|
`)
|
|
|
|
ops := []byte(`---
|
|
- op: add
|
|
path: /baz/waldo
|
|
value: fred
|
|
`)
|
|
|
|
patch, err := yamlpatch.DecodePatch(ops)
|
|
if err != nil {
|
|
log.Fatalf("decoding patch failed: %s", err)
|
|
}
|
|
|
|
bs, err := patch.Apply(doc)
|
|
if err != nil {
|
|
log.Fatalf("applying patch failed: %s", err)
|
|
}
|
|
|
|
fmt.Println(string(bs))
|
|
```
|
|
|
|
```
|
|
baz:
|
|
quux: grault
|
|
waldo: fred
|
|
foo: bar
|
|
```
|