mirror of
https://github.com/k3s-io/k3s.git
synced 2024-06-07 19:41:36 +00:00
e8381db778
* Update Kubernetes to v1.21.0 * Update to golang v1.16.2 * Update dependent modules to track with upstream * Switch to upstream flannel * Track changes to upstream cloud-controller-manager and FeatureGates Signed-off-by: Brad Davidson <brad.davidson@rancher.com>
77 lines
2.2 KiB
Go
77 lines
2.2 KiB
Go
// Copyright 2019 The Kubernetes Authors.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package yaml
|
|
|
|
import "gopkg.in/yaml.v3"
|
|
|
|
func DoSerializationHacksOnNodes(nodes []*RNode) {
|
|
for _, node := range nodes {
|
|
DoSerializationHacks(node.YNode())
|
|
}
|
|
}
|
|
|
|
// DoSerializationHacks addresses a bug in yaml V3 upstream, it parses the yaml node,
|
|
// and rearranges the head comments of the children of sequence node.
|
|
// Refer to https://github.com/go-yaml/yaml/issues/587 for more details
|
|
func DoSerializationHacks(node *yaml.Node) {
|
|
switch node.Kind {
|
|
case DocumentNode:
|
|
for _, node := range node.Content {
|
|
DoSerializationHacks(node)
|
|
}
|
|
|
|
case MappingNode:
|
|
for _, node := range node.Content {
|
|
DoSerializationHacks(node)
|
|
}
|
|
|
|
case SequenceNode:
|
|
for _, node := range node.Content {
|
|
// for each child mapping node, transfer the head comment of it's
|
|
// first child scalar node to the head comment of itself
|
|
// This is necessary to address serialization issue
|
|
// https://github.com/go-yaml/yaml/issues/587 in go-yaml.v3
|
|
// Remove this hack when the issue has been resolved
|
|
if len(node.Content) > 0 && node.Content[0].Kind == ScalarNode {
|
|
node.HeadComment = node.Content[0].HeadComment
|
|
node.Content[0].HeadComment = ""
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func UndoSerializationHacksOnNodes(nodes []*RNode) {
|
|
for _, node := range nodes {
|
|
UndoSerializationHacks(node.YNode())
|
|
}
|
|
}
|
|
|
|
// UndoSerializationHacks reverts the changes made by DoSerializationHacks
|
|
// Refer to https://github.com/go-yaml/yaml/issues/587 for more details
|
|
func UndoSerializationHacks(node *yaml.Node) {
|
|
switch node.Kind {
|
|
case DocumentNode:
|
|
for _, node := range node.Content {
|
|
DoSerializationHacks(node)
|
|
}
|
|
|
|
case MappingNode:
|
|
for _, node := range node.Content {
|
|
DoSerializationHacks(node)
|
|
}
|
|
|
|
case SequenceNode:
|
|
for _, node := range node.Content {
|
|
// revert the changes made in DoSerializationHacks
|
|
// This is necessary to address serialization issue
|
|
// https://github.com/go-yaml/yaml/issues/587 in go-yaml.v3
|
|
// Remove this hack when the issue has been resolved
|
|
if len(node.Content) > 0 && node.Content[0].Kind == ScalarNode {
|
|
node.Content[0].HeadComment = node.HeadComment
|
|
node.HeadComment = ""
|
|
}
|
|
}
|
|
}
|
|
}
|