Documentation
¶
Index ¶
- Constants
- Variables
- func Clone(node *yaml.Node) *yaml.Node
- func Compare(yaml1, yaml2 []byte) bool
- func CopyMetadata(dst, src *yaml.Node)
- func EqualWithExclusion(a, b *yaml.Node, excludedPath ...string) bool
- func FindNode(node *yaml.Node, path string) (resultNode *yaml.Node, err error)
- func FindNodeValueOrDefault(node *yaml.Node, path string, defaultValue string) string
- func GetMappingValueNodesWithTags(node *yaml.Node) (nodes []*yaml.Node)
- func HasLockedTodos(node *yaml.Node) bool
- func IsLocal(node *yaml.Node) bool
- func IsLocked(node *yaml.Node) bool
- func IsOrgLocal(node *yaml.Node) bool
- func Merge(dst, src *yaml.Node, sameOrg bool) *yaml.Node
- func SetOrAddNodeValue(node *yaml.Node, path string, value string) error
- func TreeToYaml(tree *yaml.Node, indent int) (string, error)
- func UnmarshalStrict(data []byte, ptr any) error
- type File
- type KeyValuePair
- type Writer
- type WriterMock
Constants ¶
const ( TagLock = "!lock" TagLocal = "!local" TagOrgLocal = "!org-local" TagOrgLocalPlusLock = "!org-local+lock" )
Variables ¶
var CustomTags = []string{ TagLock, TagLocal, TagOrgLocal, TagOrgLocalPlusLock, }
var DiskWriter = writerFunc(func(file *File) error { return os.WriteFile(file.Path, file.Yaml, 0o644) })
var KnownTags = append(StandardTags, CustomTags...)
var StandardTags = []string{
"",
"!!int",
"!!bool",
"!!float",
"!!map",
"!!str",
"!!seq",
"!!null",
"!!merge",
}
Functions ¶
func Compare ¶
Compare returns true if the two yaml documents are equivalent in terms of contents and comments, false otherwise, disregarding differences in formatting / whitespace.
func CopyMetadata ¶ added in v0.98.0
CopyMetadata reconciles dst to the authored form of src, restoring presentation that is lost when a tree is rebuilt from JSON (e.g. after applying a JSON Patch). It copies, onto matching nodes:
- custom YAML tags (those in CustomTags, e.g. !lock),
- head/line/foot comments,
- and, for mappings, src's key order (keys present only in dst — e.g. added by a patch — are kept and appended after the src-ordered ones).
It walks both trees in parallel, stopping on any branch where the nodes are nil or differ in kind (i.e. structurally changed relative to src). It never moves data between branches: every dst node is preserved.
Sequence *elements* are not reconciled: a JSON Patch may add/remove/move items, so matching by index is unreliable and would risk copying metadata onto the wrong element. The sequence node's own tag/comments are still restored; per-element metadata inside sequences is a known limitation.
func EqualWithExclusion ¶ added in v0.21.0
func FindNode ¶
FindNode traverses a given yaml.Node to locate the value Node of the provided path. The path is interpreted as being relative to the given yaml.Node.
func FindNodeValueOrDefault ¶
func GetMappingValueNodesWithTags ¶ added in v0.94.0
func HasLockedTodos ¶ added in v0.51.0
func IsOrgLocal ¶ added in v0.87.0
func UnmarshalStrict ¶ added in v0.54.4
Types ¶
type File ¶
type File struct {
// Path is the path to the yaml file.
Path string
// Yaml is the raw yaml of the yaml file.
Yaml []byte
// Tree is the root node of the tree representation of the yaml file.
Tree *yaml.Node
// ApiVersion is the API version of the CRD, if any.
ApiVersion string
// Kind is the kind of the CRD, if any.
Kind string
// MetadataName is the name of the CRD resource, if any.
MetadataName string
// Indent is the indent size of the yaml file to be used when writing it back to disk.
Indent int
}
File represents a yaml file loaded into memory in different forms, that can be round-tripped back to disk.
func NewFileFromObject ¶ added in v0.46.2
func NewFileFromTree ¶
func (*File) UpdateYamlFromTree ¶
type KeyValuePair ¶ added in v0.20.2
func FindNodeKeyPair ¶ added in v0.94.0
func FindNodeKeyPair(node *yaml.Node, path string) (keypair *KeyValuePair, err error)
FindNodeKeyPair traverses a given yaml.Node to locate the value Node of the provided path. The path is interpreted as being relative to the given yaml.Node.
type WriterMock ¶ added in v0.39.0
type WriterMock struct {
// WriteFileFunc mocks the WriteFile method.
WriteFileFunc func(file *File) error
// contains filtered or unexported fields
}
WriterMock is a mock implementation of Writer.
func TestSomethingThatUsesWriter(t *testing.T) {
// make and configure a mocked Writer
mockedWriter := &WriterMock{
WriteFileFunc: func(file *File) error {
panic("mock out the WriteFile method")
},
}
// use mockedWriter in code that requires Writer
// and then make assertions.
}
func (*WriterMock) WriteFile ¶ added in v0.39.0
func (mock *WriterMock) WriteFile(file *File) error
WriteFile calls WriteFileFunc.
func (*WriterMock) WriteFileCalls ¶ added in v0.39.0
func (mock *WriterMock) WriteFileCalls() []struct { File *File }
WriteFileCalls gets all the calls that were made to WriteFile. Check the length with:
len(mockedWriter.WriteFileCalls())