github.com/joelanford/operator-sdk@v0.8.2/internal/util/k8sutil/object.go (about) 1 package k8sutil 2 3 import ( 4 yaml "github.com/ghodss/yaml" 5 "k8s.io/apimachinery/pkg/runtime" 6 ) 7 8 // GetObjectBytes marshalls an object and removes runtime-managed fields: 9 // 'status', 'creationTimestamp' 10 func GetObjectBytes(obj interface{}) ([]byte, error) { 11 u, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj) 12 if err != nil { 13 return nil, err 14 } 15 deleteKeys := []string{"status", "creationTimestamp"} 16 for _, dk := range deleteKeys { 17 deleteKeyFromUnstructured(u, dk) 18 } 19 return yaml.Marshal(u) 20 } 21 22 func deleteKeyFromUnstructured(u map[string]interface{}, key string) { 23 if _, ok := u[key]; ok { 24 delete(u, key) 25 return 26 } 27 28 for _, v := range u { 29 switch t := v.(type) { 30 case map[string]interface{}: 31 deleteKeyFromUnstructured(t, key) 32 case []interface{}: 33 for _, ti := range t { 34 if m, ok := ti.(map[string]interface{}); ok { 35 deleteKeyFromUnstructured(m, key) 36 } 37 } 38 } 39 } 40 }