...
1
16
17 package services
18
19 import (
20 "context"
21 "time"
22
23 v1 "k8s.io/api/core/v1"
24 "k8s.io/client-go/informers"
25 clientset "k8s.io/client-go/kubernetes"
26 "k8s.io/client-go/metadata"
27 restclient "k8s.io/client-go/rest"
28 namespacecontroller "k8s.io/kubernetes/pkg/controller/namespace"
29 "k8s.io/kubernetes/test/e2e/framework"
30 )
31
32 const (
33
34 ncName = "namespace-controller"
35
36 ncResyncPeriod = 5 * time.Minute
37
38 ncConcurrency = 2
39 )
40
41
42 type NamespaceController struct {
43 host string
44 stopCh chan struct{}
45 }
46
47
48 func NewNamespaceController(host string) *NamespaceController {
49 return &NamespaceController{host: host, stopCh: make(chan struct{})}
50 }
51
52
53 func (n *NamespaceController) Start(ctx context.Context) error {
54 config := restclient.AddUserAgent(&restclient.Config{
55 Host: n.host,
56 BearerToken: framework.TestContext.BearerToken,
57 TLSClientConfig: restclient.TLSClientConfig{
58 Insecure: true,
59 },
60 }, ncName)
61
62
63 config.QPS = 50
64 config.Burst = 200
65
66 client, err := clientset.NewForConfig(config)
67 if err != nil {
68 return err
69 }
70 metadataClient, err := metadata.NewForConfig(config)
71 if err != nil {
72 return err
73 }
74 discoverResourcesFn := client.Discovery().ServerPreferredNamespacedResources
75 informerFactory := informers.NewSharedInformerFactory(client, ncResyncPeriod)
76
77 nc := namespacecontroller.NewNamespaceController(
78 ctx,
79 client,
80 metadataClient,
81 discoverResourcesFn,
82 informerFactory.Core().V1().Namespaces(),
83 ncResyncPeriod, v1.FinalizerKubernetes,
84 )
85 informerFactory.Start(n.stopCh)
86 go nc.Run(ctx, ncConcurrency)
87 return nil
88 }
89
90
91 func (n *NamespaceController) Stop() error {
92 close(n.stopCh)
93 return nil
94 }
95
96
97 func (n *NamespaceController) Name() string {
98 return ncName
99 }
100
View as plain text