...
1
16
17 package dynamic
18
19 import (
20 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
21 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
22 "k8s.io/apimachinery/pkg/runtime"
23 "k8s.io/apimachinery/pkg/runtime/schema"
24 "k8s.io/apimachinery/pkg/runtime/serializer"
25 "k8s.io/apimachinery/pkg/runtime/serializer/json"
26 )
27
28 var watchScheme = runtime.NewScheme()
29 var basicScheme = runtime.NewScheme()
30 var deleteScheme = runtime.NewScheme()
31 var parameterScheme = runtime.NewScheme()
32 var deleteOptionsCodec = serializer.NewCodecFactory(deleteScheme)
33 var dynamicParameterCodec = runtime.NewParameterCodec(parameterScheme)
34
35 var versionV1 = schema.GroupVersion{Version: "v1"}
36
37 func init() {
38 metav1.AddToGroupVersion(watchScheme, versionV1)
39 metav1.AddToGroupVersion(basicScheme, versionV1)
40 metav1.AddToGroupVersion(parameterScheme, versionV1)
41 metav1.AddToGroupVersion(deleteScheme, versionV1)
42 }
43
44
45 type basicNegotiatedSerializer struct{}
46
47 func (s basicNegotiatedSerializer) SupportedMediaTypes() []runtime.SerializerInfo {
48 return []runtime.SerializerInfo{
49 {
50 MediaType: "application/json",
51 MediaTypeType: "application",
52 MediaTypeSubType: "json",
53 EncodesAsText: true,
54 Serializer: json.NewSerializer(json.DefaultMetaFactory, unstructuredCreater{basicScheme}, unstructuredTyper{basicScheme}, false),
55 PrettySerializer: json.NewSerializer(json.DefaultMetaFactory, unstructuredCreater{basicScheme}, unstructuredTyper{basicScheme}, true),
56 StreamSerializer: &runtime.StreamSerializerInfo{
57 EncodesAsText: true,
58 Serializer: json.NewSerializer(json.DefaultMetaFactory, basicScheme, basicScheme, false),
59 Framer: json.Framer,
60 },
61 },
62 }
63 }
64
65 func (s basicNegotiatedSerializer) EncoderForVersion(encoder runtime.Encoder, gv runtime.GroupVersioner) runtime.Encoder {
66 return runtime.WithVersionEncoder{
67 Version: gv,
68 Encoder: encoder,
69 ObjectTyper: unstructuredTyper{basicScheme},
70 }
71 }
72
73 func (s basicNegotiatedSerializer) DecoderToVersion(decoder runtime.Decoder, gv runtime.GroupVersioner) runtime.Decoder {
74 return decoder
75 }
76
77 type unstructuredCreater struct {
78 nested runtime.ObjectCreater
79 }
80
81 func (c unstructuredCreater) New(kind schema.GroupVersionKind) (runtime.Object, error) {
82 out, err := c.nested.New(kind)
83 if err == nil {
84 return out, nil
85 }
86 out = &unstructured.Unstructured{}
87 out.GetObjectKind().SetGroupVersionKind(kind)
88 return out, nil
89 }
90
91 type unstructuredTyper struct {
92 nested runtime.ObjectTyper
93 }
94
95 func (t unstructuredTyper) ObjectKinds(obj runtime.Object) ([]schema.GroupVersionKind, bool, error) {
96 kinds, unversioned, err := t.nested.ObjectKinds(obj)
97 if err == nil {
98 return kinds, unversioned, nil
99 }
100 if _, ok := obj.(runtime.Unstructured); ok && !obj.GetObjectKind().GroupVersionKind().Empty() {
101 return []schema.GroupVersionKind{obj.GetObjectKind().GroupVersionKind()}, false, nil
102 }
103 return nil, false, err
104 }
105
106 func (t unstructuredTyper) Recognizes(gvk schema.GroupVersionKind) bool {
107 return true
108 }
109
View as plain text