diff --git a/cmd/kube-controller-manager/app/controllermanager.go b/cmd/kube-controller-manager/app/controllermanager.go index 36062581c96..939c38d7795 100644 --- a/cmd/kube-controller-manager/app/controllermanager.go +++ b/cmd/kube-controller-manager/app/controllermanager.go @@ -179,7 +179,7 @@ func Run(s *options.CMServer) error { clientBuilder = rootClientBuilder } - err := StartControllers(s, kubeconfig, rootClientBuilder, clientBuilder, stop) + err := StartControllers(s, rootClientBuilder, clientBuilder, stop) glog.Fatalf("error running controllers: %v", err) panic("unreachable") } @@ -262,7 +262,7 @@ func getAvailableResources(clientBuilder controller.ControllerClientBuilder) (ma return allResources, nil } -func StartControllers(s *options.CMServer, kubeconfig *restclient.Config, rootClientBuilder, clientBuilder controller.ControllerClientBuilder, stop <-chan struct{}) error { +func StartControllers(s *options.CMServer, rootClientBuilder, clientBuilder controller.ControllerClientBuilder, stop <-chan struct{}) error { client := func(serviceAccountName string) clientset.Interface { return rootClientBuilder.ClientOrDie(serviceAccountName) } @@ -284,7 +284,7 @@ func StartControllers(s *options.CMServer, kubeconfig *restclient.Config, rootCl return fmt.Errorf("error parsing root-ca-file at %s: %v", s.RootCAFile, err) } } else { - rootCA = kubeconfig.CAData + rootCA = rootClientBuilder.ConfigOrDie("tokens-controller").CAData } go serviceaccountcontroller.NewTokensController( @@ -394,7 +394,7 @@ func StartControllers(s *options.CMServer, kubeconfig *restclient.Config, rootCl // Find the list of namespaced resources via discovery that the namespace controller must manage namespaceKubeClient := client("namespace-controller") - namespaceClientPool := dynamic.NewClientPool(restclient.AddUserAgent(kubeconfig, "namespace-controller"), restMapper, dynamic.LegacyAPIPathResolverFunc) + namespaceClientPool := dynamic.NewClientPool(rootClientBuilder.ConfigOrDie("namespace-controller"), restMapper, dynamic.LegacyAPIPathResolverFunc) // TODO: consider using a list-watch + cache here rather than polling var gvrFn func() ([]schema.GroupVersionResource, error) rsrcs, err := namespaceKubeClient.Discovery().ServerResources() @@ -485,8 +485,9 @@ func StartControllers(s *options.CMServer, kubeconfig *restclient.Config, rootCl if availableResources[schema.GroupVersionResource{Group: "batch", Version: "v2alpha1", Resource: "cronjobs"}] { glog.Infof("Starting cronjob controller") // TODO: this is a temp fix for allowing kubeClient list v2alpha1 sj, should switch to using clientset - kubeconfig.ContentConfig.GroupVersion = &schema.GroupVersion{Group: batch.GroupName, Version: "v2alpha1"} - go cronjob.NewCronJobController(client("cronjob-controller")).Run(stop) + cronjobConfig := rootClientBuilder.ConfigOrDie("cronjob-controller") + cronjobConfig.ContentConfig.GroupVersion = &schema.GroupVersion{Group: batch.GroupName, Version: "v2alpha1"} + go cronjob.NewCronJobController(clientset.NewForConfigOrDie(cronjobConfig)).Run(stop) time.Sleep(wait.Jitter(s.ControllerStartInterval.Duration, ControllerStartJitter)) } @@ -554,7 +555,7 @@ func StartControllers(s *options.CMServer, kubeconfig *restclient.Config, rootCl glog.Fatalf("Failed to get supported resources from server: %v", err) } - config := restclient.AddUserAgent(kubeconfig, "generic-garbage-collector") + config := rootClientBuilder.ConfigOrDie("generic-garbage-collector") config.ContentConfig.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: metaonly.NewMetadataCodecFactory()} metaOnlyClientPool := dynamic.NewClientPool(config, restMapper, dynamic.LegacyAPIPathResolverFunc) config.ContentConfig = dynamic.ContentConfig() diff --git a/pkg/controller/client_builder.go b/pkg/controller/client_builder.go index f37de8499bd..5bfb50f52a7 100644 --- a/pkg/controller/client_builder.go +++ b/pkg/controller/client_builder.go @@ -38,6 +38,7 @@ import ( // ControllerClientBuilder allow syou to get clients and configs for controllers type ControllerClientBuilder interface { Config(name string) (*restclient.Config, error) + ConfigOrDie(name string) *restclient.Config Client(name string) (clientset.Interface, error) ClientOrDie(name string) clientset.Interface } @@ -53,6 +54,14 @@ func (b SimpleControllerClientBuilder) Config(name string) (*restclient.Config, return &clientConfig, nil } +func (b SimpleControllerClientBuilder) ConfigOrDie(name string) *restclient.Config { + clientConfig, err := b.Config(name) + if err != nil { + glog.Fatal(err) + } + return clientConfig +} + func (b SimpleControllerClientBuilder) Client(name string) (clientset.Interface, error) { clientConfig, err := b.Config(name) if err != nil { @@ -150,6 +159,14 @@ func (b SAControllerClientBuilder) Config(name string) (*restclient.Config, erro return clientConfig, nil } +func (b SAControllerClientBuilder) ConfigOrDie(name string) *restclient.Config { + clientConfig, err := b.Config(name) + if err != nil { + glog.Fatal(err) + } + return clientConfig +} + func (b SAControllerClientBuilder) Client(name string) (clientset.Interface, error) { clientConfig, err := b.Config(name) if err != nil {