...
1
16
17 package polymorphichelpers
18
19 import (
20 "fmt"
21 "sort"
22 "time"
23
24 corev1 "k8s.io/api/core/v1"
25 "k8s.io/apimachinery/pkg/runtime"
26 "k8s.io/cli-runtime/pkg/genericclioptions"
27 corev1client "k8s.io/client-go/kubernetes/typed/core/v1"
28 "k8s.io/kubectl/pkg/util/podutils"
29 )
30
31
32 func attachablePodForObject(restClientGetter genericclioptions.RESTClientGetter, object runtime.Object, timeout time.Duration) (*corev1.Pod, error) {
33 switch t := object.(type) {
34 case *corev1.Pod:
35 return t, nil
36 }
37
38 clientConfig, err := restClientGetter.ToRESTConfig()
39 if err != nil {
40 return nil, err
41 }
42 clientset, err := corev1client.NewForConfig(clientConfig)
43 if err != nil {
44 return nil, err
45 }
46
47 namespace, selector, err := SelectorsForObject(object)
48 if err != nil {
49 return nil, fmt.Errorf("cannot attach to %T: %v", object, err)
50 }
51 sortBy := func(pods []*corev1.Pod) sort.Interface { return sort.Reverse(podutils.ActivePods(pods)) }
52 pod, _, err := GetFirstPod(clientset, namespace, selector.String(), timeout, sortBy)
53 return pod, err
54 }
55
View as plain text