...
1
16
17 package runtimeclass
18
19 import (
20 "fmt"
21
22 "k8s.io/apimachinery/pkg/api/errors"
23 "k8s.io/client-go/informers"
24 clientset "k8s.io/client-go/kubernetes"
25 nodev1 "k8s.io/client-go/listers/node/v1"
26 )
27
28
29 type Manager struct {
30 informerFactory informers.SharedInformerFactory
31 lister nodev1.RuntimeClassLister
32 }
33
34
35 func NewManager(client clientset.Interface) *Manager {
36 const resyncPeriod = 0
37
38 factory := informers.NewSharedInformerFactory(client, resyncPeriod)
39 lister := factory.Node().V1().RuntimeClasses().Lister()
40
41 return &Manager{
42 informerFactory: factory,
43 lister: lister,
44 }
45 }
46
47
48 func (m *Manager) Start(stopCh <-chan struct{}) {
49 m.informerFactory.Start(stopCh)
50 }
51
52
53
54 func (m *Manager) WaitForCacheSync(stopCh <-chan struct{}) {
55 m.informerFactory.WaitForCacheSync(stopCh)
56 }
57
58
59
60
61 func (m *Manager) LookupRuntimeHandler(runtimeClassName *string) (string, error) {
62 if runtimeClassName == nil || *runtimeClassName == "" {
63
64 return "", nil
65 }
66
67 name := *runtimeClassName
68
69 rc, err := m.lister.Get(name)
70 if err != nil {
71 if errors.IsNotFound(err) {
72 return "", err
73 }
74 return "", fmt.Errorf("failed to lookup RuntimeClass %s: %v", name, err)
75 }
76
77 return rc.Handler, nil
78 }
79
View as plain text