...
1
16
17 package kube
18
19 import (
20 "sync"
21
22 apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
23 apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
24 "k8s.io/apimachinery/pkg/api/meta"
25 "k8s.io/apimachinery/pkg/runtime"
26 "k8s.io/apimachinery/pkg/runtime/schema"
27 "k8s.io/cli-runtime/pkg/resource"
28 "k8s.io/client-go/kubernetes/scheme"
29 )
30
31 var k8sNativeScheme *runtime.Scheme
32 var k8sNativeSchemeOnce sync.Once
33
34
35
36 func AsVersioned(info *resource.Info) runtime.Object {
37 return convertWithMapper(info.Object, info.Mapping)
38 }
39
40
41
42 func convertWithMapper(obj runtime.Object, mapping *meta.RESTMapping) runtime.Object {
43 s := kubernetesNativeScheme()
44 var gv = runtime.GroupVersioner(schema.GroupVersions(s.PrioritizedVersionsAllGroups()))
45 if mapping != nil {
46 gv = mapping.GroupVersionKind.GroupVersion()
47 }
48 if obj, err := runtime.ObjectConvertor(s).ConvertToVersion(obj, gv); err == nil {
49 return obj
50 }
51 return obj
52 }
53
54
55
56
57
58
59 func kubernetesNativeScheme() *runtime.Scheme {
60 k8sNativeSchemeOnce.Do(func() {
61 k8sNativeScheme = runtime.NewScheme()
62 scheme.AddToScheme(k8sNativeScheme)
63
64
65 apiextensionsv1beta1.AddToScheme(k8sNativeScheme)
66 apiextensionsv1.AddToScheme(k8sNativeScheme)
67 })
68 return k8sNativeScheme
69 }
70
View as plain text