Kubelet run() should accept partial KubeletDeps

This is used by integrators that want to perform partial overrides of
key interfaces. Refactors the run() method to fit the existing style and
preserve the existing behavior, but allow (for instance) client
bootstrap and cert refresh even when some dependencies are injected.
pull/6/head
Clayton Coleman 2017-07-05 18:28:49 -04:00
parent b8e662fcea
commit 01c9b6ce8f
No known key found for this signature in database
GPG Key ID: 3D16906B4F1C5CB3
1 changed files with 27 additions and 32 deletions

View File

@ -417,13 +417,15 @@ func run(s *options.KubeletServer, kubeDeps *kubelet.KubeletDeps) (err error) {
} }
if kubeDeps == nil { if kubeDeps == nil {
var kubeClient clientset.Interface kubeDeps, err = UnsecuredKubeletDeps(s)
var eventClient v1core.EventsGetter if err != nil {
var externalKubeClient clientgoclientset.Interface return err
var cloud cloudprovider.Interface }
}
if kubeDeps.Cloud == nil {
if !cloudprovider.IsExternal(s.CloudProvider) && s.CloudProvider != componentconfigv1alpha1.AutoDetectCloudProvider { if !cloudprovider.IsExternal(s.CloudProvider) && s.CloudProvider != componentconfigv1alpha1.AutoDetectCloudProvider {
cloud, err = cloudprovider.InitCloudProvider(s.CloudProvider, s.CloudConfigFile) cloud, err := cloudprovider.InitCloudProvider(s.CloudProvider, s.CloudConfigFile)
if err != nil { if err != nil {
return err return err
} }
@ -432,9 +434,11 @@ func run(s *options.KubeletServer, kubeDeps *kubelet.KubeletDeps) (err error) {
} else { } else {
glog.V(2).Infof("Successfully initialized cloud provider: %q from the config file: %q\n", s.CloudProvider, s.CloudConfigFile) glog.V(2).Infof("Successfully initialized cloud provider: %q from the config file: %q\n", s.CloudProvider, s.CloudConfigFile)
} }
kubeDeps.Cloud = cloud
}
} }
nodeName, err := getNodeName(cloud, nodeutil.GetHostname(s.HostnameOverride)) nodeName, err := getNodeName(kubeDeps.Cloud, nodeutil.GetHostname(s.HostnameOverride))
if err != nil { if err != nil {
return err return err
} }
@ -445,15 +449,17 @@ func run(s *options.KubeletServer, kubeDeps *kubelet.KubeletDeps) (err error) {
} }
} }
// initialize clients if any of the clients are not provided
if kubeDeps.KubeClient == nil || kubeDeps.ExternalKubeClient == nil || kubeDeps.EventClient == nil {
var kubeClient clientset.Interface
var eventClient v1core.EventsGetter
var externalKubeClient clientgoclientset.Interface
clientConfig, err := CreateAPIServerClientConfig(s) clientConfig, err := CreateAPIServerClientConfig(s)
var clientCertificateManager certificate.Manager var clientCertificateManager certificate.Manager
if err == nil { if err == nil {
if utilfeature.DefaultFeatureGate.Enabled(features.RotateKubeletClientCertificate) { if utilfeature.DefaultFeatureGate.Enabled(features.RotateKubeletClientCertificate) {
nodeName, err := getNodeName(cloud, nodeutil.GetHostname(s.HostnameOverride))
if err != nil {
return err
}
clientCertificateManager, err = certificate.NewKubeletClientCertificateManager(s.CertDirectory, nodeName, clientConfig.CertData, clientConfig.KeyData, clientConfig.CertFile, clientConfig.KeyFile) clientCertificateManager, err = certificate.NewKubeletClientCertificateManager(s.CertDirectory, nodeName, clientConfig.CertData, clientConfig.KeyData, clientConfig.CertFile, clientConfig.KeyFile)
if err != nil { if err != nil {
return err return err
@ -484,32 +490,21 @@ func run(s *options.KubeletServer, kubeDeps *kubelet.KubeletDeps) (err error) {
glog.Warningf("Failed to create API Server client: %v", err) glog.Warningf("Failed to create API Server client: %v", err)
} }
} else { } else {
if s.RequireKubeConfig { switch {
case s.RequireKubeConfig:
return fmt.Errorf("invalid kubeconfig: %v", err) return fmt.Errorf("invalid kubeconfig: %v", err)
} else if s.KubeConfig.Provided() && !standaloneMode { case standaloneMode:
glog.Warningf("No API client: %v", err)
case s.KubeConfig.Provided():
glog.Warningf("Invalid kubeconfig: %v", err) glog.Warningf("Invalid kubeconfig: %v", err)
} }
if standaloneMode {
glog.Warningf("No API client: %v", err)
}
} }
kubeDeps, err = UnsecuredKubeletDeps(s)
if err != nil {
return err
}
kubeDeps.Cloud = cloud
kubeDeps.KubeClient = kubeClient kubeDeps.KubeClient = kubeClient
kubeDeps.ExternalKubeClient = externalKubeClient kubeDeps.ExternalKubeClient = externalKubeClient
kubeDeps.EventClient = eventClient kubeDeps.EventClient = eventClient
} }
nodeName, err := getNodeName(kubeDeps.Cloud, nodeutil.GetHostname(s.HostnameOverride))
if err != nil {
return err
}
if kubeDeps.Auth == nil { if kubeDeps.Auth == nil {
auth, err := BuildAuth(nodeName, kubeDeps.ExternalKubeClient, s.KubeletConfiguration) auth, err := BuildAuth(nodeName, kubeDeps.ExternalKubeClient, s.KubeletConfiguration)
if err != nil { if err != nil {