...
1
2
3
4 package info
5
6 import (
7 "k8s.io/apimachinery/pkg/api/meta"
8 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
9 "k8s.io/cli-runtime/pkg/resource"
10 "sigs.k8s.io/cli-utils/pkg/object"
11 )
12
13
14 type Helper interface {
15
16
17
18 UpdateInfo(info *resource.Info) error
19
20 BuildInfo(obj *unstructured.Unstructured) (*resource.Info, error)
21 }
22
23 func NewHelper(mapper meta.RESTMapper, unstructuredClientForMapping func(*meta.RESTMapping) (resource.RESTClient, error)) Helper {
24 return &helper{
25 mapper: mapper,
26 unstructuredClientForMapping: unstructuredClientForMapping,
27 }
28 }
29
30 type helper struct {
31 mapper meta.RESTMapper
32 unstructuredClientForMapping func(*meta.RESTMapping) (resource.RESTClient, error)
33 }
34
35 func (ih *helper) UpdateInfo(info *resource.Info) error {
36 gvk := info.Object.GetObjectKind().GroupVersionKind()
37 mapping, err := ih.mapper.RESTMapping(gvk.GroupKind(), gvk.Version)
38 if err != nil {
39 return err
40 }
41 info.Mapping = mapping
42
43 c, err := ih.unstructuredClientForMapping(mapping)
44 if err != nil {
45 return err
46 }
47 info.Client = c
48 return nil
49 }
50
51 func (ih *helper) BuildInfo(obj *unstructured.Unstructured) (*resource.Info, error) {
52 info, err := object.UnstructuredToInfo(obj)
53 if err != nil {
54 return nil, err
55 }
56 err = ih.UpdateInfo(info)
57 return info, err
58 }
59
View as plain text