1
0
mirror of https://github.com/rancher/norman.git synced 2025-08-25 02:18:37 +00:00
norman/pkg/objectset/injectors/marshal.go
2018-12-17 15:44:50 -07:00

56 lines
1.1 KiB
Go

package injectors
import (
"bufio"
"bytes"
"io"
"github.com/ghodss/yaml"
"github.com/pkg/errors"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
yamlDecoder "k8s.io/apimachinery/pkg/util/yaml"
)
func ToBytes(objects []runtime.Object) ([]byte, error) {
if len(objects) == 0 {
return nil, nil
}
buffer := &bytes.Buffer{}
for i, obj := range objects {
if i > 0 {
buffer.WriteString("\n---\n")
}
bytes, err := yaml.Marshal(obj)
if err != nil {
return nil, errors.Wrapf(err, "failed to encode %s", obj.GetObjectKind().GroupVersionKind())
}
buffer.Write(bytes)
}
return buffer.Bytes(), nil
}
func FromBytes(content []byte) ([]runtime.Object, error) {
var result []runtime.Object
reader := yamlDecoder.NewYAMLReader(bufio.NewReader(bytes.NewBuffer(content)))
for {
raw, err := reader.Read()
if err == io.EOF {
break
}
data := map[string]interface{}{}
if err := yaml.Unmarshal(raw, &data); err != nil {
return nil, err
}
result = append(result, &unstructured.Unstructured{Object: data})
}
return result, nil
}