mirror of
https://github.com/rancher/norman.git
synced 2025-09-08 18:49:31 +00:00
Add support for k8s 1.12
This commit is contained in:
58
objectclient/dynamic/content.go
Normal file
58
objectclient/dynamic/content.go
Normal file
@@ -0,0 +1,58 @@
|
||||
package dynamic
|
||||
|
||||
import (
|
||||
ejson "encoding/json"
|
||||
"strings"
|
||||
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||
)
|
||||
|
||||
var (
|
||||
NegotiatedSerializer = negotiatedSerializer{}
|
||||
)
|
||||
|
||||
type negotiatedSerializer struct{}
|
||||
|
||||
func (s negotiatedSerializer) SupportedMediaTypes() []runtime.SerializerInfo {
|
||||
return []runtime.SerializerInfo{
|
||||
{
|
||||
MediaType: "application/json",
|
||||
EncodesAsText: true,
|
||||
Serializer: dynamicCodec{
|
||||
Encoder: unstructured.UnstructuredJSONScheme,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (s negotiatedSerializer) EncoderForVersion(encoder runtime.Encoder, gv runtime.GroupVersioner) runtime.Encoder {
|
||||
return encoder
|
||||
}
|
||||
|
||||
func (s negotiatedSerializer) DecoderToVersion(decoder runtime.Decoder, gv runtime.GroupVersioner) runtime.Decoder {
|
||||
return decoder
|
||||
}
|
||||
|
||||
type dynamicCodec struct {
|
||||
runtime.Encoder
|
||||
}
|
||||
|
||||
func (dynamicCodec) Decode(data []byte, gvk *schema.GroupVersionKind, obj runtime.Object) (runtime.Object, *schema.GroupVersionKind, error) {
|
||||
obj, gvk, err := unstructured.UnstructuredJSONScheme.Decode(data, gvk, obj)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
if _, ok := obj.(*metav1.Status); !ok && strings.ToLower(gvk.Kind) == "status" {
|
||||
obj = &metav1.Status{}
|
||||
err := ejson.Unmarshal(data, obj)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return obj, gvk, nil
|
||||
}
|
Reference in New Issue
Block a user