...
1
16
17 package kubemark
18
19 import (
20 "flag"
21 "fmt"
22
23 "k8s.io/client-go/informers"
24 clientset "k8s.io/client-go/kubernetes"
25 "k8s.io/client-go/tools/clientcmd"
26 "k8s.io/kubernetes/pkg/kubemark"
27 "k8s.io/kubernetes/test/e2e/framework"
28 )
29
30 var (
31 kubemarkExternalKubeConfig = flag.String(fmt.Sprintf("%s-%s", "kubemark-external", clientcmd.RecommendedConfigPathFlag), "", "Path to kubeconfig containing embedded authinfo for external cluster.")
32 )
33
34 func init() {
35 framework.RegisterProvider("kubemark", newProvider)
36 }
37
38 func newProvider() (framework.ProviderInterface, error) {
39
40 return &Provider{}, nil
41 }
42
43
44 type Provider struct {
45 framework.NullProvider
46 controller *kubemark.KubemarkController
47 closeChannel chan struct{}
48 }
49
50
51 func (p *Provider) ResizeGroup(group string, size int32) error {
52 return p.controller.SetNodeGroupSize(group, int(size))
53 }
54
55
56 func (p *Provider) GetGroupNodes(group string) ([]string, error) {
57 return p.controller.GetNodeNamesForNodeGroup(group)
58 }
59
60
61 func (p *Provider) FrameworkBeforeEach(f *framework.Framework) {
62 if *kubemarkExternalKubeConfig != "" && p.controller == nil {
63 externalConfig, err := clientcmd.BuildConfigFromFlags("", *kubemarkExternalKubeConfig)
64 externalConfig.QPS = f.Options.ClientQPS
65 externalConfig.Burst = f.Options.ClientBurst
66 framework.ExpectNoError(err)
67 externalClient, err := clientset.NewForConfig(externalConfig)
68 framework.ExpectNoError(err)
69 f.KubemarkExternalClusterClientSet = externalClient
70 p.closeChannel = make(chan struct{})
71 externalInformerFactory := informers.NewSharedInformerFactory(externalClient, 0)
72 kubemarkInformerFactory := informers.NewSharedInformerFactory(f.ClientSet, 0)
73 kubemarkNodeInformer := kubemarkInformerFactory.Core().V1().Nodes()
74 go kubemarkNodeInformer.Informer().Run(p.closeChannel)
75 p.controller, err = kubemark.NewKubemarkController(externalClient, externalInformerFactory, f.ClientSet, kubemarkNodeInformer)
76 framework.ExpectNoError(err)
77 externalInformerFactory.Start(p.closeChannel)
78 if !p.controller.WaitForCacheSync(p.closeChannel) {
79 framework.Failf("Unable to sync caches for %v", p.controller)
80 }
81 go p.controller.Run(p.closeChannel)
82 }
83 }
84
85
86 func (p *Provider) FrameworkAfterEach(f *framework.Framework) {
87 if p.closeChannel != nil {
88 close(p.closeChannel)
89 p.controller = nil
90 p.closeChannel = nil
91 }
92 }
93
94
95 func (p *Provider) GroupSize(group string) (int, error) {
96 return p.controller.GetNodeGroupSize(group)
97 }
98
View as plain text