1
1
package apiutil
2
2
3
3
import (
4
+ "encoding/json"
4
5
"fmt"
6
+ "io"
7
+ "strings"
8
+
9
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
5
10
6
11
"k8s.io/apimachinery/pkg/api/meta"
7
12
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -66,7 +71,7 @@ func RESTUnstructuredClientForGVK(gvk schema.GroupVersionKind, baseConfig *rest.
66
71
break
67
72
}
68
73
}
69
- jsonInfo .Serializer = unstructured . UnstructuredJSONScheme
74
+ jsonInfo .Serializer = dynamicCodec {}
70
75
cfg .NegotiatedSerializer = serializer .NegotiatedSerializerWrapper (jsonInfo )
71
76
72
77
return rest .RESTClientFor (cfg )
@@ -89,3 +94,30 @@ func createRestConfig(gvk schema.GroupVersionKind, baseConfig *rest.Config) *res
89
94
return cfg
90
95
91
96
}
97
+
98
+ //Copied from deprecated-dynamic/bad_debt.go
99
+ // dynamicCodec is a codec that wraps the standard unstructured codec
100
+ // with special handling for Status objects.
101
+ // Deprecated only used by test code and its wrong
102
+ type dynamicCodec struct {}
103
+
104
+ func (dynamicCodec ) Decode (data []byte , gvk * schema.GroupVersionKind , obj runtime.Object ) (runtime.Object , * schema.GroupVersionKind , error ) {
105
+ obj , gvk , err := unstructured .UnstructuredJSONScheme .Decode (data , gvk , obj )
106
+ if err != nil {
107
+ return nil , nil , err
108
+ }
109
+
110
+ if _ , ok := obj .(* metav1.Status ); ! ok && strings .ToLower (gvk .Kind ) == "status" {
111
+ obj = & metav1.Status {}
112
+ err := json .Unmarshal (data , obj )
113
+ if err != nil {
114
+ return nil , nil , err
115
+ }
116
+ }
117
+
118
+ return obj , gvk , nil
119
+ }
120
+
121
+ func (dynamicCodec ) Encode (obj runtime.Object , w io.Writer ) error {
122
+ return unstructured .UnstructuredJSONScheme .Encode (obj , w )
123
+ }
0 commit comments