From e664ef922fd3ecc2dcb692c8d012950cd4646af6 Mon Sep 17 00:00:00 2001 From: Kris Date: Fri, 12 Feb 2016 10:58:43 -0800 Subject: [PATCH] Move restclient to its own package --- cluster/addons/dns/kube2sky/kube2sky.go | 7 +- cmd/integration/integration.go | 11 +- cmd/kube-apiserver/app/server.go | 4 +- .../app/controllermanager.go | 41 +- cmd/kubelet/app/server.go | 14 +- .../generators/generator_for_clientset.go | 7 +- .../generators/generator_for_group.go | 10 +- .../test_internalclientset/clientset.go | 7 +- .../testgroup/unversioned/testgroup_client.go | 16 +- .../testgroup/unversioned/testgroup_test.go | 4 +- .../controllermanager/controllermanager.go | 41 +- contrib/mesos/pkg/executor/service/service.go | 3 +- contrib/mesos/pkg/minion/server.go | 13 +- .../scheduler/integration/integration_test.go | 6 +- .../mesos/pkg/scheduler/service/service.go | 4 +- pkg/api/field_constants.go | 38 ++ pkg/client/cache/listwatch.go | 4 +- pkg/client/cache/listwatch_test.go | 5 +- .../internalclientset/clientset.go | 7 +- .../release_1_2/clientset.go | 7 +- pkg/client/record/event.go | 4 +- pkg/client/record/event_test.go | 5 +- .../restclient.go => restclient/client.go} | 2 +- .../client_test.go} | 2 +- pkg/client/restclient/config.go | 309 +++++++++++++ pkg/client/restclient/config_test.go | 99 ++++ .../{unversioned => restclient}/request.go | 68 +-- .../request_test.go | 8 +- .../{unversioned => restclient}/transport.go | 2 +- pkg/client/restclient/url_utils.go | 93 ++++ pkg/client/restclient/url_utils_test.go | 61 +++ .../{unversioned => restclient}/urlbackoff.go | 2 +- .../urlbackoff_test.go | 5 +- pkg/client/restclient/versions.go | 88 ++++ pkg/client/testing/core/fake.go | 8 +- pkg/client/testing/core/fixture.go | 4 +- pkg/client/typed/dynamic/client.go | 14 +- pkg/client/typed/dynamic/client_test.go | 6 +- .../generated/core/unversioned/core_client.go | 16 +- .../unversioned/fake/fake_pod_expansion.go | 6 +- .../fake/fake_service_expansion.go | 4 +- .../core/unversioned/pod_expansion.go | 6 +- .../core/unversioned/service_expansion.go | 6 +- .../typed/generated/core/v1/core_client.go | 16 +- .../core/v1/fake/fake_pod_expansion.go | 6 +- .../core/v1/fake/fake_service_expansion.go | 4 +- .../typed/generated/core/v1/pod_expansion.go | 6 +- .../generated/core/v1/service_expansion.go | 6 +- .../unversioned/extensions_client.go | 16 +- .../extensions/v1beta1/extensions_client.go | 16 +- pkg/client/unversioned/auth/clientauth.go | 6 +- pkg/client/unversioned/autoscaling.go | 13 +- pkg/client/unversioned/batch.go | 13 +- pkg/client/unversioned/client.go | 4 +- pkg/client/unversioned/client_test.go | 13 +- .../unversioned/clientcmd/client_config.go | 40 +- .../clientcmd/client_config_test.go | 4 +- .../clientcmd/merged_client_builder.go | 4 +- pkg/client/unversioned/deployment_test.go | 6 +- pkg/client/unversioned/discovery_client.go | 13 +- pkg/client/unversioned/endpoints_test.go | 6 +- pkg/client/unversioned/extensions.go | 13 +- pkg/client/unversioned/fake/fake.go | 16 +- pkg/client/unversioned/helper.go | 431 +----------------- .../unversioned/helper_blackbox_test.go | 18 +- pkg/client/unversioned/helper_test.go | 149 +----- .../horizontalpodautoscaler_test.go | 9 +- pkg/client/unversioned/ingress_test.go | 6 +- pkg/client/unversioned/jobs_test.go | 9 +- pkg/client/unversioned/limit_ranges_test.go | 6 +- pkg/client/unversioned/namespaces_test.go | 6 +- pkg/client/unversioned/nodes_test.go | 6 +- .../unversioned/persistentvolume_test.go | 6 +- .../unversioned/persistentvolumeclaim_test.go | 6 +- pkg/client/unversioned/pod_templates_test.go | 6 +- pkg/client/unversioned/pods.go | 5 +- pkg/client/unversioned/pods_test.go | 2 - .../unversioned/podsecuritypolicy_test.go | 1 - .../portforward/portforward_test.go | 6 +- .../remotecommand/remotecommand.go | 8 +- .../remotecommand/remotecommand_test.go | 10 +- pkg/client/unversioned/replica_sets_test.go | 6 +- .../replication_controllers_test.go | 6 +- .../unversioned/resource_quotas_test.go | 6 +- pkg/client/unversioned/services.go | 5 +- pkg/client/unversioned/services_test.go | 6 +- .../unversioned/testclient/fake_pods.go | 6 +- .../unversioned/testclient/fake_services.go | 4 +- pkg/client/unversioned/testclient/fixture.go | 4 +- .../testclient/simple/simple_testclient.go | 19 +- .../unversioned/testclient/testclient.go | 7 +- .../unversioned/thirdpartyresources_test.go | 1 - pkg/controller/controller_utils_test.go | 4 +- pkg/controller/daemon/controller_test.go | 4 +- .../endpoint/endpoints_controller_test.go | 26 +- pkg/controller/job/controller_test.go | 18 +- pkg/controller/node/nodecontroller.go | 9 +- .../podautoscaler/horizontal_test.go | 4 +- .../metrics/metrics_client_test.go | 4 +- pkg/controller/replicaset/replica_set_test.go | 32 +- .../replication_controller_test.go | 36 +- .../serviceaccounts_controller.go | 3 +- .../serviceaccount/tokens_controller.go | 2 +- pkg/kubectl/cmd/annotate_test.go | 10 +- pkg/kubectl/cmd/attach.go | 7 +- pkg/kubectl/cmd/attach_test.go | 10 +- pkg/kubectl/cmd/cmd_test.go | 9 +- pkg/kubectl/cmd/drain_test.go | 6 +- pkg/kubectl/cmd/exec.go | 7 +- pkg/kubectl/cmd/exec_test.go | 8 +- pkg/kubectl/cmd/get_test.go | 10 +- pkg/kubectl/cmd/label_test.go | 8 +- pkg/kubectl/cmd/logs.go | 4 +- pkg/kubectl/cmd/logs_test.go | 4 +- pkg/kubectl/cmd/portforward.go | 6 +- pkg/kubectl/cmd/portforward_test.go | 8 +- pkg/kubectl/cmd/run_test.go | 6 +- pkg/kubectl/cmd/util/clientcache.go | 9 +- pkg/kubectl/cmd/util/factory.go | 11 +- pkg/kubectl/describe.go | 2 +- pkg/kubectl/interfaces.go | 2 +- pkg/kubectl/proxy_server.go | 6 +- pkg/kubectl/proxy_server_test.go | 4 +- pkg/kubectl/resource/interfaces.go | 2 +- pkg/kubectl/rolling_updater_test.go | 5 +- pkg/kubelet/client/kubelet_client.go | 4 +- pkg/kubelet/client/kubelet_client_test.go | 6 +- pkg/kubelet/config/apiserver.go | 3 +- pkg/kubelet/kubelet.go | 3 +- pkg/metrics/metrics_grabber.go | 2 +- .../admission/initialresources/hawkular.go | 11 +- .../pkg/admission/serviceaccount/admission.go | 3 +- plugin/pkg/auth/authorizer/webhook/webhook.go | 6 +- .../defaults/compatibility_test.go | 6 +- plugin/pkg/scheduler/api/types.go | 4 +- plugin/pkg/scheduler/api/v1/types.go | 4 +- plugin/pkg/scheduler/extender.go | 6 +- plugin/pkg/scheduler/factory/factory.go | 2 +- plugin/pkg/scheduler/factory/factory_test.go | 13 +- test/component/scheduler/perf/util.go | 5 +- test/e2e/kubelet_stats.go | 7 +- test/e2e/reboot.go | 2 +- test/e2e/resize_nodes.go | 4 +- test/e2e/util.go | 17 +- test/e2e_node/conformance_test.go | 3 +- test/e2e_node/kubelet_test.go | 3 +- test/integration/client_test.go | 7 +- test/integration/configmap_test.go | 3 +- test/integration/dynamic_client_test.go | 5 +- test/integration/extender_test.go | 3 +- test/integration/framework/master_utils.go | 7 +- test/integration/metrics_test.go | 3 +- test/integration/persistent_volumes_test.go | 8 +- test/integration/pods.go | 5 +- test/integration/scheduler_test.go | 9 +- test/integration/secret_test.go | 3 +- test/integration/service_account_test.go | 8 +- 157 files changed, 1331 insertions(+), 1178 deletions(-) create mode 100644 pkg/api/field_constants.go rename pkg/client/{unversioned/restclient.go => restclient/client.go} (99%) rename pkg/client/{unversioned/restclient_test.go => restclient/client_test.go} (99%) create mode 100644 pkg/client/restclient/config.go create mode 100644 pkg/client/restclient/config_test.go rename pkg/client/{unversioned => restclient}/request.go (95%) rename pkg/client/{unversioned => restclient}/request_test.go (99%) rename pkg/client/{unversioned => restclient}/transport.go (99%) create mode 100644 pkg/client/restclient/url_utils.go create mode 100644 pkg/client/restclient/url_utils_test.go rename pkg/client/{unversioned => restclient}/urlbackoff.go (99%) rename pkg/client/{unversioned => restclient}/urlbackoff_test.go (99%) create mode 100644 pkg/client/restclient/versions.go diff --git a/cluster/addons/dns/kube2sky/kube2sky.go b/cluster/addons/dns/kube2sky/kube2sky.go index a1537a210b..d79fc7f7fc 100644 --- a/cluster/addons/dns/kube2sky/kube2sky.go +++ b/cluster/addons/dns/kube2sky/kube2sky.go @@ -37,6 +37,7 @@ import ( kapi "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/unversioned" kcache "k8s.io/kubernetes/pkg/client/cache" + "k8s.io/kubernetes/pkg/client/restclient" kclient "k8s.io/kubernetes/pkg/client/unversioned" kclientcmd "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" kframework "k8s.io/kubernetes/pkg/controller/framework" @@ -466,7 +467,7 @@ func expandKubeMasterURL() (string, error) { // TODO: evaluate using pkg/client/clientcmd func newKubeClient() (*kclient.Client, error) { var ( - config *kclient.Config + config *restclient.Config err error masterURL string ) @@ -480,9 +481,9 @@ func newKubeClient() (*kclient.Client, error) { if masterURL != "" && *argKubecfgFile == "" { // Only --kube-master-url was provided. - config = &kclient.Config{ + config = &restclient.Config{ Host: masterURL, - ContentConfig: kclient.ContentConfig{GroupVersion: &unversioned.GroupVersion{Version: "v1"}}, + ContentConfig: restclient.ContentConfig{GroupVersion: &unversioned.GroupVersion{Version: "v1"}}, } } else { // We either have: diff --git a/cmd/integration/integration.go b/cmd/integration/integration.go index 9d1abe0c70..00fd9900a9 100644 --- a/cmd/integration/integration.go +++ b/cmd/integration/integration.go @@ -40,6 +40,7 @@ import ( "k8s.io/kubernetes/pkg/api/v1" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" "k8s.io/kubernetes/pkg/client/record" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/controller" endpointcontroller "k8s.io/kubernetes/pkg/controller/endpoint" @@ -135,12 +136,12 @@ func startComponents(firstManifestURL, secondManifestURL string) (string, string glog.Fatalf("Failed to connect to etcd") } - cl := client.NewOrDie(&client.Config{Host: apiServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) - clientset := clientset.NewForConfigOrDie(&client.Config{Host: apiServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + cl := client.NewOrDie(&restclient.Config{Host: apiServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + clientset := clientset.NewForConfigOrDie(&restclient.Config{Host: apiServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) // TODO: caesarxuchao: hacky way to specify version of Experimental client. // We will fix this by supporting multiple group versions in Config - cl.ExtensionsClient = client.NewExtensionsOrDie(&client.Config{Host: apiServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Extensions.GroupVersion()}}) + cl.ExtensionsClient = client.NewExtensionsOrDie(&restclient.Config{Host: apiServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Extensions.GroupVersion()}}) // Master host, port, err := net.SplitHostPort(strings.TrimLeft(apiServer.URL, "http://")) @@ -993,10 +994,10 @@ func main() { // Wait for the synchronization threads to come up. time.Sleep(time.Second * 10) - kubeClient := client.NewOrDie(&client.Config{Host: apiServerURL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + kubeClient := client.NewOrDie(&restclient.Config{Host: apiServerURL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) // TODO: caesarxuchao: hacky way to specify version of Experimental client. // We will fix this by supporting multiple group versions in Config - kubeClient.ExtensionsClient = client.NewExtensionsOrDie(&client.Config{Host: apiServerURL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Extensions.GroupVersion()}}) + kubeClient.ExtensionsClient = client.NewExtensionsOrDie(&restclient.Config{Host: apiServerURL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Extensions.GroupVersion()}}) // Run tests in parallel testFuncs := []testFunc{ diff --git a/cmd/kube-apiserver/app/server.go b/cmd/kube-apiserver/app/server.go index 63b6f65bd6..a0db3062a5 100644 --- a/cmd/kube-apiserver/app/server.go +++ b/cmd/kube-apiserver/app/server.go @@ -44,7 +44,7 @@ import ( "k8s.io/kubernetes/pkg/apiserver/authenticator" "k8s.io/kubernetes/pkg/capabilities" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/cloudprovider" serviceaccountcontroller "k8s.io/kubernetes/pkg/controller/serviceaccount" "k8s.io/kubernetes/pkg/genericapiserver" @@ -254,7 +254,7 @@ func Run(s *options.APIServer) error { glog.Fatalf("error in parsing runtime-config: %s", err) } - clientConfig := &client.Config{ + clientConfig := &restclient.Config{ Host: net.JoinHostPort(s.InsecureBindAddress.String(), strconv.Itoa(s.InsecurePort)), } if len(s.DeprecatedStorageVersion) != 0 { diff --git a/cmd/kube-controller-manager/app/controllermanager.go b/cmd/kube-controller-manager/app/controllermanager.go index 595571d53e..9dfc91cb4c 100644 --- a/cmd/kube-controller-manager/app/controllermanager.go +++ b/cmd/kube-controller-manager/app/controllermanager.go @@ -39,6 +39,7 @@ import ( clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" "k8s.io/kubernetes/pkg/client/leaderelection" "k8s.io/kubernetes/pkg/client/record" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/cloudprovider" @@ -180,19 +181,19 @@ func Run(s *options.CMServer) error { panic("unreachable") } -func StartControllers(s *options.CMServer, kubeClient *client.Client, kubeconfig *client.Config, stop <-chan struct{}) error { - go endpointcontroller.NewEndpointController(clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "endpoint-controller")), ResyncPeriod(s)). +func StartControllers(s *options.CMServer, kubeClient *client.Client, kubeconfig *restclient.Config, stop <-chan struct{}) error { + go endpointcontroller.NewEndpointController(clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "endpoint-controller")), ResyncPeriod(s)). Run(s.ConcurrentEndpointSyncs, wait.NeverStop) go replicationcontroller.NewReplicationManager( - clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "replication-controller")), + clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "replication-controller")), ResyncPeriod(s), replicationcontroller.BurstReplicas, s.LookupCacheSizeForRC, ).Run(s.ConcurrentRCSyncs, wait.NeverStop) if s.TerminatedPodGCThreshold > 0 { - go gc.New(clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "garbage-collector")), ResyncPeriod(s), s.TerminatedPodGCThreshold). + go gc.New(clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "garbage-collector")), ResyncPeriod(s), s.TerminatedPodGCThreshold). Run(wait.NeverStop) } @@ -203,13 +204,13 @@ func StartControllers(s *options.CMServer, kubeClient *client.Client, kubeconfig // this cidr has been validated already _, clusterCIDR, _ := net.ParseCIDR(s.ClusterCIDR) - nodeController := nodecontroller.NewNodeController(cloud, clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "node-controller")), + nodeController := nodecontroller.NewNodeController(cloud, clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "node-controller")), s.PodEvictionTimeout.Duration, util.NewTokenBucketRateLimiter(s.DeletingPodsQps, s.DeletingPodsBurst), util.NewTokenBucketRateLimiter(s.DeletingPodsQps, s.DeletingPodsBurst), s.NodeMonitorGracePeriod.Duration, s.NodeStartupGracePeriod.Duration, s.NodeMonitorPeriod.Duration, clusterCIDR, s.AllocateNodeCIDRs) nodeController.Run(s.NodeSyncPeriod.Duration) - serviceController := servicecontroller.New(cloud, clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "service-controller")), s.ClusterName) + serviceController := servicecontroller.New(cloud, clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "service-controller")), s.ClusterName) if err := serviceController.Run(s.ServiceSyncPeriod.Duration, s.NodeSyncPeriod.Duration); err != nil { glog.Errorf("Failed to start service controller: %v", err) } @@ -220,14 +221,14 @@ func StartControllers(s *options.CMServer, kubeClient *client.Client, kubeconfig } else if routes, ok := cloud.Routes(); !ok { glog.Warning("allocate-node-cidrs is set, but cloud provider does not support routes. Will not manage routes.") } else { - routeController := routecontroller.New(routes, clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "route-controller")), s.ClusterName, clusterCIDR) + routeController := routecontroller.New(routes, clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "route-controller")), s.ClusterName, clusterCIDR) routeController.Run(s.NodeSyncPeriod.Duration) } } else { glog.Infof("allocate-node-cidrs set to %v, node controller not creating routes", s.AllocateNodeCIDRs) } - resourceQuotaControllerClient := clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "resourcequota-controller")) + resourceQuotaControllerClient := clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "resourcequota-controller")) resourceQuotaRegistry := quotainstall.NewRegistry(resourceQuotaControllerClient) groupKindsToReplenish := []unversioned.GroupKind{ api.Kind("Pod"), @@ -249,7 +250,7 @@ func StartControllers(s *options.CMServer, kubeClient *client.Client, kubeconfig // important when we start apiserver and controller manager at the same time. var versionStrings []string err = wait.PollImmediate(time.Second, 10*time.Second, func() (bool, error) { - if versionStrings, err = client.ServerAPIVersions(kubeconfig); err == nil { + if versionStrings, err = restclient.ServerAPIVersions(kubeconfig); err == nil { return true, nil } glog.Errorf("Failed to get api versions from server: %v", err) @@ -265,7 +266,7 @@ func StartControllers(s *options.CMServer, kubeClient *client.Client, kubeconfig glog.Fatalf("Failed to get supported resources from server: %v", err) } - namespaceController := namespacecontroller.NewNamespaceController(clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "namespace-controller")), versions, s.NamespaceSyncPeriod.Duration) + namespaceController := namespacecontroller.NewNamespaceController(clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "namespace-controller")), versions, s.NamespaceSyncPeriod.Duration) go namespaceController.Run(s.ConcurrentNamespaceSyncs, wait.NeverStop) groupVersion := "extensions/v1beta1" @@ -275,7 +276,7 @@ func StartControllers(s *options.CMServer, kubeClient *client.Client, kubeconfig glog.Infof("Starting %s apis", groupVersion) if containsResource(resources, "horizontalpodautoscalers") { glog.Infof("Starting horizontal pod controller.") - hpaClient := clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "horizontal-pod-autoscaler")) + hpaClient := clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "horizontal-pod-autoscaler")) metricsClient := metrics.NewHeapsterMetricsClient( hpaClient, metrics.DefaultHeapsterNamespace, @@ -289,25 +290,25 @@ func StartControllers(s *options.CMServer, kubeClient *client.Client, kubeconfig if containsResource(resources, "daemonsets") { glog.Infof("Starting daemon set controller") - go daemon.NewDaemonSetsController(clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "daemon-set-controller")), ResyncPeriod(s)). + go daemon.NewDaemonSetsController(clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "daemon-set-controller")), ResyncPeriod(s)). Run(s.ConcurrentDaemonSetSyncs, wait.NeverStop) } if containsResource(resources, "jobs") { glog.Infof("Starting job controller") - go job.NewJobController(clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "job-controller")), ResyncPeriod(s)). + go job.NewJobController(clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "job-controller")), ResyncPeriod(s)). Run(s.ConcurrentJobSyncs, wait.NeverStop) } if containsResource(resources, "deployments") { glog.Infof("Starting deployment controller") - go deployment.NewDeploymentController(clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "deployment-controller")), ResyncPeriod(s)). + go deployment.NewDeploymentController(clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "deployment-controller")), ResyncPeriod(s)). Run(s.ConcurrentDeploymentSyncs, wait.NeverStop) } if containsResource(resources, "replicasets") { glog.Infof("Starting ReplicaSet controller") - go replicaset.NewReplicaSetController(clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "replicaset-controller")), ResyncPeriod(s), replicaset.BurstReplicas, s.LookupCacheSizeForRS). + go replicaset.NewReplicaSetController(clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "replicaset-controller")), ResyncPeriod(s), replicaset.BurstReplicas, s.LookupCacheSizeForRS). Run(s.ConcurrentRSSyncs, wait.NeverStop) } } @@ -318,11 +319,11 @@ func StartControllers(s *options.CMServer, kubeClient *client.Client, kubeconfig glog.Fatal("A Provisioner could not be created, but one was expected. Provisioning will not work. This functionality is considered an early Alpha version.") } - pvclaimBinder := persistentvolumecontroller.NewPersistentVolumeClaimBinder(clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "persistent-volume-binder")), s.PVClaimBinderSyncPeriod.Duration) + pvclaimBinder := persistentvolumecontroller.NewPersistentVolumeClaimBinder(clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "persistent-volume-binder")), s.PVClaimBinderSyncPeriod.Duration) pvclaimBinder.Run() pvRecycler, err := persistentvolumecontroller.NewPersistentVolumeRecycler( - clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "persistent-volume-recycler")), + clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "persistent-volume-recycler")), s.PVClaimBinderSyncPeriod.Duration, s.VolumeConfiguration.PersistentVolumeRecyclerConfiguration.MaximumRetry, ProbeRecyclableVolumePlugins(s.VolumeConfiguration), @@ -334,7 +335,7 @@ func StartControllers(s *options.CMServer, kubeClient *client.Client, kubeconfig pvRecycler.Run() if provisioner != nil { - pvController, err := persistentvolumecontroller.NewPersistentVolumeProvisionerController(persistentvolumecontroller.NewControllerClient(clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "persistent-volume-provisioner"))), s.PVClaimBinderSyncPeriod.Duration, s.ClusterName, volumePlugins, provisioner, cloud) + pvController, err := persistentvolumecontroller.NewPersistentVolumeProvisionerController(persistentvolumecontroller.NewControllerClient(clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "persistent-volume-provisioner"))), s.PVClaimBinderSyncPeriod.Duration, s.ClusterName, volumePlugins, provisioner, cloud) if err != nil { glog.Fatalf("Failed to start persistent volume provisioner controller: %+v", err) } @@ -361,7 +362,7 @@ func StartControllers(s *options.CMServer, kubeClient *client.Client, kubeconfig glog.Errorf("Error reading key for service account token controller: %v", err) } else { serviceaccountcontroller.NewTokensController( - clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "tokens-controller")), + clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "tokens-controller")), serviceaccountcontroller.TokensControllerOptions{ TokenGenerator: serviceaccount.JWTTokenGenerator(privateKey), RootCA: rootCA, @@ -371,7 +372,7 @@ func StartControllers(s *options.CMServer, kubeClient *client.Client, kubeconfig } serviceaccountcontroller.NewServiceAccountsController( - clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "service-account-controller")), + clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "service-account-controller")), serviceaccountcontroller.DefaultServiceAccountsControllerOptions(), ).Run() diff --git a/cmd/kubelet/app/server.go b/cmd/kubelet/app/server.go index e4b7090c34..a73e3a2fe9 100644 --- a/cmd/kubelet/app/server.go +++ b/cmd/kubelet/app/server.go @@ -40,8 +40,8 @@ import ( "k8s.io/kubernetes/pkg/client/chaosclient" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" "k8s.io/kubernetes/pkg/client/record" + "k8s.io/kubernetes/pkg/client/restclient" unversionedcore "k8s.io/kubernetes/pkg/client/typed/generated/core/unversioned" - client "k8s.io/kubernetes/pkg/client/unversioned" clientauth "k8s.io/kubernetes/pkg/client/unversioned/auth" "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api" @@ -394,7 +394,7 @@ func InitializeTLS(s *options.KubeletServer) (*server.TLSOptions, error) { return tlsOptions, nil } -func authPathClientConfig(s *options.KubeletServer, useDefaults bool) (*client.Config, error) { +func authPathClientConfig(s *options.KubeletServer, useDefaults bool) (*restclient.Config, error) { authInfo, err := clientauth.LoadFromFile(s.AuthPath.Value()) if err != nil && !useDefaults { return nil, err @@ -408,7 +408,7 @@ func authPathClientConfig(s *options.KubeletServer, useDefaults bool) (*client.C // authInfo didn't load correctly - continue with defaults. authInfo = &clientauth.Info{} } - authConfig, err := authInfo.MergeWithConfig(client.Config{}) + authConfig, err := authInfo.MergeWithConfig(restclient.Config{}) if err != nil { return nil, err } @@ -416,7 +416,7 @@ func authPathClientConfig(s *options.KubeletServer, useDefaults bool) (*client.C return &authConfig, nil } -func kubeconfigClientConfig(s *options.KubeletServer) (*client.Config, error) { +func kubeconfigClientConfig(s *options.KubeletServer) (*restclient.Config, error) { return clientcmd.NewNonInteractiveDeferredLoadingClientConfig( &clientcmd.ClientConfigLoadingRules{ExplicitPath: s.KubeConfig.Value()}, &clientcmd.ConfigOverrides{ClusterInfo: clientcmdapi.Cluster{Server: s.APIServerList[0]}}).ClientConfig() @@ -428,7 +428,7 @@ func kubeconfigClientConfig(s *options.KubeletServer) (*client.Config, error) { // to load the default kubeconfig file, then the default auth path file, and // fall back to the default auth (none) without an error. // TODO(roberthbailey): Remove support for --auth-path -func createClientConfig(s *options.KubeletServer) (*client.Config, error) { +func createClientConfig(s *options.KubeletServer) (*restclient.Config, error) { if s.KubeConfig.Provided() && s.AuthPath.Provided() { return nil, fmt.Errorf("cannot specify both --kubeconfig and --auth-path") } @@ -451,7 +451,7 @@ func createClientConfig(s *options.KubeletServer) (*client.Config, error) { // including api-server-list, via createClientConfig and then injects chaos into // the configuration via addChaosToClientConfig. This func is exported to support // integration with third party kubelet extensions (e.g. kubernetes-mesos). -func CreateAPIServerClientConfig(s *options.KubeletServer) (*client.Config, error) { +func CreateAPIServerClientConfig(s *options.KubeletServer) (*restclient.Config, error) { if len(s.APIServerList) < 1 { return nil, fmt.Errorf("no api servers specified") } @@ -474,7 +474,7 @@ func CreateAPIServerClientConfig(s *options.KubeletServer) (*client.Config, erro } // addChaosToClientConfig injects random errors into client connections if configured. -func addChaosToClientConfig(s *options.KubeletServer, config *client.Config) { +func addChaosToClientConfig(s *options.KubeletServer, config *restclient.Config) { if s.ChaosChance != 0.0 { config.WrapTransport = func(rt http.RoundTripper) http.RoundTripper { seed := chaosclient.NewSeed(1) diff --git a/cmd/libs/go2idl/client-gen/generators/generator_for_clientset.go b/cmd/libs/go2idl/client-gen/generators/generator_for_clientset.go index a0868969e6..9cfb207ad9 100644 --- a/cmd/libs/go2idl/client-gen/generators/generator_for_clientset.go +++ b/cmd/libs/go2idl/client-gen/generators/generator_for_clientset.go @@ -70,6 +70,7 @@ func (g *genClientset) GenerateType(c *generator.Context, t *types.Type, w io.Wr // perhaps we can adapt the go2ild framework to this kind of usage. sw := generator.NewSnippetWriter(w, c, "$", "$") const pkgUnversioned = "k8s.io/kubernetes/pkg/client/unversioned" + const pkgRESTClient = "k8s.io/kubernetes/pkg/client/restclient" type arg struct { Group string @@ -85,9 +86,9 @@ func (g *genClientset) GenerateType(c *generator.Context, t *types.Type, w io.Wr m := map[string]interface{}{ "allGroups": allGroups, - "Config": c.Universe.Type(types.Name{Package: pkgUnversioned, Name: "Config"}), - "DefaultKubernetesUserAgent": c.Universe.Function(types.Name{Package: pkgUnversioned, Name: "DefaultKubernetesUserAgent"}), - "RESTClient": c.Universe.Type(types.Name{Package: pkgUnversioned, Name: "RESTClient"}), + "Config": c.Universe.Type(types.Name{Package: pkgRESTClient, Name: "Config"}), + "DefaultKubernetesUserAgent": c.Universe.Function(types.Name{Package: pkgRESTClient, Name: "DefaultKubernetesUserAgent"}), + "RESTClient": c.Universe.Type(types.Name{Package: pkgRESTClient, Name: "RESTClient"}), "DiscoveryInterface": c.Universe.Type(types.Name{Package: pkgUnversioned, Name: "DiscoveryInterface"}), "DiscoveryClient": c.Universe.Type(types.Name{Package: pkgUnversioned, Name: "DiscoveryClient"}), "NewDiscoveryClientForConfig": c.Universe.Function(types.Name{Package: pkgUnversioned, Name: "NewDiscoveryClientForConfig"}), diff --git a/cmd/libs/go2idl/client-gen/generators/generator_for_group.go b/cmd/libs/go2idl/client-gen/generators/generator_for_group.go index 5017556759..2496f1d558 100644 --- a/cmd/libs/go2idl/client-gen/generators/generator_for_group.go +++ b/cmd/libs/go2idl/client-gen/generators/generator_for_group.go @@ -53,7 +53,7 @@ func (g *genGroup) Imports(c *generator.Context) (imports []string) { func (g *genGroup) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error { sw := generator.NewSnippetWriter(w, c, "$", "$") - const pkgUnversioned = "k8s.io/kubernetes/pkg/client/unversioned" + const pkgRESTClient = "k8s.io/kubernetes/pkg/client/restclient" const pkgRegistered = "k8s.io/kubernetes/pkg/apimachinery/registered" const pkgAPI = "k8s.io/kubernetes/pkg/api" apiPath := func(group string) string { @@ -75,10 +75,10 @@ func (g *genGroup) GenerateType(c *generator.Context, t *types.Type, w io.Writer "Group": namer.IC(g.group), "canonicalGroup": canonize(g.group), "types": g.types, - "Config": c.Universe.Type(types.Name{Package: pkgUnversioned, Name: "Config"}), - "DefaultKubernetesUserAgent": c.Universe.Function(types.Name{Package: pkgUnversioned, Name: "DefaultKubernetesUserAgent"}), - "RESTClient": c.Universe.Type(types.Name{Package: pkgUnversioned, Name: "RESTClient"}), - "RESTClientFor": c.Universe.Function(types.Name{Package: pkgUnversioned, Name: "RESTClientFor"}), + "Config": c.Universe.Type(types.Name{Package: pkgRESTClient, Name: "Config"}), + "DefaultKubernetesUserAgent": c.Universe.Function(types.Name{Package: pkgRESTClient, Name: "DefaultKubernetesUserAgent"}), + "RESTClient": c.Universe.Type(types.Name{Package: pkgRESTClient, Name: "RESTClient"}), + "RESTClientFor": c.Universe.Function(types.Name{Package: pkgRESTClient, Name: "RESTClientFor"}), "latestGroup": c.Universe.Variable(types.Name{Package: pkgRegistered, Name: "Group"}), "GroupOrDie": c.Universe.Variable(types.Name{Package: pkgRegistered, Name: "GroupOrDie"}), "apiPath": apiPath(g.group), diff --git a/cmd/libs/go2idl/client-gen/testoutput/clientset_generated/test_internalclientset/clientset.go b/cmd/libs/go2idl/client-gen/testoutput/clientset_generated/test_internalclientset/clientset.go index cb9f7a2b48..855c21a2c2 100644 --- a/cmd/libs/go2idl/client-gen/testoutput/clientset_generated/test_internalclientset/clientset.go +++ b/cmd/libs/go2idl/client-gen/testoutput/clientset_generated/test_internalclientset/clientset.go @@ -19,6 +19,7 @@ package test_internalclientset import ( "github.com/golang/glog" unversionedtestgroup "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testoutput/testgroup/unversioned" + restclient "k8s.io/kubernetes/pkg/client/restclient" unversioned "k8s.io/kubernetes/pkg/client/unversioned" ) @@ -45,7 +46,7 @@ func (c *Clientset) Discovery() unversioned.DiscoveryInterface { } // NewForConfig creates a new Clientset for the given config. -func NewForConfig(c *unversioned.Config) (*Clientset, error) { +func NewForConfig(c *restclient.Config) (*Clientset, error) { var clientset Clientset var err error clientset.TestgroupClient, err = unversionedtestgroup.NewForConfig(c) @@ -62,7 +63,7 @@ func NewForConfig(c *unversioned.Config) (*Clientset, error) { // NewForConfigOrDie creates a new Clientset for the given config and // panics if there is an error in the config. -func NewForConfigOrDie(c *unversioned.Config) *Clientset { +func NewForConfigOrDie(c *restclient.Config) *Clientset { var clientset Clientset clientset.TestgroupClient = unversionedtestgroup.NewForConfigOrDie(c) @@ -71,7 +72,7 @@ func NewForConfigOrDie(c *unversioned.Config) *Clientset { } // New creates a new Clientset for the given RESTClient. -func New(c *unversioned.RESTClient) *Clientset { +func New(c *restclient.RESTClient) *Clientset { var clientset Clientset clientset.TestgroupClient = unversionedtestgroup.New(c) diff --git a/cmd/libs/go2idl/client-gen/testoutput/testgroup/unversioned/testgroup_client.go b/cmd/libs/go2idl/client-gen/testoutput/testgroup/unversioned/testgroup_client.go index a80e27299f..86dfe639cd 100644 --- a/cmd/libs/go2idl/client-gen/testoutput/testgroup/unversioned/testgroup_client.go +++ b/cmd/libs/go2idl/client-gen/testoutput/testgroup/unversioned/testgroup_client.go @@ -19,7 +19,7 @@ package unversioned import ( api "k8s.io/kubernetes/pkg/api" registered "k8s.io/kubernetes/pkg/apimachinery/registered" - unversioned "k8s.io/kubernetes/pkg/client/unversioned" + restclient "k8s.io/kubernetes/pkg/client/restclient" ) type TestgroupInterface interface { @@ -28,7 +28,7 @@ type TestgroupInterface interface { // TestgroupClient is used to interact with features provided by the Testgroup group. type TestgroupClient struct { - *unversioned.RESTClient + *restclient.RESTClient } func (c *TestgroupClient) TestTypes(namespace string) TestTypeInterface { @@ -36,12 +36,12 @@ func (c *TestgroupClient) TestTypes(namespace string) TestTypeInterface { } // NewForConfig creates a new TestgroupClient for the given config. -func NewForConfig(c *unversioned.Config) (*TestgroupClient, error) { +func NewForConfig(c *restclient.Config) (*TestgroupClient, error) { config := *c if err := setConfigDefaults(&config); err != nil { return nil, err } - client, err := unversioned.RESTClientFor(&config) + client, err := restclient.RESTClientFor(&config) if err != nil { return nil, err } @@ -50,7 +50,7 @@ func NewForConfig(c *unversioned.Config) (*TestgroupClient, error) { // NewForConfigOrDie creates a new TestgroupClient for the given config and // panics if there is an error in the config. -func NewForConfigOrDie(c *unversioned.Config) *TestgroupClient { +func NewForConfigOrDie(c *restclient.Config) *TestgroupClient { client, err := NewForConfig(c) if err != nil { panic(err) @@ -59,11 +59,11 @@ func NewForConfigOrDie(c *unversioned.Config) *TestgroupClient { } // New creates a new TestgroupClient for the given RESTClient. -func New(c *unversioned.RESTClient) *TestgroupClient { +func New(c *restclient.RESTClient) *TestgroupClient { return &TestgroupClient{c} } -func setConfigDefaults(config *unversioned.Config) error { +func setConfigDefaults(config *restclient.Config) error { // if testgroup group is not registered, return an error g, err := registered.Group("testgroup") if err != nil { @@ -71,7 +71,7 @@ func setConfigDefaults(config *unversioned.Config) error { } config.APIPath = "/apis" if config.UserAgent == "" { - config.UserAgent = unversioned.DefaultKubernetesUserAgent() + config.UserAgent = restclient.DefaultKubernetesUserAgent() } // TODO: Unconditionally set the config.Version, until we fix the config. //if config.Version == "" { diff --git a/cmd/libs/go2idl/client-gen/testoutput/testgroup/unversioned/testgroup_test.go b/cmd/libs/go2idl/client-gen/testoutput/testgroup/unversioned/testgroup_test.go index 8f171d3d87..9d65798ba3 100644 --- a/cmd/libs/go2idl/client-gen/testoutput/testgroup/unversioned/testgroup_test.go +++ b/cmd/libs/go2idl/client-gen/testoutput/testgroup/unversioned/testgroup_test.go @@ -28,7 +28,7 @@ import ( "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apimachinery/registered" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" "k8s.io/kubernetes/pkg/labels" ) @@ -54,7 +54,7 @@ type DecoratedSimpleClient struct { func (c *DecoratedSimpleClient) Setup(t *testing.T) *DecoratedSimpleClient { c.simpleClient.Setup(t) url := c.simpleClient.ServerURL() - c.TestgroupClient = NewForConfigOrDie(&client.Config{ + c.TestgroupClient = NewForConfigOrDie(&restclient.Config{ Host: url, }) return c diff --git a/contrib/mesos/pkg/controllermanager/controllermanager.go b/contrib/mesos/pkg/controllermanager/controllermanager.go index 7dfdc2beeb..e383e79225 100644 --- a/contrib/mesos/pkg/controllermanager/controllermanager.go +++ b/contrib/mesos/pkg/controllermanager/controllermanager.go @@ -31,6 +31,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/unversioned" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api" @@ -130,14 +131,14 @@ func (s *CMServer) Run(_ []string) error { glog.Fatal(server.ListenAndServe()) }() - endpoints := s.createEndpointController(clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "endpoint-controller"))) + endpoints := s.createEndpointController(clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "endpoint-controller"))) go endpoints.Run(s.ConcurrentEndpointSyncs, wait.NeverStop) - go replicationcontroller.NewReplicationManager(clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "replication-controller")), s.resyncPeriod, replicationcontroller.BurstReplicas, s.LookupCacheSizeForRC). + go replicationcontroller.NewReplicationManager(clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "replication-controller")), s.resyncPeriod, replicationcontroller.BurstReplicas, s.LookupCacheSizeForRC). Run(s.ConcurrentRCSyncs, wait.NeverStop) if s.TerminatedPodGCThreshold > 0 { - go gc.New(clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "garbage-collector")), s.resyncPeriod, s.TerminatedPodGCThreshold). + go gc.New(clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "garbage-collector")), s.resyncPeriod, s.TerminatedPodGCThreshold). Run(wait.NeverStop) } @@ -150,18 +151,18 @@ func (s *CMServer) Run(_ []string) error { glog.Fatalf("Cloud provider could not be initialized: %v", err) } _, clusterCIDR, _ := net.ParseCIDR(s.ClusterCIDR) - nodeController := nodecontroller.NewNodeController(cloud, clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "node-controller")), + nodeController := nodecontroller.NewNodeController(cloud, clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "node-controller")), s.PodEvictionTimeout.Duration, util.NewTokenBucketRateLimiter(s.DeletingPodsQps, s.DeletingPodsBurst), util.NewTokenBucketRateLimiter(s.DeletingPodsQps, s.DeletingPodsBurst), s.NodeMonitorGracePeriod.Duration, s.NodeStartupGracePeriod.Duration, s.NodeMonitorPeriod.Duration, clusterCIDR, s.AllocateNodeCIDRs) nodeController.Run(s.NodeSyncPeriod.Duration) - nodeStatusUpdaterController := node.NewStatusUpdater(clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "node-status-controller")), s.NodeMonitorPeriod.Duration, time.Now) + nodeStatusUpdaterController := node.NewStatusUpdater(clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "node-status-controller")), s.NodeMonitorPeriod.Duration, time.Now) if err := nodeStatusUpdaterController.Run(wait.NeverStop); err != nil { glog.Fatalf("Failed to start node status update controller: %v", err) } - serviceController := servicecontroller.New(cloud, clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "service-controller")), s.ClusterName) + serviceController := servicecontroller.New(cloud, clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "service-controller")), s.ClusterName) if err := serviceController.Run(s.ServiceSyncPeriod.Duration, s.NodeSyncPeriod.Duration); err != nil { glog.Errorf("Failed to start service controller: %v", err) } @@ -171,11 +172,11 @@ func (s *CMServer) Run(_ []string) error { if !ok { glog.Fatal("Cloud provider must support routes if allocate-node-cidrs is set") } - routeController := routecontroller.New(routes, clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "route-controller")), s.ClusterName, clusterCIDR) + routeController := routecontroller.New(routes, clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "route-controller")), s.ClusterName, clusterCIDR) routeController.Run(s.NodeSyncPeriod.Duration) } - resourceQuotaControllerClient := clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "resource-quota-controller")) + resourceQuotaControllerClient := clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "resource-quota-controller")) resourceQuotaRegistry := quotainstall.NewRegistry(resourceQuotaControllerClient) groupKindsToReplenish := []unversioned.GroupKind{ api.Kind("Pod"), @@ -197,7 +198,7 @@ func (s *CMServer) Run(_ []string) error { // important when we start apiserver and controller manager at the same time. var versionStrings []string err = wait.PollImmediate(time.Second, 10*time.Second, func() (bool, error) { - if versionStrings, err = client.ServerAPIVersions(kubeconfig); err == nil { + if versionStrings, err = restclient.ServerAPIVersions(kubeconfig); err == nil { return true, nil } glog.Errorf("Failed to get api versions from server: %v", err) @@ -213,7 +214,7 @@ func (s *CMServer) Run(_ []string) error { glog.Fatalf("Failed to get supported resources from server: %v", err) } - namespaceController := namespacecontroller.NewNamespaceController(clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "namespace-controller")), versions, s.NamespaceSyncPeriod.Duration) + namespaceController := namespacecontroller.NewNamespaceController(clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "namespace-controller")), versions, s.NamespaceSyncPeriod.Duration) go namespaceController.Run(s.ConcurrentNamespaceSyncs, wait.NeverStop) groupVersion := "extensions/v1beta1" @@ -223,7 +224,7 @@ func (s *CMServer) Run(_ []string) error { glog.Infof("Starting %s apis", groupVersion) if containsResource(resources, "horizontalpodautoscalers") { glog.Infof("Starting horizontal pod controller.") - hpaClient := clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "horizontal-pod-autoscaler")) + hpaClient := clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "horizontal-pod-autoscaler")) metricsClient := metrics.NewHeapsterMetricsClient( hpaClient, metrics.DefaultHeapsterNamespace, @@ -237,25 +238,25 @@ func (s *CMServer) Run(_ []string) error { if containsResource(resources, "daemonsets") { glog.Infof("Starting daemon set controller") - go daemon.NewDaemonSetsController(clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "daemon-set-controller")), s.resyncPeriod). + go daemon.NewDaemonSetsController(clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "daemon-set-controller")), s.resyncPeriod). Run(s.ConcurrentDaemonSetSyncs, wait.NeverStop) } if containsResource(resources, "jobs") { glog.Infof("Starting job controller") - go job.NewJobController(clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "job-controller")), s.resyncPeriod). + go job.NewJobController(clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "job-controller")), s.resyncPeriod). Run(s.ConcurrentJobSyncs, wait.NeverStop) } if containsResource(resources, "deployments") { glog.Infof("Starting deployment controller") - go deployment.NewDeploymentController(clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "deployment-controller")), s.resyncPeriod). + go deployment.NewDeploymentController(clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "deployment-controller")), s.resyncPeriod). Run(s.ConcurrentDeploymentSyncs, wait.NeverStop) } if containsResource(resources, "replicasets") { glog.Infof("Starting ReplicaSet controller") - go replicaset.NewReplicaSetController(clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "replicaset-controller")), s.resyncPeriod, replicaset.BurstReplicas, s.LookupCacheSizeForRS). + go replicaset.NewReplicaSetController(clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "replicaset-controller")), s.resyncPeriod, replicaset.BurstReplicas, s.LookupCacheSizeForRS). Run(s.ConcurrentRSSyncs, wait.NeverStop) } } @@ -267,13 +268,13 @@ func (s *CMServer) Run(_ []string) error { } pvclaimBinder := persistentvolumecontroller.NewPersistentVolumeClaimBinder( - clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "persistent-volume-binder")), + clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "persistent-volume-binder")), s.PVClaimBinderSyncPeriod.Duration, ) pvclaimBinder.Run() pvRecycler, err := persistentvolumecontroller.NewPersistentVolumeRecycler( - clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "persistent-volume-recycler")), + clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "persistent-volume-recycler")), s.PVClaimBinderSyncPeriod.Duration, s.VolumeConfiguration.PersistentVolumeRecyclerConfiguration.MaximumRetry, kubecontrollermanager.ProbeRecyclableVolumePlugins(s.VolumeConfiguration), @@ -285,7 +286,7 @@ func (s *CMServer) Run(_ []string) error { pvRecycler.Run() if provisioner != nil { - pvController, err := persistentvolumecontroller.NewPersistentVolumeProvisionerController(persistentvolumecontroller.NewControllerClient(clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "persistent-volume-controller"))), s.PVClaimBinderSyncPeriod.Duration, s.ClusterName, volumePlugins, provisioner, cloud) + pvController, err := persistentvolumecontroller.NewPersistentVolumeProvisionerController(persistentvolumecontroller.NewControllerClient(clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "persistent-volume-controller"))), s.PVClaimBinderSyncPeriod.Duration, s.ClusterName, volumePlugins, provisioner, cloud) if err != nil { glog.Fatalf("Failed to start persistent volume provisioner controller: %+v", err) } @@ -312,7 +313,7 @@ func (s *CMServer) Run(_ []string) error { glog.Errorf("Error reading key for service account token controller: %v", err) } else { serviceaccountcontroller.NewTokensController( - clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "tokens-controller")), + clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "tokens-controller")), serviceaccountcontroller.TokensControllerOptions{ TokenGenerator: serviceaccount.JWTTokenGenerator(privateKey), RootCA: rootCA, @@ -322,7 +323,7 @@ func (s *CMServer) Run(_ []string) error { } serviceaccountcontroller.NewServiceAccountsController( - clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "service-account-controller")), + clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "service-account-controller")), serviceaccountcontroller.DefaultServiceAccountsControllerOptions(), ).Run() diff --git a/contrib/mesos/pkg/executor/service/service.go b/contrib/mesos/pkg/executor/service/service.go index 1a7566c04c..c7c7031c6c 100644 --- a/contrib/mesos/pkg/executor/service/service.go +++ b/contrib/mesos/pkg/executor/service/service.go @@ -37,7 +37,6 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/client/cache" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" - client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/fields" "k8s.io/kubernetes/pkg/kubelet" "k8s.io/kubernetes/pkg/kubelet/cm" @@ -295,7 +294,7 @@ func (s *KubeletExecutorServer) Run(hks hyperkube.Interface, _ []string) error { var ( pw = cache.NewListWatchFromClient(apiclient.CoreClient, "pods", api.NamespaceAll, - fields.OneTermEqualSelector(client.PodHost, s.HostnameOverride), + fields.OneTermEqualSelector(api.PodHostField, s.HostnameOverride), ) reg = executor.NewRegistry(apiclient) ) diff --git a/contrib/mesos/pkg/minion/server.go b/contrib/mesos/pkg/minion/server.go index 09e0cadb63..5129cd1920 100644 --- a/contrib/mesos/pkg/minion/server.go +++ b/contrib/mesos/pkg/minion/server.go @@ -27,18 +27,17 @@ import ( "strings" "syscall" + log "github.com/golang/glog" + "github.com/kardianos/osext" + "github.com/spf13/pflag" + "gopkg.in/natefinch/lumberjack.v2" kubeletapp "k8s.io/kubernetes/cmd/kubelet/app" exservice "k8s.io/kubernetes/contrib/mesos/pkg/executor/service" "k8s.io/kubernetes/contrib/mesos/pkg/hyperkube" "k8s.io/kubernetes/contrib/mesos/pkg/minion/config" "k8s.io/kubernetes/contrib/mesos/pkg/minion/tasks" "k8s.io/kubernetes/pkg/api/resource" - client "k8s.io/kubernetes/pkg/client/unversioned" - - log "github.com/golang/glog" - "github.com/kardianos/osext" - "github.com/spf13/pflag" - "gopkg.in/natefinch/lumberjack.v2" + "k8s.io/kubernetes/pkg/client/restclient" ) const ( @@ -53,7 +52,7 @@ type MinionServer struct { privateMountNS bool hks hyperkube.Interface - clientConfig *client.Config + clientConfig *restclient.Config kmBinary string tasks []*tasks.Task diff --git a/contrib/mesos/pkg/scheduler/integration/integration_test.go b/contrib/mesos/pkg/scheduler/integration/integration_test.go index dbb6edd231..e45ef4e3f8 100644 --- a/contrib/mesos/pkg/scheduler/integration/integration_test.go +++ b/contrib/mesos/pkg/scheduler/integration/integration_test.go @@ -50,7 +50,7 @@ import ( "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/client/cache" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/wait" "k8s.io/kubernetes/pkg/watch" @@ -490,9 +490,9 @@ func newLifecycleTest(t *testing.T) lifecycleTest { ei.Data = []byte{0, 1, 2} // create framework - client := clientset.NewForConfigOrDie(&client.Config{ + client := clientset.NewForConfigOrDie(&restclient.Config{ Host: apiServer.server.URL, - ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}, + ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}, }) c := *schedcfg.CreateDefaultConfig() fw := framework.New(framework.Config{ diff --git a/contrib/mesos/pkg/scheduler/service/service.go b/contrib/mesos/pkg/scheduler/service/service.go index e969784a38..ac305dc2e1 100644 --- a/contrib/mesos/pkg/scheduler/service/service.go +++ b/contrib/mesos/pkg/scheduler/service/service.go @@ -74,8 +74,8 @@ import ( "k8s.io/kubernetes/pkg/client/cache" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" "k8s.io/kubernetes/pkg/client/record" + "k8s.io/kubernetes/pkg/client/restclient" unversionedcore "k8s.io/kubernetes/pkg/client/typed/generated/core/unversioned" - client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" cloud "k8s.io/kubernetes/pkg/cloudprovider/providers/mesos" controllerfw "k8s.io/kubernetes/pkg/controller/framework" @@ -534,7 +534,7 @@ func (s *SchedulerServer) prepareStaticPods() (data []byte, staticPodCPUs, stati } // TODO(jdef): hacked from plugin/cmd/kube-scheduler/app/server.go -func (s *SchedulerServer) createAPIServerClientConfig() (*client.Config, error) { +func (s *SchedulerServer) createAPIServerClientConfig() (*restclient.Config, error) { kubeconfig, err := clientcmd.BuildConfigFromFlags(s.apiServerList[0], s.kubeconfig) if err != nil { return nil, err diff --git a/pkg/api/field_constants.go b/pkg/api/field_constants.go new file mode 100644 index 0000000000..94a825caf2 --- /dev/null +++ b/pkg/api/field_constants.go @@ -0,0 +1,38 @@ +/* +Copyright 2016 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package api + +// Field path constants that are specific to the internal API +// representation. +const ( + NodeUnschedulableField = "spec.unschedulable" + ObjectNameField = "metadata.name" + PodHostField = "spec.nodeName" + PodStatusField = "status.phase" + SecretTypeField = "type" + + EventReasonField = "reason" + EventSourceField = "source" + EventTypeField = "type" + EventInvolvedKindField = "involvedObject.kind" + EventInvolvedNamespaceField = "involvedObject.namespace" + EventInvolvedNameField = "involvedObject.name" + EventInvolvedUIDField = "involvedObject.uid" + EventInvolvedAPIVersionField = "involvedObject.apiVersion" + EventInvolvedResourceVersionField = "involvedObject.resourceVersion" + EventInvolvedFieldPathField = "involvedObject.fieldPath" +) diff --git a/pkg/client/cache/listwatch.go b/pkg/client/cache/listwatch.go index 18528d2365..06c2f611bf 100644 --- a/pkg/client/cache/listwatch.go +++ b/pkg/client/cache/listwatch.go @@ -20,7 +20,7 @@ import ( "time" "k8s.io/kubernetes/pkg/api" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/fields" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/watch" @@ -42,7 +42,7 @@ type ListWatch struct { // Getter interface knows how to access Get method from RESTClient. type Getter interface { - Get() *client.Request + Get() *restclient.Request } // NewListWatchFromClient creates a new ListWatch from the specified client, resource, namespace and field selector. diff --git a/pkg/client/cache/listwatch_test.go b/pkg/client/cache/listwatch_test.go index a0a72f5d83..0008bd0ff5 100644 --- a/pkg/client/cache/listwatch_test.go +++ b/pkg/client/cache/listwatch_test.go @@ -24,6 +24,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/fields" utiltesting "k8s.io/kubernetes/pkg/util/testing" @@ -97,7 +98,7 @@ func TestListWatchesCanList(t *testing.T) { server := httptest.NewServer(&handler) // TODO: Uncomment when fix #19254 // defer server.Close() - client := client.NewOrDie(&client.Config{Host: server.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := client.NewOrDie(&restclient.Config{Host: server.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) lw := NewListWatchFromClient(client, item.resource, item.namespace, item.fieldSelector) // This test merely tests that the correct request is made. lw.List(api.ListOptions{}) @@ -164,7 +165,7 @@ func TestListWatchesCanWatch(t *testing.T) { server := httptest.NewServer(&handler) // TODO: Uncomment when fix #19254 // defer server.Close() - client := client.NewOrDie(&client.Config{Host: server.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := client.NewOrDie(&restclient.Config{Host: server.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) lw := NewListWatchFromClient(client, item.resource, item.namespace, item.fieldSelector) // This test merely tests that the correct request is made. lw.Watch(api.ListOptions{ResourceVersion: item.rv}) diff --git a/pkg/client/clientset_generated/internalclientset/clientset.go b/pkg/client/clientset_generated/internalclientset/clientset.go index 66a2e6863d..ff14a31c94 100644 --- a/pkg/client/clientset_generated/internalclientset/clientset.go +++ b/pkg/client/clientset_generated/internalclientset/clientset.go @@ -18,6 +18,7 @@ package internalclientset import ( "github.com/golang/glog" + restclient "k8s.io/kubernetes/pkg/client/restclient" unversionedcore "k8s.io/kubernetes/pkg/client/typed/generated/core/unversioned" unversionedextensions "k8s.io/kubernetes/pkg/client/typed/generated/extensions/unversioned" unversioned "k8s.io/kubernetes/pkg/client/unversioned" @@ -53,7 +54,7 @@ func (c *Clientset) Discovery() unversioned.DiscoveryInterface { } // NewForConfig creates a new Clientset for the given config. -func NewForConfig(c *unversioned.Config) (*Clientset, error) { +func NewForConfig(c *restclient.Config) (*Clientset, error) { var clientset Clientset var err error clientset.CoreClient, err = unversionedcore.NewForConfig(c) @@ -74,7 +75,7 @@ func NewForConfig(c *unversioned.Config) (*Clientset, error) { // NewForConfigOrDie creates a new Clientset for the given config and // panics if there is an error in the config. -func NewForConfigOrDie(c *unversioned.Config) *Clientset { +func NewForConfigOrDie(c *restclient.Config) *Clientset { var clientset Clientset clientset.CoreClient = unversionedcore.NewForConfigOrDie(c) clientset.ExtensionsClient = unversionedextensions.NewForConfigOrDie(c) @@ -84,7 +85,7 @@ func NewForConfigOrDie(c *unversioned.Config) *Clientset { } // New creates a new Clientset for the given RESTClient. -func New(c *unversioned.RESTClient) *Clientset { +func New(c *restclient.RESTClient) *Clientset { var clientset Clientset clientset.CoreClient = unversionedcore.New(c) clientset.ExtensionsClient = unversionedextensions.New(c) diff --git a/pkg/client/clientset_generated/release_1_2/clientset.go b/pkg/client/clientset_generated/release_1_2/clientset.go index e2dde4bae5..fce1892979 100644 --- a/pkg/client/clientset_generated/release_1_2/clientset.go +++ b/pkg/client/clientset_generated/release_1_2/clientset.go @@ -18,6 +18,7 @@ package release_1_2 import ( "github.com/golang/glog" + restclient "k8s.io/kubernetes/pkg/client/restclient" v1core "k8s.io/kubernetes/pkg/client/typed/generated/core/v1" v1beta1extensions "k8s.io/kubernetes/pkg/client/typed/generated/extensions/v1beta1" unversioned "k8s.io/kubernetes/pkg/client/unversioned" @@ -53,7 +54,7 @@ func (c *Clientset) Discovery() unversioned.DiscoveryInterface { } // NewForConfig creates a new Clientset for the given config. -func NewForConfig(c *unversioned.Config) (*Clientset, error) { +func NewForConfig(c *restclient.Config) (*Clientset, error) { var clientset Clientset var err error clientset.CoreClient, err = v1core.NewForConfig(c) @@ -74,7 +75,7 @@ func NewForConfig(c *unversioned.Config) (*Clientset, error) { // NewForConfigOrDie creates a new Clientset for the given config and // panics if there is an error in the config. -func NewForConfigOrDie(c *unversioned.Config) *Clientset { +func NewForConfigOrDie(c *restclient.Config) *Clientset { var clientset Clientset clientset.CoreClient = v1core.NewForConfigOrDie(c) clientset.ExtensionsClient = v1beta1extensions.NewForConfigOrDie(c) @@ -84,7 +85,7 @@ func NewForConfigOrDie(c *unversioned.Config) *Clientset { } // New creates a new Clientset for the given RESTClient. -func New(c *unversioned.RESTClient) *Clientset { +func New(c *restclient.RESTClient) *Clientset { var clientset Clientset clientset.CoreClient = v1core.New(c) clientset.ExtensionsClient = v1beta1extensions.New(c) diff --git a/pkg/client/record/event.go b/pkg/client/record/event.go index 221a8cc340..a478682475 100644 --- a/pkg/client/record/event.go +++ b/pkg/client/record/event.go @@ -24,7 +24,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/unversioned" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util" utilruntime "k8s.io/kubernetes/pkg/util/runtime" @@ -182,7 +182,7 @@ func recordEvent(sink EventSink, event *api.Event, patch []byte, updateExistingE // If we can't contact the server, then hold everything while we keep trying. // Otherwise, something about the event is malformed and we should abandon it. switch err.(type) { - case *client.RequestConstructionError: + case *restclient.RequestConstructionError: // We will construct the request the same next time, so don't keep trying. glog.Errorf("Unable to construct event '%#v': '%v' (will not retry!)", event, err) return true diff --git a/pkg/client/record/event_test.go b/pkg/client/record/event_test.go index 61597e0d59..8c482f5593 100644 --- a/pkg/client/record/event_test.go +++ b/pkg/client/record/event_test.go @@ -26,7 +26,8 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" - client "k8s.io/kubernetes/pkg/client/unversioned" + _ "k8s.io/kubernetes/pkg/api/install" // To register api.Pod used in tests below + "k8s.io/kubernetes/pkg/client/restclient" k8sruntime "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util" "k8s.io/kubernetes/pkg/util/strategicpatch" @@ -391,7 +392,7 @@ func TestWriteEventError(t *testing.T) { "giveUp1": { timesToSendError: 1000, attemptsWanted: 1, - err: &client.RequestConstructionError{}, + err: &restclient.RequestConstructionError{}, }, "giveUp2": { timesToSendError: 1000, diff --git a/pkg/client/unversioned/restclient.go b/pkg/client/restclient/client.go similarity index 99% rename from pkg/client/unversioned/restclient.go rename to pkg/client/restclient/client.go index 3946754f31..2e378a9225 100644 --- a/pkg/client/unversioned/restclient.go +++ b/pkg/client/restclient/client.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package unversioned +package restclient import ( "net/http" diff --git a/pkg/client/unversioned/restclient_test.go b/pkg/client/restclient/client_test.go similarity index 99% rename from pkg/client/unversioned/restclient_test.go rename to pkg/client/restclient/client_test.go index 912611f4ab..1982890671 100644 --- a/pkg/client/unversioned/restclient_test.go +++ b/pkg/client/restclient/client_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package unversioned +package restclient import ( "net/http" diff --git a/pkg/client/restclient/config.go b/pkg/client/restclient/config.go new file mode 100644 index 0000000000..b084a8eb2b --- /dev/null +++ b/pkg/client/restclient/config.go @@ -0,0 +1,309 @@ +/* +Copyright 2016 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package restclient + +import ( + "fmt" + "io/ioutil" + "net" + "net/http" + "os" + "path" + gruntime "runtime" + "strings" + + "github.com/golang/glog" + + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/util" + "k8s.io/kubernetes/pkg/version" +) + +// Config holds the common attributes that can be passed to a Kubernetes client on +// initialization. +type Config struct { + // Host must be a host string, a host:port pair, or a URL to the base of the apiserver. + // If a URL is given then the (optional) Path of that URL represents a prefix that must + // be appended to all request URIs used to access the apiserver. This allows a frontend + // proxy to easily relocate all of the apiserver endpoints. + Host string + // APIPath is a sub-path that points to an API root. + APIPath string + // Prefix is the sub path of the server. If not specified, the client will set + // a default value. Use "/" to indicate the server root should be used + Prefix string + + // ContentConfig contains settings that affect how objects are transformed when + // sent to the server. + ContentConfig + + // Server requires Basic authentication + Username string + Password string + + // Server requires Bearer authentication. This client will not attempt to use + // refresh tokens for an OAuth2 flow. + // TODO: demonstrate an OAuth2 compatible client. + BearerToken string + + // TLSClientConfig contains settings to enable transport layer security + TLSClientConfig + + // Server should be accessed without verifying the TLS + // certificate. For testing only. + Insecure bool + + // UserAgent is an optional field that specifies the caller of this request. + UserAgent string + + // Transport may be used for custom HTTP behavior. This attribute may not + // be specified with the TLS client certificate options. Use WrapTransport + // for most client level operations. + Transport http.RoundTripper + // WrapTransport will be invoked for custom HTTP behavior after the underlying + // transport is initialized (either the transport created from TLSClientConfig, + // Transport, or http.DefaultTransport). The config may layer other RoundTrippers + // on top of the returned RoundTripper. + WrapTransport func(rt http.RoundTripper) http.RoundTripper + + // QPS indicates the maximum QPS to the master from this client. If zero, QPS is unlimited. + QPS float32 + + // Maximum burst for throttle + Burst int +} + +// TLSClientConfig contains settings to enable transport layer security +type TLSClientConfig struct { + // Server requires TLS client certificate authentication + CertFile string + // Server requires TLS client certificate authentication + KeyFile string + // Trusted root certificates for server + CAFile string + + // CertData holds PEM-encoded bytes (typically read from a client certificate file). + // CertData takes precedence over CertFile + CertData []byte + // KeyData holds PEM-encoded bytes (typically read from a client certificate key file). + // KeyData takes precedence over KeyFile + KeyData []byte + // CAData holds PEM-encoded bytes (typically read from a root certificates bundle). + // CAData takes precedence over CAFile + CAData []byte +} + +type ContentConfig struct { + // ContentType specifies the wire format used to communicate with the server. + // This value will be set as the Accept header on requests made to the server, and + // as the default content type on any object sent to the server. If not set, + // "application/json" is used. + ContentType string + // GroupVersion is the API version to talk to. Must be provided when initializing + // a RESTClient directly. When initializing a Client, will be set with the default + // code version. + GroupVersion *unversioned.GroupVersion + // Codec specifies the encoding and decoding behavior for runtime.Objects passed + // to a RESTClient or Client. Required when initializing a RESTClient, optional + // when initializing a Client. + Codec runtime.Codec +} + +// RESTClientFor returns a RESTClient that satisfies the requested attributes on a client Config +// object. Note that a RESTClient may require fields that are optional when initializing a Client. +// A RESTClient created by this method is generic - it expects to operate on an API that follows +// the Kubernetes conventions, but may not be the Kubernetes API. +func RESTClientFor(config *Config) (*RESTClient, error) { + if config.GroupVersion == nil { + return nil, fmt.Errorf("GroupVersion is required when initializing a RESTClient") + } + if config.Codec == nil { + return nil, fmt.Errorf("Codec is required when initializing a RESTClient") + } + + baseURL, versionedAPIPath, err := defaultServerUrlFor(config) + if err != nil { + return nil, err + } + + transport, err := TransportFor(config) + if err != nil { + return nil, err + } + + var httpClient *http.Client + if transport != http.DefaultTransport { + httpClient = &http.Client{Transport: transport} + } + + client := NewRESTClient(baseURL, versionedAPIPath, config.ContentConfig, config.QPS, config.Burst, httpClient) + + return client, nil +} + +// UnversionedRESTClientFor is the same as RESTClientFor, except that it allows +// the config.Version to be empty. +func UnversionedRESTClientFor(config *Config) (*RESTClient, error) { + if config.Codec == nil { + return nil, fmt.Errorf("Codec is required when initializing a RESTClient") + } + + baseURL, versionedAPIPath, err := defaultServerUrlFor(config) + if err != nil { + return nil, err + } + + transport, err := TransportFor(config) + if err != nil { + return nil, err + } + + var httpClient *http.Client + if transport != http.DefaultTransport { + httpClient = &http.Client{Transport: transport} + } + + versionConfig := config.ContentConfig + if versionConfig.GroupVersion == nil { + v := unversioned.SchemeGroupVersion + versionConfig.GroupVersion = &v + } + + client := NewRESTClient(baseURL, versionedAPIPath, versionConfig, config.QPS, config.Burst, httpClient) + return client, nil +} + +// SetKubernetesDefaults sets default values on the provided client config for accessing the +// Kubernetes API or returns an error if any of the defaults are impossible or invalid. +func SetKubernetesDefaults(config *Config) error { + if len(config.UserAgent) == 0 { + config.UserAgent = DefaultKubernetesUserAgent() + } + if config.QPS == 0.0 { + config.QPS = 5.0 + } + if config.Burst == 0 { + config.Burst = 10 + } + return nil +} + +// DefaultKubernetesUserAgent returns the default user agent that clients can use. +func DefaultKubernetesUserAgent() string { + commit := version.Get().GitCommit + if len(commit) > 7 { + commit = commit[:7] + } + if len(commit) == 0 { + commit = "unknown" + } + version := version.Get().GitVersion + seg := strings.SplitN(version, "-", 2) + version = seg[0] + return fmt.Sprintf("%s/%s (%s/%s) kubernetes/%s", path.Base(os.Args[0]), version, gruntime.GOOS, gruntime.GOARCH, commit) +} + +// InClusterConfig returns a config object which uses the service account +// kubernetes gives to pods. It's intended for clients that expect to be +// running inside a pod running on kuberenetes. It will return an error if +// called from a process not running in a kubernetes environment. +func InClusterConfig() (*Config, error) { + host, port := os.Getenv("KUBERNETES_SERVICE_HOST"), os.Getenv("KUBERNETES_SERVICE_PORT") + if len(host) == 0 || len(port) == 0 { + return nil, fmt.Errorf("unable to load in-cluster configuration, KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT must be defined") + } + + token, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/" + api.ServiceAccountTokenKey) + if err != nil { + return nil, err + } + tlsClientConfig := TLSClientConfig{} + rootCAFile := "/var/run/secrets/kubernetes.io/serviceaccount/" + api.ServiceAccountRootCAKey + if _, err := util.CertPoolFromFile(rootCAFile); err != nil { + glog.Errorf("Expected to load root CA config from %s, but got err: %v", rootCAFile, err) + } else { + tlsClientConfig.CAFile = rootCAFile + } + + return &Config{ + // TODO: switch to using cluster DNS. + Host: "https://" + net.JoinHostPort(host, port), + BearerToken: string(token), + TLSClientConfig: tlsClientConfig, + }, nil +} + +// IsConfigTransportTLS returns true if and only if the provided +// config will result in a protected connection to the server when it +// is passed to restclient.RESTClientFor(). Use to determine when to +// send credentials over the wire. +// +// Note: the Insecure flag is ignored when testing for this value, so MITM attacks are +// still possible. +func IsConfigTransportTLS(config Config) bool { + baseURL, _, err := defaultServerUrlFor(&config) + if err != nil { + return false + } + return baseURL.Scheme == "https" +} + +// LoadTLSFiles copies the data from the CertFile, KeyFile, and CAFile fields into the CertData, +// KeyData, and CAFile fields, or returns an error. If no error is returned, all three fields are +// either populated or were empty to start. +func LoadTLSFiles(c *Config) error { + var err error + c.CAData, err = dataFromSliceOrFile(c.CAData, c.CAFile) + if err != nil { + return err + } + + c.CertData, err = dataFromSliceOrFile(c.CertData, c.CertFile) + if err != nil { + return err + } + + c.KeyData, err = dataFromSliceOrFile(c.KeyData, c.KeyFile) + if err != nil { + return err + } + return nil +} + +// dataFromSliceOrFile returns data from the slice (if non-empty), or from the file, +// or an error if an error occurred reading the file +func dataFromSliceOrFile(data []byte, file string) ([]byte, error) { + if len(data) > 0 { + return data, nil + } + if len(file) > 0 { + fileData, err := ioutil.ReadFile(file) + if err != nil { + return []byte{}, err + } + return fileData, nil + } + return nil, nil +} + +func AddUserAgent(config *Config, userAgent string) *Config { + fullUserAgent := DefaultKubernetesUserAgent() + "/" + userAgent + config.UserAgent = fullUserAgent + return config +} diff --git a/pkg/client/restclient/config_test.go b/pkg/client/restclient/config_test.go new file mode 100644 index 0000000000..1a1dd422b4 --- /dev/null +++ b/pkg/client/restclient/config_test.go @@ -0,0 +1,99 @@ +/* +Copyright 2016 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package restclient + +import ( + "strings" + "testing" + + "k8s.io/kubernetes/pkg/api/testapi" +) + +func TestIsConfigTransportTLS(t *testing.T) { + testCases := []struct { + Config *Config + TransportTLS bool + }{ + { + Config: &Config{}, + TransportTLS: false, + }, + { + Config: &Config{ + Host: "https://localhost", + }, + TransportTLS: true, + }, + { + Config: &Config{ + Host: "localhost", + TLSClientConfig: TLSClientConfig{ + CertFile: "foo", + }, + }, + TransportTLS: true, + }, + { + Config: &Config{ + Host: "///:://localhost", + TLSClientConfig: TLSClientConfig{ + CertFile: "foo", + }, + }, + TransportTLS: false, + }, + { + Config: &Config{ + Host: "1.2.3.4:567", + Insecure: true, + }, + TransportTLS: true, + }, + } + for _, testCase := range testCases { + if err := SetKubernetesDefaults(testCase.Config); err != nil { + t.Errorf("setting defaults failed for %#v: %v", testCase.Config, err) + continue + } + useTLS := IsConfigTransportTLS(*testCase.Config) + if testCase.TransportTLS != useTLS { + t.Errorf("expected %v for %#v", testCase.TransportTLS, testCase.Config) + } + } +} + +func TestSetKubernetesDefaultsUserAgent(t *testing.T) { + config := &Config{} + if err := SetKubernetesDefaults(config); err != nil { + t.Errorf("unexpected error: %v", err) + } + if !strings.Contains(config.UserAgent, "kubernetes/") { + t.Errorf("no user agent set: %#v", config) + } +} + +func TestRESTClientRequires(t *testing.T) { + if _, err := RESTClientFor(&Config{Host: "127.0.0.1", ContentConfig: ContentConfig{Codec: testapi.Default.Codec()}}); err == nil { + t.Errorf("unexpected non-error") + } + if _, err := RESTClientFor(&Config{Host: "127.0.0.1", ContentConfig: ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}); err == nil { + t.Errorf("unexpected non-error") + } + if _, err := RESTClientFor(&Config{Host: "127.0.0.1", ContentConfig: ContentConfig{GroupVersion: testapi.Default.GroupVersion(), Codec: testapi.Default.Codec()}}); err != nil { + t.Errorf("unexpected error: %v", err) + } +} diff --git a/pkg/client/unversioned/request.go b/pkg/client/restclient/request.go similarity index 95% rename from pkg/client/unversioned/request.go rename to pkg/client/restclient/request.go index 0167bad97d..07c036e593 100644 --- a/pkg/client/unversioned/request.go +++ b/pkg/client/restclient/request.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package unversioned +package restclient import ( "bytes" @@ -292,22 +292,22 @@ func (r *Request) RequestURI(uri string) *Request { const ( // A constant that clients can use to refer in a field selector to the object name field. // Will be automatically emitted as the correct name for the API version. - NodeUnschedulable = "spec.unschedulable" - ObjectNameField = "metadata.name" - PodHost = "spec.nodeName" - PodStatus = "status.phase" - SecretType = "type" + nodeUnschedulable = "spec.unschedulable" + objectNameField = "metadata.name" + podHost = "spec.nodeName" + podStatus = "status.phase" + secretType = "type" - EventReason = "reason" - EventSource = "source" - EventType = "type" - EventInvolvedKind = "involvedObject.kind" - EventInvolvedNamespace = "involvedObject.namespace" - EventInvolvedName = "involvedObject.name" - EventInvolvedUID = "involvedObject.uid" - EventInvolvedAPIVersion = "involvedObject.apiVersion" - EventInvolvedResourceVersion = "involvedObject.resourceVersion" - EventInvolvedFieldPath = "involvedObject.fieldPath" + eventReason = "reason" + eventSource = "source" + eventType = "type" + eventInvolvedKind = "involvedObject.kind" + eventInvolvedNamespace = "involvedObject.namespace" + eventInvolvedName = "involvedObject.name" + eventInvolvedUID = "involvedObject.uid" + eventInvolvedAPIVersion = "involvedObject.apiVersion" + eventInvolvedResourceVersion = "involvedObject.resourceVersion" + eventInvolvedFieldPath = "involvedObject.fieldPath" ) type clientFieldNameToAPIVersionFieldName map[string]string @@ -350,34 +350,34 @@ func (v versionToResourceToFieldMapping) filterField(groupVersion *unversioned.G var fieldMappings = versionToResourceToFieldMapping{ v1.SchemeGroupVersion: resourceTypeToFieldMapping{ "nodes": clientFieldNameToAPIVersionFieldName{ - ObjectNameField: ObjectNameField, - NodeUnschedulable: NodeUnschedulable, + objectNameField: objectNameField, + nodeUnschedulable: nodeUnschedulable, }, "pods": clientFieldNameToAPIVersionFieldName{ - PodHost: PodHost, - PodStatus: PodStatus, + podHost: podHost, + podStatus: podStatus, }, "secrets": clientFieldNameToAPIVersionFieldName{ - SecretType: SecretType, + secretType: secretType, }, "serviceAccounts": clientFieldNameToAPIVersionFieldName{ - ObjectNameField: ObjectNameField, + objectNameField: objectNameField, }, "endpoints": clientFieldNameToAPIVersionFieldName{ - ObjectNameField: ObjectNameField, + objectNameField: objectNameField, }, "events": clientFieldNameToAPIVersionFieldName{ - ObjectNameField: ObjectNameField, - EventReason: EventReason, - EventSource: EventSource, - EventType: EventType, - EventInvolvedKind: EventInvolvedKind, - EventInvolvedNamespace: EventInvolvedNamespace, - EventInvolvedName: EventInvolvedName, - EventInvolvedUID: EventInvolvedUID, - EventInvolvedAPIVersion: EventInvolvedAPIVersion, - EventInvolvedResourceVersion: EventInvolvedResourceVersion, - EventInvolvedFieldPath: EventInvolvedFieldPath, + objectNameField: objectNameField, + eventReason: eventReason, + eventSource: eventSource, + eventType: eventType, + eventInvolvedKind: eventInvolvedKind, + eventInvolvedNamespace: eventInvolvedNamespace, + eventInvolvedName: eventInvolvedName, + eventInvolvedUID: eventInvolvedUID, + eventInvolvedAPIVersion: eventInvolvedAPIVersion, + eventInvolvedResourceVersion: eventInvolvedResourceVersion, + eventInvolvedFieldPath: eventInvolvedFieldPath, }, }, } diff --git a/pkg/client/unversioned/request_test.go b/pkg/client/restclient/request_test.go similarity index 99% rename from pkg/client/unversioned/request_test.go rename to pkg/client/restclient/request_test.go index 1417d038a7..229c94cf0e 100644 --- a/pkg/client/unversioned/request_test.go +++ b/pkg/client/restclient/request_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package unversioned +package restclient import ( "bytes" @@ -1094,7 +1094,7 @@ func TestAbsPath(t *testing.T) { absPath string wantsAbsPath string }{ - {"", "", "", "/"}, + {"/", "", "", "/"}, {"", "", "/", "/"}, {"", "", "/api", "/api"}, {"", "", "/api/", "/api/"}, @@ -1114,8 +1114,8 @@ func TestAbsPath(t *testing.T) { {"/p1/api/p2", "/r1", "/api/", "/p1/api/p2/api/"}, {"/p1/api/p2", "/api/r1", "/api/", "/p1/api/p2/api/"}, } { - c := NewOrDie(&Config{Host: "http://localhost:123" + tc.configPrefix}) - r := c.Post().Prefix(tc.resourcePrefix).AbsPath(tc.absPath) + u, _ := url.Parse("http://localhost:123" + tc.configPrefix) + r := NewRequest(nil, "POST", u, "", ContentConfig{GroupVersion: &unversioned.GroupVersion{Group: "test"}}, nil, nil).Prefix(tc.resourcePrefix).AbsPath(tc.absPath) if r.pathPrefix != tc.wantsAbsPath { t.Errorf("test case %d failed, unexpected path: %q, expected %q", i, r.pathPrefix, tc.wantsAbsPath) } diff --git a/pkg/client/unversioned/transport.go b/pkg/client/restclient/transport.go similarity index 99% rename from pkg/client/unversioned/transport.go rename to pkg/client/restclient/transport.go index 74469cae0d..7d4b497c30 100644 --- a/pkg/client/unversioned/transport.go +++ b/pkg/client/restclient/transport.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package unversioned +package restclient import ( "crypto/tls" diff --git a/pkg/client/restclient/url_utils.go b/pkg/client/restclient/url_utils.go new file mode 100644 index 0000000000..9a83d78747 --- /dev/null +++ b/pkg/client/restclient/url_utils.go @@ -0,0 +1,93 @@ +/* +Copyright 2016 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package restclient + +import ( + "fmt" + "net/url" + "path" + + "k8s.io/kubernetes/pkg/api/unversioned" +) + +// DefaultServerURL converts a host, host:port, or URL string to the default base server API path +// to use with a Client at a given API version following the standard conventions for a +// Kubernetes API. +func DefaultServerURL(host, apiPath string, groupVersion unversioned.GroupVersion, defaultTLS bool) (*url.URL, string, error) { + if host == "" { + return nil, "", fmt.Errorf("host must be a URL or a host:port pair") + } + base := host + hostURL, err := url.Parse(base) + if err != nil { + return nil, "", err + } + if hostURL.Scheme == "" { + scheme := "http://" + if defaultTLS { + scheme = "https://" + } + hostURL, err = url.Parse(scheme + base) + if err != nil { + return nil, "", err + } + if hostURL.Path != "" && hostURL.Path != "/" { + return nil, "", fmt.Errorf("host must be a URL or a host:port pair: %q", base) + } + } + + // hostURL.Path is optional; a non-empty Path is treated as a prefix that is to be applied to + // all URIs used to access the host. this is useful when there's a proxy in front of the + // apiserver that has relocated the apiserver endpoints, forwarding all requests from, for + // example, /a/b/c to the apiserver. in this case the Path should be /a/b/c. + // + // if running without a frontend proxy (that changes the location of the apiserver), then + // hostURL.Path should be blank. + // + // versionedAPIPath, a path relative to baseURL.Path, points to a versioned API base + versionedAPIPath := path.Join("/", apiPath) + + // Add the version to the end of the path + if len(groupVersion.Group) > 0 { + versionedAPIPath = path.Join(versionedAPIPath, groupVersion.Group, groupVersion.Version) + + } else { + versionedAPIPath = path.Join(versionedAPIPath, groupVersion.Version) + + } + + return hostURL, versionedAPIPath, nil +} + +// defaultServerUrlFor is shared between IsConfigTransportTLS and RESTClientFor. It +// requires Host and Version to be set prior to being called. +func defaultServerUrlFor(config *Config) (*url.URL, string, error) { + // TODO: move the default to secure when the apiserver supports TLS by default + // config.Insecure is taken to mean "I want HTTPS but don't bother checking the certs against a CA." + hasCA := len(config.CAFile) != 0 || len(config.CAData) != 0 + hasCert := len(config.CertFile) != 0 || len(config.CertData) != 0 + defaultTLS := hasCA || hasCert || config.Insecure + host := config.Host + if host == "" { + host = "localhost" + } + + if config.GroupVersion != nil { + return DefaultServerURL(host, config.APIPath, *config.GroupVersion, defaultTLS) + } + return DefaultServerURL(host, config.APIPath, unversioned.GroupVersion{}, defaultTLS) +} diff --git a/pkg/client/restclient/url_utils_test.go b/pkg/client/restclient/url_utils_test.go new file mode 100644 index 0000000000..4bf8c5423d --- /dev/null +++ b/pkg/client/restclient/url_utils_test.go @@ -0,0 +1,61 @@ +/* +Copyright 2016 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package restclient + +import ( + "path" + "testing" + + "k8s.io/kubernetes/pkg/api/testapi" +) + +func TestValidatesHostParameter(t *testing.T) { + testCases := []struct { + Host string + APIPath string + + URL string + Err bool + }{ + {"127.0.0.1", "", "http://127.0.0.1/" + testapi.Default.GroupVersion().Version, false}, + {"127.0.0.1:8080", "", "http://127.0.0.1:8080/" + testapi.Default.GroupVersion().Version, false}, + {"foo.bar.com", "", "http://foo.bar.com/" + testapi.Default.GroupVersion().Version, false}, + {"http://host/prefix", "", "http://host/prefix/" + testapi.Default.GroupVersion().Version, false}, + {"http://host", "", "http://host/" + testapi.Default.GroupVersion().Version, false}, + {"http://host", "/", "http://host/" + testapi.Default.GroupVersion().Version, false}, + {"http://host", "/other", "http://host/other/" + testapi.Default.GroupVersion().Version, false}, + {"host/server", "", "", true}, + } + for i, testCase := range testCases { + u, versionedAPIPath, err := DefaultServerURL(testCase.Host, testCase.APIPath, *testapi.Default.GroupVersion(), false) + switch { + case err == nil && testCase.Err: + t.Errorf("expected error but was nil") + continue + case err != nil && !testCase.Err: + t.Errorf("unexpected error %v", err) + continue + case err != nil: + continue + } + u.Path = path.Join(u.Path, versionedAPIPath) + if e, a := testCase.URL, u.String(); e != a { + t.Errorf("%d: expected host %s, got %s", i, e, a) + continue + } + } +} diff --git a/pkg/client/unversioned/urlbackoff.go b/pkg/client/restclient/urlbackoff.go similarity index 99% rename from pkg/client/unversioned/urlbackoff.go rename to pkg/client/restclient/urlbackoff.go index dbed1bb3c7..7baba5c1f7 100644 --- a/pkg/client/unversioned/urlbackoff.go +++ b/pkg/client/restclient/urlbackoff.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package unversioned +package restclient import ( "net/url" diff --git a/pkg/client/unversioned/urlbackoff_test.go b/pkg/client/restclient/urlbackoff_test.go similarity index 99% rename from pkg/client/unversioned/urlbackoff_test.go rename to pkg/client/restclient/urlbackoff_test.go index 8457c977b5..5c659174dc 100644 --- a/pkg/client/unversioned/urlbackoff_test.go +++ b/pkg/client/restclient/urlbackoff_test.go @@ -14,13 +14,14 @@ See the License for the specific language governing permissions and limitations under the License. */ -package unversioned +package restclient import ( - "k8s.io/kubernetes/pkg/util" "net/url" "testing" "time" + + "k8s.io/kubernetes/pkg/util" ) func parse(raw string) *url.URL { diff --git a/pkg/client/restclient/versions.go b/pkg/client/restclient/versions.go new file mode 100644 index 0000000000..e12c05c10f --- /dev/null +++ b/pkg/client/restclient/versions.go @@ -0,0 +1,88 @@ +/* +Copyright 2014 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package restclient + +import ( + "encoding/json" + "fmt" + "net/http" + "path" + + "k8s.io/kubernetes/pkg/api/unversioned" +) + +const ( + legacyAPIPath = "/api" + defaultAPIPath = "/apis" +) + +// TODO: Is this obsoleted by the discovery client? + +// ServerAPIVersions returns the GroupVersions supported by the API server. +// It creates a RESTClient based on the passed in config, but it doesn't rely +// on the Version and Codec of the config, because it uses AbsPath and +// takes the raw response. +func ServerAPIVersions(c *Config) (groupVersions []string, err error) { + transport, err := TransportFor(c) + if err != nil { + return nil, err + } + client := http.Client{Transport: transport} + + configCopy := *c + configCopy.GroupVersion = nil + configCopy.APIPath = "" + baseURL, _, err := defaultServerUrlFor(&configCopy) + if err != nil { + return nil, err + } + // Get the groupVersions exposed at /api + originalPath := baseURL.Path + baseURL.Path = path.Join(originalPath, legacyAPIPath) + resp, err := client.Get(baseURL.String()) + if err != nil { + return nil, err + } + var v unversioned.APIVersions + defer resp.Body.Close() + err = json.NewDecoder(resp.Body).Decode(&v) + if err != nil { + return nil, fmt.Errorf("unexpected error: %v", err) + } + + groupVersions = append(groupVersions, v.Versions...) + // Get the groupVersions exposed at /apis + baseURL.Path = path.Join(originalPath, defaultAPIPath) + resp2, err := client.Get(baseURL.String()) + if err != nil { + return nil, err + } + var apiGroupList unversioned.APIGroupList + defer resp2.Body.Close() + err = json.NewDecoder(resp2.Body).Decode(&apiGroupList) + if err != nil { + return nil, fmt.Errorf("unexpected error: %v", err) + } + + for _, g := range apiGroupList.Groups { + for _, gv := range g.Versions { + groupVersions = append(groupVersions, gv.GroupVersion) + } + } + + return groupVersions, nil +} diff --git a/pkg/client/testing/core/fake.go b/pkg/client/testing/core/fake.go index 63130aa8a5..148d5961fc 100644 --- a/pkg/client/testing/core/fake.go +++ b/pkg/client/testing/core/fake.go @@ -21,7 +21,7 @@ import ( "sync" "k8s.io/kubernetes/pkg/api/unversioned" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/version" "k8s.io/kubernetes/pkg/watch" @@ -64,7 +64,7 @@ type ProxyReactor interface { // Handles indicates whether or not this Reactor deals with a given action Handles(action Action) bool // React handles a watch action and returns results. It may choose to delegate by indicated handled=false - React(action Action) (handled bool, ret client.ResponseWrapper, err error) + React(action Action) (handled bool, ret restclient.ResponseWrapper, err error) } // ReactionFunc is a function that returns an object or error for a given Action. If "handled" is false, @@ -77,7 +77,7 @@ type WatchReactionFunc func(action Action) (handled bool, ret watch.Interface, e // ProxyReactionFunc is a function that returns a ResponseWrapper interface for a given Action. If "handled" is false, // then the test client will continue ignore the results and continue to the next ProxyReactionFunc -type ProxyReactionFunc func(action Action) (handled bool, ret client.ResponseWrapper, err error) +type ProxyReactionFunc func(action Action) (handled bool, ret restclient.ResponseWrapper, err error) // AddReactor appends a reactor to the end of the chain func (c *Fake) AddReactor(verb, resource string, reaction ReactionFunc) { @@ -155,7 +155,7 @@ func (c *Fake) InvokesWatch(action Action) (watch.Interface, error) { } // InvokesProxy records the provided Action and then invokes the ReactFn (if provided). -func (c *Fake) InvokesProxy(action Action) client.ResponseWrapper { +func (c *Fake) InvokesProxy(action Action) restclient.ResponseWrapper { c.Lock() defer c.Unlock() diff --git a/pkg/client/testing/core/fixture.go b/pkg/client/testing/core/fixture.go index 46a92da759..e2a06a0979 100644 --- a/pkg/client/testing/core/fixture.go +++ b/pkg/client/testing/core/fixture.go @@ -26,7 +26,7 @@ import ( "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/api/unversioned" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/yaml" "k8s.io/kubernetes/pkg/watch" @@ -309,6 +309,6 @@ func (r *SimpleProxyReactor) Handles(action Action) bool { return true } -func (r *SimpleProxyReactor) React(action Action) (bool, client.ResponseWrapper, error) { +func (r *SimpleProxyReactor) React(action Action) (bool, restclient.ResponseWrapper, error) { return r.Reaction(action) } diff --git a/pkg/client/typed/dynamic/client.go b/pkg/client/typed/dynamic/client.go index bd95432cc8..b46c79b683 100644 --- a/pkg/client/typed/dynamic/client.go +++ b/pkg/client/typed/dynamic/client.go @@ -28,7 +28,7 @@ import ( "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/api/v1" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/conversion/queryparams" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/watch" @@ -37,12 +37,12 @@ import ( // Client is a Kubernetes client that allows you to access metadata // and manipulate metadata of a Kubernetes API group. type Client struct { - cl *client.RESTClient + cl *restclient.RESTClient } // NewClient returns a new client based on the passed in config. The // codec is ignored, as the dynamic client uses it's own codec. -func NewClient(conf *client.Config) (*Client, error) { +func NewClient(conf *restclient.Config) (*Client, error) { // avoid changing the original config confCopy := *conf conf = &confCopy @@ -54,7 +54,7 @@ func NewClient(conf *client.Config) (*Client, error) { } if len(conf.UserAgent) == 0 { - conf.UserAgent = client.DefaultKubernetesUserAgent() + conf.UserAgent = restclient.DefaultKubernetesUserAgent() } if conf.QPS == 0.0 { @@ -64,7 +64,7 @@ func NewClient(conf *client.Config) (*Client, error) { conf.Burst = 10 } - cl, err := client.RESTClientFor(conf) + cl, err := restclient.RESTClientFor(conf) if err != nil { return nil, err } @@ -86,7 +86,7 @@ func (c *Client) Resource(resource *unversioned.APIResource, namespace string) * // ResourceClient is an API interface to a specific resource under a // dynamic client. type ResourceClient struct { - cl *client.RESTClient + cl *restclient.RESTClient resource *unversioned.APIResource ns string } @@ -94,7 +94,7 @@ type ResourceClient struct { // namespace applies a namespace to the request if the configured // resource is a namespaced resource. Otherwise, it just returns the // passed in request. -func (rc *ResourceClient) namespace(req *client.Request) *client.Request { +func (rc *ResourceClient) namespace(req *restclient.Request) *restclient.Request { if rc.resource.Namespaced { return req.Namespace(rc.ns) } diff --git a/pkg/client/typed/dynamic/client_test.go b/pkg/client/typed/dynamic/client_test.go index 7632c559a4..1c4965ec44 100644 --- a/pkg/client/typed/dynamic/client_test.go +++ b/pkg/client/typed/dynamic/client_test.go @@ -27,7 +27,7 @@ import ( "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/api/v1" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/watch" watchjson "k8s.io/kubernetes/pkg/watch/json" @@ -62,9 +62,9 @@ func getObject(version, kind, name string) *runtime.Unstructured { func getClientServer(gv *unversioned.GroupVersion, h func(http.ResponseWriter, *http.Request)) (*Client, *httptest.Server, error) { srv := httptest.NewServer(http.HandlerFunc(h)) - cl, err := NewClient(&client.Config{ + cl, err := NewClient(&restclient.Config{ Host: srv.URL, - ContentConfig: client.ContentConfig{GroupVersion: gv}, + ContentConfig: restclient.ContentConfig{GroupVersion: gv}, }) if err != nil { srv.Close() diff --git a/pkg/client/typed/generated/core/unversioned/core_client.go b/pkg/client/typed/generated/core/unversioned/core_client.go index c8119031ee..dc3561c0b4 100644 --- a/pkg/client/typed/generated/core/unversioned/core_client.go +++ b/pkg/client/typed/generated/core/unversioned/core_client.go @@ -19,7 +19,7 @@ package unversioned import ( api "k8s.io/kubernetes/pkg/api" registered "k8s.io/kubernetes/pkg/apimachinery/registered" - unversioned "k8s.io/kubernetes/pkg/client/unversioned" + restclient "k8s.io/kubernetes/pkg/client/restclient" ) type CoreInterface interface { @@ -43,7 +43,7 @@ type CoreInterface interface { // CoreClient is used to interact with features provided by the Core group. type CoreClient struct { - *unversioned.RESTClient + *restclient.RESTClient } func (c *CoreClient) ComponentStatuses() ComponentStatusInterface { @@ -111,12 +111,12 @@ func (c *CoreClient) ServiceAccounts(namespace string) ServiceAccountInterface { } // NewForConfig creates a new CoreClient for the given config. -func NewForConfig(c *unversioned.Config) (*CoreClient, error) { +func NewForConfig(c *restclient.Config) (*CoreClient, error) { config := *c if err := setConfigDefaults(&config); err != nil { return nil, err } - client, err := unversioned.RESTClientFor(&config) + client, err := restclient.RESTClientFor(&config) if err != nil { return nil, err } @@ -125,7 +125,7 @@ func NewForConfig(c *unversioned.Config) (*CoreClient, error) { // NewForConfigOrDie creates a new CoreClient for the given config and // panics if there is an error in the config. -func NewForConfigOrDie(c *unversioned.Config) *CoreClient { +func NewForConfigOrDie(c *restclient.Config) *CoreClient { client, err := NewForConfig(c) if err != nil { panic(err) @@ -134,11 +134,11 @@ func NewForConfigOrDie(c *unversioned.Config) *CoreClient { } // New creates a new CoreClient for the given RESTClient. -func New(c *unversioned.RESTClient) *CoreClient { +func New(c *restclient.RESTClient) *CoreClient { return &CoreClient{c} } -func setConfigDefaults(config *unversioned.Config) error { +func setConfigDefaults(config *restclient.Config) error { // if core group is not registered, return an error g, err := registered.Group("") if err != nil { @@ -146,7 +146,7 @@ func setConfigDefaults(config *unversioned.Config) error { } config.APIPath = "/api" if config.UserAgent == "" { - config.UserAgent = unversioned.DefaultKubernetesUserAgent() + config.UserAgent = restclient.DefaultKubernetesUserAgent() } // TODO: Unconditionally set the config.Version, until we fix the config. //if config.Version == "" { diff --git a/pkg/client/typed/generated/core/unversioned/fake/fake_pod_expansion.go b/pkg/client/typed/generated/core/unversioned/fake/fake_pod_expansion.go index 034ecf2b2d..53fe932212 100644 --- a/pkg/client/typed/generated/core/unversioned/fake/fake_pod_expansion.go +++ b/pkg/client/typed/generated/core/unversioned/fake/fake_pod_expansion.go @@ -18,8 +18,8 @@ package fake import ( "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/testing/core" - client "k8s.io/kubernetes/pkg/client/unversioned" ) func (c *FakePods) Bind(binding *api.Binding) error { @@ -33,7 +33,7 @@ func (c *FakePods) Bind(binding *api.Binding) error { return err } -func (c *FakePods) GetLogs(name string, opts *api.PodLogOptions) *client.Request { +func (c *FakePods) GetLogs(name string, opts *api.PodLogOptions) *restclient.Request { action := core.GenericActionImpl{} action.Verb = "get" action.Namespace = c.ns @@ -42,5 +42,5 @@ func (c *FakePods) GetLogs(name string, opts *api.PodLogOptions) *client.Request action.Value = opts _, _ = c.Fake.Invokes(action, &api.Pod{}) - return &client.Request{} + return &restclient.Request{} } diff --git a/pkg/client/typed/generated/core/unversioned/fake/fake_service_expansion.go b/pkg/client/typed/generated/core/unversioned/fake/fake_service_expansion.go index 7d72d1dfe9..18f1b7803d 100644 --- a/pkg/client/typed/generated/core/unversioned/fake/fake_service_expansion.go +++ b/pkg/client/typed/generated/core/unversioned/fake/fake_service_expansion.go @@ -17,10 +17,10 @@ limitations under the License. package fake import ( + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/testing/core" - client "k8s.io/kubernetes/pkg/client/unversioned" ) -func (c *FakeServices) ProxyGet(scheme, name, port, path string, params map[string]string) client.ResponseWrapper { +func (c *FakeServices) ProxyGet(scheme, name, port, path string, params map[string]string) restclient.ResponseWrapper { return c.Fake.InvokesProxy(core.NewProxyGetAction("services", c.ns, scheme, name, port, path, params)) } diff --git a/pkg/client/typed/generated/core/unversioned/pod_expansion.go b/pkg/client/typed/generated/core/unversioned/pod_expansion.go index 0a46431d58..8ebd29d308 100644 --- a/pkg/client/typed/generated/core/unversioned/pod_expansion.go +++ b/pkg/client/typed/generated/core/unversioned/pod_expansion.go @@ -18,13 +18,13 @@ package unversioned import ( "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" ) // The PodExpansion interface allows manually adding extra methods to the PodInterface. type PodExpansion interface { Bind(binding *api.Binding) error - GetLogs(name string, opts *api.PodLogOptions) *unversioned.Request + GetLogs(name string, opts *api.PodLogOptions) *restclient.Request } // Bind applies the provided binding to the named pod in the current namespace (binding.Namespace is ignored). @@ -33,6 +33,6 @@ func (c *pods) Bind(binding *api.Binding) error { } // Get constructs a request for getting the logs for a pod -func (c *pods) GetLogs(name string, opts *api.PodLogOptions) *unversioned.Request { +func (c *pods) GetLogs(name string, opts *api.PodLogOptions) *restclient.Request { return c.client.Get().Namespace(c.ns).Name(name).Resource("pods").SubResource("log").VersionedParams(opts, api.ParameterCodec) } diff --git a/pkg/client/typed/generated/core/unversioned/service_expansion.go b/pkg/client/typed/generated/core/unversioned/service_expansion.go index b9fb6af862..89266e6cd8 100644 --- a/pkg/client/typed/generated/core/unversioned/service_expansion.go +++ b/pkg/client/typed/generated/core/unversioned/service_expansion.go @@ -17,17 +17,17 @@ limitations under the License. package unversioned import ( - "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/util/net" ) // The ServiceExpansion interface allows manually adding extra methods to the ServiceInterface. type ServiceExpansion interface { - ProxyGet(scheme, name, port, path string, params map[string]string) unversioned.ResponseWrapper + ProxyGet(scheme, name, port, path string, params map[string]string) restclient.ResponseWrapper } // ProxyGet returns a response of the service by calling it through the proxy. -func (c *services) ProxyGet(scheme, name, port, path string, params map[string]string) unversioned.ResponseWrapper { +func (c *services) ProxyGet(scheme, name, port, path string, params map[string]string) restclient.ResponseWrapper { request := c.client.Get(). Prefix("proxy"). Namespace(c.ns). diff --git a/pkg/client/typed/generated/core/v1/core_client.go b/pkg/client/typed/generated/core/v1/core_client.go index fad285b211..886d556b5d 100644 --- a/pkg/client/typed/generated/core/v1/core_client.go +++ b/pkg/client/typed/generated/core/v1/core_client.go @@ -19,7 +19,7 @@ package v1 import ( api "k8s.io/kubernetes/pkg/api" registered "k8s.io/kubernetes/pkg/apimachinery/registered" - unversioned "k8s.io/kubernetes/pkg/client/unversioned" + restclient "k8s.io/kubernetes/pkg/client/restclient" ) type CoreInterface interface { @@ -42,7 +42,7 @@ type CoreInterface interface { // CoreClient is used to interact with features provided by the Core group. type CoreClient struct { - *unversioned.RESTClient + *restclient.RESTClient } func (c *CoreClient) ComponentStatuses() ComponentStatusInterface { @@ -106,12 +106,12 @@ func (c *CoreClient) ServiceAccounts(namespace string) ServiceAccountInterface { } // NewForConfig creates a new CoreClient for the given config. -func NewForConfig(c *unversioned.Config) (*CoreClient, error) { +func NewForConfig(c *restclient.Config) (*CoreClient, error) { config := *c if err := setConfigDefaults(&config); err != nil { return nil, err } - client, err := unversioned.RESTClientFor(&config) + client, err := restclient.RESTClientFor(&config) if err != nil { return nil, err } @@ -120,7 +120,7 @@ func NewForConfig(c *unversioned.Config) (*CoreClient, error) { // NewForConfigOrDie creates a new CoreClient for the given config and // panics if there is an error in the config. -func NewForConfigOrDie(c *unversioned.Config) *CoreClient { +func NewForConfigOrDie(c *restclient.Config) *CoreClient { client, err := NewForConfig(c) if err != nil { panic(err) @@ -129,11 +129,11 @@ func NewForConfigOrDie(c *unversioned.Config) *CoreClient { } // New creates a new CoreClient for the given RESTClient. -func New(c *unversioned.RESTClient) *CoreClient { +func New(c *restclient.RESTClient) *CoreClient { return &CoreClient{c} } -func setConfigDefaults(config *unversioned.Config) error { +func setConfigDefaults(config *restclient.Config) error { // if core group is not registered, return an error g, err := registered.Group("") if err != nil { @@ -141,7 +141,7 @@ func setConfigDefaults(config *unversioned.Config) error { } config.APIPath = "/api" if config.UserAgent == "" { - config.UserAgent = unversioned.DefaultKubernetesUserAgent() + config.UserAgent = restclient.DefaultKubernetesUserAgent() } // TODO: Unconditionally set the config.Version, until we fix the config. //if config.Version == "" { diff --git a/pkg/client/typed/generated/core/v1/fake/fake_pod_expansion.go b/pkg/client/typed/generated/core/v1/fake/fake_pod_expansion.go index 9995972e1c..c4ad84c6c0 100644 --- a/pkg/client/typed/generated/core/v1/fake/fake_pod_expansion.go +++ b/pkg/client/typed/generated/core/v1/fake/fake_pod_expansion.go @@ -18,8 +18,8 @@ package fake import ( "k8s.io/kubernetes/pkg/api/v1" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/testing/core" - client "k8s.io/kubernetes/pkg/client/unversioned" ) func (c *FakePods) Bind(binding *v1.Binding) error { @@ -33,7 +33,7 @@ func (c *FakePods) Bind(binding *v1.Binding) error { return err } -func (c *FakePods) GetLogs(name string, opts *v1.PodLogOptions) *client.Request { +func (c *FakePods) GetLogs(name string, opts *v1.PodLogOptions) *restclient.Request { action := core.GenericActionImpl{} action.Verb = "get" action.Namespace = c.ns @@ -42,5 +42,5 @@ func (c *FakePods) GetLogs(name string, opts *v1.PodLogOptions) *client.Request action.Value = opts _, _ = c.Fake.Invokes(action, &v1.Pod{}) - return &client.Request{} + return &restclient.Request{} } diff --git a/pkg/client/typed/generated/core/v1/fake/fake_service_expansion.go b/pkg/client/typed/generated/core/v1/fake/fake_service_expansion.go index 7d72d1dfe9..18f1b7803d 100644 --- a/pkg/client/typed/generated/core/v1/fake/fake_service_expansion.go +++ b/pkg/client/typed/generated/core/v1/fake/fake_service_expansion.go @@ -17,10 +17,10 @@ limitations under the License. package fake import ( + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/testing/core" - client "k8s.io/kubernetes/pkg/client/unversioned" ) -func (c *FakeServices) ProxyGet(scheme, name, port, path string, params map[string]string) client.ResponseWrapper { +func (c *FakeServices) ProxyGet(scheme, name, port, path string, params map[string]string) restclient.ResponseWrapper { return c.Fake.InvokesProxy(core.NewProxyGetAction("services", c.ns, scheme, name, port, path, params)) } diff --git a/pkg/client/typed/generated/core/v1/pod_expansion.go b/pkg/client/typed/generated/core/v1/pod_expansion.go index 3d41ae7dcf..f061b5d923 100644 --- a/pkg/client/typed/generated/core/v1/pod_expansion.go +++ b/pkg/client/typed/generated/core/v1/pod_expansion.go @@ -19,13 +19,13 @@ package v1 import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" - unversioned "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" ) // The PodExpansion interface allows manually adding extra methods to the PodInterface. type PodExpansion interface { Bind(binding *v1.Binding) error - GetLogs(name string, opts *v1.PodLogOptions) *unversioned.Request + GetLogs(name string, opts *v1.PodLogOptions) *restclient.Request } // Bind applies the provided binding to the named pod in the current namespace (binding.Namespace is ignored). @@ -34,6 +34,6 @@ func (c *pods) Bind(binding *v1.Binding) error { } // Get constructs a request for getting the logs for a pod -func (c *pods) GetLogs(name string, opts *v1.PodLogOptions) *unversioned.Request { +func (c *pods) GetLogs(name string, opts *v1.PodLogOptions) *restclient.Request { return c.client.Get().Namespace(c.ns).Name(name).Resource("pods").SubResource("log").VersionedParams(opts, api.ParameterCodec) } diff --git a/pkg/client/typed/generated/core/v1/service_expansion.go b/pkg/client/typed/generated/core/v1/service_expansion.go index 7ffba019c7..b4300483b8 100644 --- a/pkg/client/typed/generated/core/v1/service_expansion.go +++ b/pkg/client/typed/generated/core/v1/service_expansion.go @@ -17,17 +17,17 @@ limitations under the License. package v1 import ( - "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/util/net" ) // The ServiceExpansion interface allows manually adding extra methods to the ServiceInterface. type ServiceExpansion interface { - ProxyGet(scheme, name, port, path string, params map[string]string) unversioned.ResponseWrapper + ProxyGet(scheme, name, port, path string, params map[string]string) restclient.ResponseWrapper } // ProxyGet returns a response of the service by calling it through the proxy. -func (c *services) ProxyGet(scheme, name, port, path string, params map[string]string) unversioned.ResponseWrapper { +func (c *services) ProxyGet(scheme, name, port, path string, params map[string]string) restclient.ResponseWrapper { request := c.client.Get(). Prefix("proxy"). Namespace(c.ns). diff --git a/pkg/client/typed/generated/extensions/unversioned/extensions_client.go b/pkg/client/typed/generated/extensions/unversioned/extensions_client.go index 6780a5c03d..220dd69b5c 100644 --- a/pkg/client/typed/generated/extensions/unversioned/extensions_client.go +++ b/pkg/client/typed/generated/extensions/unversioned/extensions_client.go @@ -19,7 +19,7 @@ package unversioned import ( api "k8s.io/kubernetes/pkg/api" registered "k8s.io/kubernetes/pkg/apimachinery/registered" - unversioned "k8s.io/kubernetes/pkg/client/unversioned" + restclient "k8s.io/kubernetes/pkg/client/restclient" ) type ExtensionsInterface interface { @@ -35,7 +35,7 @@ type ExtensionsInterface interface { // ExtensionsClient is used to interact with features provided by the Extensions group. type ExtensionsClient struct { - *unversioned.RESTClient + *restclient.RESTClient } func (c *ExtensionsClient) DaemonSets(namespace string) DaemonSetInterface { @@ -71,12 +71,12 @@ func (c *ExtensionsClient) ThirdPartyResources(namespace string) ThirdPartyResou } // NewForConfig creates a new ExtensionsClient for the given config. -func NewForConfig(c *unversioned.Config) (*ExtensionsClient, error) { +func NewForConfig(c *restclient.Config) (*ExtensionsClient, error) { config := *c if err := setConfigDefaults(&config); err != nil { return nil, err } - client, err := unversioned.RESTClientFor(&config) + client, err := restclient.RESTClientFor(&config) if err != nil { return nil, err } @@ -85,7 +85,7 @@ func NewForConfig(c *unversioned.Config) (*ExtensionsClient, error) { // NewForConfigOrDie creates a new ExtensionsClient for the given config and // panics if there is an error in the config. -func NewForConfigOrDie(c *unversioned.Config) *ExtensionsClient { +func NewForConfigOrDie(c *restclient.Config) *ExtensionsClient { client, err := NewForConfig(c) if err != nil { panic(err) @@ -94,11 +94,11 @@ func NewForConfigOrDie(c *unversioned.Config) *ExtensionsClient { } // New creates a new ExtensionsClient for the given RESTClient. -func New(c *unversioned.RESTClient) *ExtensionsClient { +func New(c *restclient.RESTClient) *ExtensionsClient { return &ExtensionsClient{c} } -func setConfigDefaults(config *unversioned.Config) error { +func setConfigDefaults(config *restclient.Config) error { // if extensions group is not registered, return an error g, err := registered.Group("extensions") if err != nil { @@ -106,7 +106,7 @@ func setConfigDefaults(config *unversioned.Config) error { } config.APIPath = "/apis" if config.UserAgent == "" { - config.UserAgent = unversioned.DefaultKubernetesUserAgent() + config.UserAgent = restclient.DefaultKubernetesUserAgent() } // TODO: Unconditionally set the config.Version, until we fix the config. //if config.Version == "" { diff --git a/pkg/client/typed/generated/extensions/v1beta1/extensions_client.go b/pkg/client/typed/generated/extensions/v1beta1/extensions_client.go index 310a8c0798..af3348a335 100644 --- a/pkg/client/typed/generated/extensions/v1beta1/extensions_client.go +++ b/pkg/client/typed/generated/extensions/v1beta1/extensions_client.go @@ -19,7 +19,7 @@ package v1beta1 import ( api "k8s.io/kubernetes/pkg/api" registered "k8s.io/kubernetes/pkg/apimachinery/registered" - unversioned "k8s.io/kubernetes/pkg/client/unversioned" + restclient "k8s.io/kubernetes/pkg/client/restclient" ) type ExtensionsInterface interface { @@ -35,7 +35,7 @@ type ExtensionsInterface interface { // ExtensionsClient is used to interact with features provided by the Extensions group. type ExtensionsClient struct { - *unversioned.RESTClient + *restclient.RESTClient } func (c *ExtensionsClient) DaemonSets(namespace string) DaemonSetInterface { @@ -71,12 +71,12 @@ func (c *ExtensionsClient) ThirdPartyResources(namespace string) ThirdPartyResou } // NewForConfig creates a new ExtensionsClient for the given config. -func NewForConfig(c *unversioned.Config) (*ExtensionsClient, error) { +func NewForConfig(c *restclient.Config) (*ExtensionsClient, error) { config := *c if err := setConfigDefaults(&config); err != nil { return nil, err } - client, err := unversioned.RESTClientFor(&config) + client, err := restclient.RESTClientFor(&config) if err != nil { return nil, err } @@ -85,7 +85,7 @@ func NewForConfig(c *unversioned.Config) (*ExtensionsClient, error) { // NewForConfigOrDie creates a new ExtensionsClient for the given config and // panics if there is an error in the config. -func NewForConfigOrDie(c *unversioned.Config) *ExtensionsClient { +func NewForConfigOrDie(c *restclient.Config) *ExtensionsClient { client, err := NewForConfig(c) if err != nil { panic(err) @@ -94,11 +94,11 @@ func NewForConfigOrDie(c *unversioned.Config) *ExtensionsClient { } // New creates a new ExtensionsClient for the given RESTClient. -func New(c *unversioned.RESTClient) *ExtensionsClient { +func New(c *restclient.RESTClient) *ExtensionsClient { return &ExtensionsClient{c} } -func setConfigDefaults(config *unversioned.Config) error { +func setConfigDefaults(config *restclient.Config) error { // if extensions group is not registered, return an error g, err := registered.Group("extensions") if err != nil { @@ -106,7 +106,7 @@ func setConfigDefaults(config *unversioned.Config) error { } config.APIPath = "/apis" if config.UserAgent == "" { - config.UserAgent = unversioned.DefaultKubernetesUserAgent() + config.UserAgent = restclient.DefaultKubernetesUserAgent() } // TODO: Unconditionally set the config.Version, until we fix the config. //if config.Version == "" { diff --git a/pkg/client/unversioned/auth/clientauth.go b/pkg/client/unversioned/auth/clientauth.go index 16acc00ce7..64b3ef6bec 100644 --- a/pkg/client/unversioned/auth/clientauth.go +++ b/pkg/client/unversioned/auth/clientauth.go @@ -68,7 +68,7 @@ import ( "io/ioutil" "os" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" ) // Info holds Kubernetes API authorization config. It is intended @@ -104,8 +104,8 @@ func LoadFromFile(path string) (*Info, error) { // MergeWithConfig returns a copy of a client.Config with values from the Info. // The fields of client.Config with a corresponding field in the Info are set // with the value from the Info. -func (info Info) MergeWithConfig(c client.Config) (client.Config, error) { - var config client.Config = c +func (info Info) MergeWithConfig(c restclient.Config) (restclient.Config, error) { + var config restclient.Config = c config.Username = info.User config.Password = info.Password config.CAFile = info.CAFile diff --git a/pkg/client/unversioned/autoscaling.go b/pkg/client/unversioned/autoscaling.go index 9445c0c6c9..c3ec198103 100644 --- a/pkg/client/unversioned/autoscaling.go +++ b/pkg/client/unversioned/autoscaling.go @@ -20,6 +20,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apimachinery/registered" "k8s.io/kubernetes/pkg/apis/autoscaling" + "k8s.io/kubernetes/pkg/client/restclient" ) type AutoscalingInterface interface { @@ -28,26 +29,26 @@ type AutoscalingInterface interface { // AutoscalingClient is used to interact with Kubernetes autoscaling features. type AutoscalingClient struct { - *RESTClient + *restclient.RESTClient } func (c *AutoscalingClient) HorizontalPodAutoscalers(namespace string) HorizontalPodAutoscalerInterface { return newHorizontalPodAutoscalersV1(c, namespace) } -func NewAutoscaling(c *Config) (*AutoscalingClient, error) { +func NewAutoscaling(c *restclient.Config) (*AutoscalingClient, error) { config := *c if err := setAutoscalingDefaults(&config); err != nil { return nil, err } - client, err := RESTClientFor(&config) + client, err := restclient.RESTClientFor(&config) if err != nil { return nil, err } return &AutoscalingClient{client}, nil } -func NewAutoscalingOrDie(c *Config) *AutoscalingClient { +func NewAutoscalingOrDie(c *restclient.Config) *AutoscalingClient { client, err := NewAutoscaling(c) if err != nil { panic(err) @@ -55,7 +56,7 @@ func NewAutoscalingOrDie(c *Config) *AutoscalingClient { return client } -func setAutoscalingDefaults(config *Config) error { +func setAutoscalingDefaults(config *restclient.Config) error { // if autoscaling group is not registered, return an error g, err := registered.Group(autoscaling.GroupName) if err != nil { @@ -63,7 +64,7 @@ func setAutoscalingDefaults(config *Config) error { } config.APIPath = defaultAPIPath if config.UserAgent == "" { - config.UserAgent = DefaultKubernetesUserAgent() + config.UserAgent = restclient.DefaultKubernetesUserAgent() } // TODO: Unconditionally set the config.Version, until we fix the config. //if config.Version == "" { diff --git a/pkg/client/unversioned/batch.go b/pkg/client/unversioned/batch.go index d25678c066..a432e4c789 100644 --- a/pkg/client/unversioned/batch.go +++ b/pkg/client/unversioned/batch.go @@ -20,6 +20,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apimachinery/registered" "k8s.io/kubernetes/pkg/apis/batch" + "k8s.io/kubernetes/pkg/client/restclient" ) type BatchInterface interface { @@ -28,26 +29,26 @@ type BatchInterface interface { // BatchClient is used to interact with Kubernetes batch features. type BatchClient struct { - *RESTClient + *restclient.RESTClient } func (c *BatchClient) Jobs(namespace string) JobInterface { return newJobsV1(c, namespace) } -func NewBatch(c *Config) (*BatchClient, error) { +func NewBatch(c *restclient.Config) (*BatchClient, error) { config := *c if err := setBatchDefaults(&config); err != nil { return nil, err } - client, err := RESTClientFor(&config) + client, err := restclient.RESTClientFor(&config) if err != nil { return nil, err } return &BatchClient{client}, nil } -func NewBatchOrDie(c *Config) *BatchClient { +func NewBatchOrDie(c *restclient.Config) *BatchClient { client, err := NewBatch(c) if err != nil { panic(err) @@ -55,7 +56,7 @@ func NewBatchOrDie(c *Config) *BatchClient { return client } -func setBatchDefaults(config *Config) error { +func setBatchDefaults(config *restclient.Config) error { // if batch group is not registered, return an error g, err := registered.Group(batch.GroupName) if err != nil { @@ -63,7 +64,7 @@ func setBatchDefaults(config *Config) error { } config.APIPath = defaultAPIPath if config.UserAgent == "" { - config.UserAgent = DefaultKubernetesUserAgent() + config.UserAgent = restclient.DefaultKubernetesUserAgent() } // TODO: Unconditionally set the config.Version, until we fix the config. //if config.Version == "" { diff --git a/pkg/client/unversioned/client.go b/pkg/client/unversioned/client.go index d4a9692a5e..114f660365 100644 --- a/pkg/client/unversioned/client.go +++ b/pkg/client/unversioned/client.go @@ -20,6 +20,8 @@ import ( "net" "net/url" "strings" + + "k8s.io/kubernetes/pkg/client/restclient" ) // Interface holds the methods for clients of Kubernetes, @@ -112,7 +114,7 @@ func (c *Client) ConfigMaps(namespace string) ConfigMapsInterface { // Client is the implementation of a Kubernetes client. type Client struct { - *RESTClient + *restclient.RESTClient *AutoscalingClient *BatchClient *ExtensionsClient diff --git a/pkg/client/unversioned/client_test.go b/pkg/client/unversioned/client_test.go index 487591c5da..d984917c8f 100644 --- a/pkg/client/unversioned/client_test.go +++ b/pkg/client/unversioned/client_test.go @@ -27,6 +27,7 @@ import ( "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/api/v1" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/version" ) @@ -48,7 +49,7 @@ func TestGetServerVersion(t *testing.T) { })) // TODO: Uncomment when fix #19254 // defer server.Close() - client := NewOrDie(&Config{Host: server.URL}) + client := NewOrDie(&restclient.Config{Host: server.URL}) got, err := client.Discovery().ServerVersion() if err != nil { @@ -84,7 +85,7 @@ func TestGetServerGroupsWithV1Server(t *testing.T) { })) // TODO: Uncomment when fix #19254 // defer server.Close() - client := NewOrDie(&Config{Host: server.URL}) + client := NewOrDie(&restclient.Config{Host: server.URL}) // ServerGroups should not return an error even if server returns error at /api and /apis apiGroupList, err := client.Discovery().ServerGroups() if err != nil { @@ -121,7 +122,7 @@ func TestGetServerResourcesWithV1Server(t *testing.T) { })) // TODO: Uncomment when fix #19254 // defer server.Close() - client := NewOrDie(&Config{Host: server.URL}) + client := NewOrDie(&restclient.Config{Host: server.URL}) // ServerResources should not return an error even if server returns error at /api/v1. resourceMap, err := client.Discovery().ServerResources() if err != nil { @@ -214,7 +215,7 @@ func TestGetServerResources(t *testing.T) { })) // TODO: Uncomment when fix #19254 // defer server.Close() - client := NewOrDie(&Config{Host: server.URL}) + client := NewOrDie(&restclient.Config{Host: server.URL}) for _, test := range tests { got, err := client.Discovery().ServerResourcesForGroupVersion(test.request) if test.expectErr { @@ -277,7 +278,7 @@ func TestGetSwaggerSchema(t *testing.T) { // TODO: Uncomment when fix #19254 // defer server.Close() - client := NewOrDie(&Config{Host: server.URL}) + client := NewOrDie(&restclient.Config{Host: server.URL}) got, err := client.Discovery().SwaggerSchema(v1.SchemeGroupVersion) if err != nil { t.Fatalf("unexpected encoding error: %v", err) @@ -297,7 +298,7 @@ func TestGetSwaggerSchemaFail(t *testing.T) { // TODO: Uncomment when fix #19254 // defer server.Close() - client := NewOrDie(&Config{Host: server.URL}) + client := NewOrDie(&restclient.Config{Host: server.URL}) got, err := client.Discovery().SwaggerSchema(unversioned.GroupVersion{Group: "api.group", Version: "v4"}) if got != nil { t.Fatalf("unexpected response: %v", got) diff --git a/pkg/client/unversioned/clientcmd/client_config.go b/pkg/client/unversioned/clientcmd/client_config.go index 107e2ab9af..60a25b9cd4 100644 --- a/pkg/client/unversioned/clientcmd/client_config.go +++ b/pkg/client/unversioned/clientcmd/client_config.go @@ -29,7 +29,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/unversioned" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" clientauth "k8s.io/kubernetes/pkg/client/unversioned/auth" clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api" ) @@ -50,7 +50,7 @@ type ClientConfig interface { // RawConfig returns the merged result of all overrides RawConfig() (clientcmdapi.Config, error) // ClientConfig returns a complete client config - ClientConfig() (*client.Config, error) + ClientConfig() (*restclient.Config, error) // Namespace returns the namespace resulting from the merged // result of all overrides and a boolean indicating if it was // overridden @@ -85,7 +85,7 @@ func (config *DirectClientConfig) RawConfig() (clientcmdapi.Config, error) { } // ClientConfig implements ClientConfig -func (config *DirectClientConfig) ClientConfig() (*client.Config, error) { +func (config *DirectClientConfig) ClientConfig() (*restclient.Config, error) { if err := config.ConfirmUsable(); err != nil { return nil, err } @@ -93,7 +93,7 @@ func (config *DirectClientConfig) ClientConfig() (*client.Config, error) { configAuthInfo := config.getAuthInfo() configClusterInfo := config.getCluster() - clientConfig := &client.Config{} + clientConfig := &restclient.Config{} clientConfig.Host = configClusterInfo.Server if u, err := url.ParseRequestURI(clientConfig.Host); err == nil && u.Opaque == "" && len(u.Path) > 1 { u.RawQuery = "" @@ -109,7 +109,7 @@ func (config *DirectClientConfig) ClientConfig() (*client.Config, error) { } // only try to read the auth information if we are secure - if client.IsConfigTransportTLS(*clientConfig) { + if restclient.IsConfigTransportTLS(*clientConfig) { var err error // mergo is a first write wins for map value and a last writing wins for interface values @@ -137,11 +137,11 @@ func (config *DirectClientConfig) ClientConfig() (*client.Config, error) { // 1. configClusterInfo (the final result of command line flags and merged .kubeconfig files) // 2. configAuthInfo.auth-path (this file can contain information that conflicts with #1, and we want #1 to win the priority) // 3. load the ~/.kubernetes_auth file as a default -func getServerIdentificationPartialConfig(configAuthInfo clientcmdapi.AuthInfo, configClusterInfo clientcmdapi.Cluster) (*client.Config, error) { - mergedConfig := &client.Config{} +func getServerIdentificationPartialConfig(configAuthInfo clientcmdapi.AuthInfo, configClusterInfo clientcmdapi.Cluster) (*restclient.Config, error) { + mergedConfig := &restclient.Config{} // configClusterInfo holds the information identify the server provided by .kubeconfig - configClientConfig := &client.Config{} + configClientConfig := &restclient.Config{} configClientConfig.CAFile = configClusterInfo.CertificateAuthority configClientConfig.CAData = configClusterInfo.CertificateAuthorityData configClientConfig.Insecure = configClusterInfo.InsecureSkipTLSVerify @@ -157,8 +157,8 @@ func getServerIdentificationPartialConfig(configAuthInfo clientcmdapi.AuthInfo, // 2. configAuthInfo.auth-path (this file can contain information that conflicts with #1, and we want #1 to win the priority) // 3. if there is not enough information to idenfity the user, load try the ~/.kubernetes_auth file // 4. if there is not enough information to identify the user, prompt if possible -func getUserIdentificationPartialConfig(configAuthInfo clientcmdapi.AuthInfo, fallbackReader io.Reader) (*client.Config, error) { - mergedConfig := &client.Config{} +func getUserIdentificationPartialConfig(configAuthInfo clientcmdapi.AuthInfo, fallbackReader io.Reader) (*restclient.Config, error) { + mergedConfig := &restclient.Config{} // blindly overwrite existing values based on precedence if len(configAuthInfo.Token) > 0 { @@ -182,7 +182,7 @@ func getUserIdentificationPartialConfig(configAuthInfo clientcmdapi.AuthInfo, fa promptedConfig := makeUserIdentificationConfig(*promptedAuthInfo) previouslyMergedConfig := mergedConfig - mergedConfig = &client.Config{} + mergedConfig = &restclient.Config{} mergo.Merge(mergedConfig, promptedConfig) mergo.Merge(mergedConfig, previouslyMergedConfig) } @@ -191,8 +191,8 @@ func getUserIdentificationPartialConfig(configAuthInfo clientcmdapi.AuthInfo, fa } // makeUserIdentificationFieldsConfig returns a client.Config capable of being merged using mergo for only user identification information -func makeUserIdentificationConfig(info clientauth.Info) *client.Config { - config := &client.Config{} +func makeUserIdentificationConfig(info clientauth.Info) *restclient.Config { + config := &restclient.Config{} config.Username = info.User config.Password = info.Password config.CertFile = info.CertFile @@ -202,8 +202,8 @@ func makeUserIdentificationConfig(info clientauth.Info) *client.Config { } // makeUserIdentificationFieldsConfig returns a client.Config capable of being merged using mergo for only server identification information -func makeServerIdentificationConfig(info clientauth.Info) client.Config { - config := client.Config{} +func makeServerIdentificationConfig(info clientauth.Info) restclient.Config { + config := restclient.Config{} config.CAFile = info.CAFile if info.Insecure != nil { config.Insecure = *info.Insecure @@ -211,7 +211,7 @@ func makeServerIdentificationConfig(info clientauth.Info) client.Config { return config } -func canIdentifyUser(config client.Config) bool { +func canIdentifyUser(config restclient.Config) bool { return len(config.Username) > 0 || (len(config.CertFile) > 0 || len(config.CertData) > 0) || len(config.BearerToken) > 0 @@ -324,8 +324,8 @@ func (inClusterClientConfig) RawConfig() (clientcmdapi.Config, error) { return clientcmdapi.Config{}, fmt.Errorf("inCluster environment config doesn't support multiple clusters") } -func (inClusterClientConfig) ClientConfig() (*client.Config, error) { - return client.InClusterConfig() +func (inClusterClientConfig) ClientConfig() (*restclient.Config, error) { + return restclient.InClusterConfig() } func (inClusterClientConfig) Namespace() (string, error) { @@ -358,10 +358,10 @@ func (inClusterClientConfig) Possible() bool { // components. Warnings should reflect this usage. If neither masterUrl or kubeconfigPath // are passed in we fallback to inClusterConfig. If inClusterConfig fails, we fallback // to the default config. -func BuildConfigFromFlags(masterUrl, kubeconfigPath string) (*client.Config, error) { +func BuildConfigFromFlags(masterUrl, kubeconfigPath string) (*restclient.Config, error) { if kubeconfigPath == "" && masterUrl == "" { glog.Warningf("Neither --kubeconfig nor --master was specified. Using the inClusterConfig. This might not work.") - kubeconfig, err := client.InClusterConfig() + kubeconfig, err := restclient.InClusterConfig() if err == nil { return kubeconfig, nil } diff --git a/pkg/client/unversioned/clientcmd/client_config_test.go b/pkg/client/unversioned/clientcmd/client_config_test.go index 555c4240fc..bc01c5f309 100644 --- a/pkg/client/unversioned/clientcmd/client_config_test.go +++ b/pkg/client/unversioned/clientcmd/client_config_test.go @@ -22,7 +22,7 @@ import ( "github.com/imdario/mergo" "k8s.io/kubernetes/pkg/api/testapi" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api" ) @@ -244,7 +244,7 @@ func TestCreateMissingContext(t *testing.T) { t.Errorf("Unexpected error: %v", err) } - expectedConfig := &client.Config{Host: clientConfig.Host} + expectedConfig := &restclient.Config{Host: clientConfig.Host} if !reflect.DeepEqual(expectedConfig, clientConfig) { t.Errorf("Expected %#v, got %#v", expectedConfig, clientConfig) diff --git a/pkg/client/unversioned/clientcmd/merged_client_builder.go b/pkg/client/unversioned/clientcmd/merged_client_builder.go index 8fee4b9ece..321eae9e87 100644 --- a/pkg/client/unversioned/clientcmd/merged_client_builder.go +++ b/pkg/client/unversioned/clientcmd/merged_client_builder.go @@ -23,7 +23,7 @@ import ( "github.com/golang/glog" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api" ) @@ -86,7 +86,7 @@ func (config *DeferredLoadingClientConfig) RawConfig() (clientcmdapi.Config, err } // ClientConfig implements ClientConfig -func (config *DeferredLoadingClientConfig) ClientConfig() (*client.Config, error) { +func (config *DeferredLoadingClientConfig) ClientConfig() (*restclient.Config, error) { mergedClientConfig, err := config.createClientConfig() if err != nil { return nil, err diff --git a/pkg/client/unversioned/deployment_test.go b/pkg/client/unversioned/deployment_test.go index 2480c3a252..c530411a75 100644 --- a/pkg/client/unversioned/deployment_test.go +++ b/pkg/client/unversioned/deployment_test.go @@ -16,11 +16,6 @@ limitations under the License. package unversioned_test -import ( - . "k8s.io/kubernetes/pkg/client/unversioned" - "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" -) - import ( "net/http" "net/url" @@ -30,6 +25,7 @@ import ( "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apis/extensions" + "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" "k8s.io/kubernetes/pkg/labels" ) diff --git a/pkg/client/unversioned/discovery_client.go b/pkg/client/unversioned/discovery_client.go index f43d728fbd..9de8b55474 100644 --- a/pkg/client/unversioned/discovery_client.go +++ b/pkg/client/unversioned/discovery_client.go @@ -27,6 +27,7 @@ import ( "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/api/v1" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/version" ) @@ -70,7 +71,7 @@ type SwaggerSchemaInterface interface { // DiscoveryClient implements the functions that discover server-supported API groups, // versions and resources. type DiscoveryClient struct { - *RESTClient + *restclient.RESTClient } // Convert unversioned.APIVersions to unversioned.APIGroup. APIVersions is used by legacy v1, so @@ -207,7 +208,7 @@ func (d *DiscoveryClient) SwaggerSchema(version unversioned.GroupVersion) (*swag return &schema, nil } -func setDiscoveryDefaults(config *Config) error { +func setDiscoveryDefaults(config *restclient.Config) error { config.APIPath = "" config.GroupVersion = nil config.Codec = runtime.NoopEncoder{api.Codecs.UniversalDecoder()} @@ -216,18 +217,18 @@ func setDiscoveryDefaults(config *Config) error { // NewDiscoveryClientForConfig creates a new DiscoveryClient for the given config. This client // can be used to discover supported resources in the API server. -func NewDiscoveryClientForConfig(c *Config) (*DiscoveryClient, error) { +func NewDiscoveryClientForConfig(c *restclient.Config) (*DiscoveryClient, error) { config := *c if err := setDiscoveryDefaults(&config); err != nil { return nil, err } - client, err := UnversionedRESTClientFor(&config) + client, err := restclient.UnversionedRESTClientFor(&config) return &DiscoveryClient{client}, err } // NewDiscoveryClientForConfig creates a new DiscoveryClient for the given config. If // there is an error, it panics. -func NewDiscoveryClientForConfigOrDie(c *Config) *DiscoveryClient { +func NewDiscoveryClientForConfigOrDie(c *restclient.Config) *DiscoveryClient { client, err := NewDiscoveryClientForConfig(c) if err != nil { panic(err) @@ -237,6 +238,6 @@ func NewDiscoveryClientForConfigOrDie(c *Config) *DiscoveryClient { } // New creates a new DiscoveryClient for the given RESTClient. -func NewDiscoveryClient(c *RESTClient) *DiscoveryClient { +func NewDiscoveryClient(c *restclient.RESTClient) *DiscoveryClient { return &DiscoveryClient{c} } diff --git a/pkg/client/unversioned/endpoints_test.go b/pkg/client/unversioned/endpoints_test.go index ef17015855..59bc869b87 100644 --- a/pkg/client/unversioned/endpoints_test.go +++ b/pkg/client/unversioned/endpoints_test.go @@ -16,16 +16,12 @@ limitations under the License. package unversioned_test -import ( - . "k8s.io/kubernetes/pkg/client/unversioned" - "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" -) - import ( "testing" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" + "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" ) func TestListEndpoints(t *testing.T) { diff --git a/pkg/client/unversioned/extensions.go b/pkg/client/unversioned/extensions.go index a95bd1b892..5db86dbb83 100644 --- a/pkg/client/unversioned/extensions.go +++ b/pkg/client/unversioned/extensions.go @@ -20,6 +20,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apimachinery/registered" "k8s.io/kubernetes/pkg/apis/extensions" + "k8s.io/kubernetes/pkg/client/restclient" ) // Interface holds the experimental methods for clients of Kubernetes @@ -42,7 +43,7 @@ type ExtensionsInterface interface { // Features of Extensions group are not supported and may be changed or removed in // incompatible ways at any time. type ExtensionsClient struct { - *RESTClient + *restclient.RESTClient } func (c *ExtensionsClient) PodSecurityPolicies() PodSecurityPolicyInterface { @@ -85,12 +86,12 @@ func (c *ExtensionsClient) ReplicaSets(namespace string) ReplicaSetInterface { // provides access to experimental Kubernetes features. // Features of Extensions group are not supported and may be changed or removed in // incompatible ways at any time. -func NewExtensions(c *Config) (*ExtensionsClient, error) { +func NewExtensions(c *restclient.Config) (*ExtensionsClient, error) { config := *c if err := setExtensionsDefaults(&config); err != nil { return nil, err } - client, err := RESTClientFor(&config) + client, err := restclient.RESTClientFor(&config) if err != nil { return nil, err } @@ -101,7 +102,7 @@ func NewExtensions(c *Config) (*ExtensionsClient, error) { // panics if there is an error in the config. // Features of Extensions group are not supported and may be changed or removed in // incompatible ways at any time. -func NewExtensionsOrDie(c *Config) *ExtensionsClient { +func NewExtensionsOrDie(c *restclient.Config) *ExtensionsClient { client, err := NewExtensions(c) if err != nil { panic(err) @@ -109,7 +110,7 @@ func NewExtensionsOrDie(c *Config) *ExtensionsClient { return client } -func setExtensionsDefaults(config *Config) error { +func setExtensionsDefaults(config *restclient.Config) error { // if experimental group is not registered, return an error g, err := registered.Group(extensions.GroupName) if err != nil { @@ -117,7 +118,7 @@ func setExtensionsDefaults(config *Config) error { } config.APIPath = defaultAPIPath if config.UserAgent == "" { - config.UserAgent = DefaultKubernetesUserAgent() + config.UserAgent = restclient.DefaultKubernetesUserAgent() } // TODO: Unconditionally set the config.Version, until we fix the config. //if config.Version == "" { diff --git a/pkg/client/unversioned/fake/fake.go b/pkg/client/unversioned/fake/fake.go index 3a314708fa..09f1f02745 100644 --- a/pkg/client/unversioned/fake/fake.go +++ b/pkg/client/unversioned/fake/fake.go @@ -24,7 +24,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" - "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/runtime" ) @@ -49,28 +49,28 @@ type RESTClient struct { Err error } -func (c *RESTClient) Get() *unversioned.Request { +func (c *RESTClient) Get() *restclient.Request { return c.request("GET") } -func (c *RESTClient) Put() *unversioned.Request { +func (c *RESTClient) Put() *restclient.Request { return c.request("PUT") } -func (c *RESTClient) Patch(_ api.PatchType) *unversioned.Request { +func (c *RESTClient) Patch(_ api.PatchType) *restclient.Request { return c.request("PATCH") } -func (c *RESTClient) Post() *unversioned.Request { +func (c *RESTClient) Post() *restclient.Request { return c.request("POST") } -func (c *RESTClient) Delete() *unversioned.Request { +func (c *RESTClient) Delete() *restclient.Request { return c.request("DELETE") } -func (c *RESTClient) request(verb string) *unversioned.Request { - return unversioned.NewRequest(c, verb, &url.URL{Host: "localhost"}, "", unversioned.ContentConfig{GroupVersion: testapi.Default.GroupVersion(), Codec: c.Codec}, nil, nil) +func (c *RESTClient) request(verb string) *restclient.Request { + return restclient.NewRequest(c, verb, &url.URL{Host: "localhost"}, "", restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion(), Codec: c.Codec}, nil, nil) } func (c *RESTClient) Do(req *http.Request) (*http.Response, error) { diff --git a/pkg/client/unversioned/helper.go b/pkg/client/unversioned/helper.go index 069de64890..70ff9023eb 100644 --- a/pkg/client/unversioned/helper.go +++ b/pkg/client/unversioned/helper.go @@ -17,27 +17,16 @@ limitations under the License. package unversioned import ( - "encoding/json" "fmt" - "io/ioutil" - "net" - "net/http" - "net/url" - "os" - "path" "reflect" - gruntime "runtime" - "strings" - "github.com/golang/glog" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apimachinery/registered" "k8s.io/kubernetes/pkg/apis/autoscaling" "k8s.io/kubernetes/pkg/apis/batch" "k8s.io/kubernetes/pkg/apis/extensions" - "k8s.io/kubernetes/pkg/runtime" - "k8s.io/kubernetes/pkg/util" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/util/sets" "k8s.io/kubernetes/pkg/version" ) @@ -47,106 +36,16 @@ const ( defaultAPIPath = "/apis" ) -// Config holds the common attributes that can be passed to a Kubernetes client on -// initialization. -type Config struct { - // Host must be a host string, a host:port pair, or a URL to the base of the apiserver. - // If a URL is given then the (optional) Path of that URL represents a prefix that must - // be appended to all request URIs used to access the apiserver. This allows a frontend - // proxy to easily relocate all of the apiserver endpoints. - Host string - // APIPath is a sub-path that points to an API root. - APIPath string - // Prefix is the sub path of the server. If not specified, the client will set - // a default value. Use "/" to indicate the server root should be used - Prefix string - - // ContentConfig contains settings that affect how objects are transformed when - // sent to the server. - ContentConfig - - // Server requires Basic authentication - Username string - Password string - - // Server requires Bearer authentication. This client will not attempt to use - // refresh tokens for an OAuth2 flow. - // TODO: demonstrate an OAuth2 compatible client. - BearerToken string - - // TLSClientConfig contains settings to enable transport layer security - TLSClientConfig - - // Server should be accessed without verifying the TLS - // certificate. For testing only. - Insecure bool - - // UserAgent is an optional field that specifies the caller of this request. - UserAgent string - - // Transport may be used for custom HTTP behavior. This attribute may not - // be specified with the TLS client certificate options. Use WrapTransport - // for most client level operations. - Transport http.RoundTripper - // WrapTransport will be invoked for custom HTTP behavior after the underlying - // transport is initialized (either the transport created from TLSClientConfig, - // Transport, or http.DefaultTransport). The config may layer other RoundTrippers - // on top of the returned RoundTripper. - WrapTransport func(rt http.RoundTripper) http.RoundTripper - - // QPS indicates the maximum QPS to the master from this client. If zero, QPS is unlimited. - QPS float32 - - // Maximum burst for throttle - Burst int -} - -// TLSClientConfig contains settings to enable transport layer security -type TLSClientConfig struct { - // Server requires TLS client certificate authentication - CertFile string - // Server requires TLS client certificate authentication - KeyFile string - // Trusted root certificates for server - CAFile string - - // CertData holds PEM-encoded bytes (typically read from a client certificate file). - // CertData takes precedence over CertFile - CertData []byte - // KeyData holds PEM-encoded bytes (typically read from a client certificate key file). - // KeyData takes precedence over KeyFile - KeyData []byte - // CAData holds PEM-encoded bytes (typically read from a root certificates bundle). - // CAData takes precedence over CAFile - CAData []byte -} - -type ContentConfig struct { - // ContentType specifies the wire format used to communicate with the server. - // This value will be set as the Accept header on requests made to the server, and - // as the default content type on any object sent to the server. If not set, - // "application/json" is used. - ContentType string - // GroupVersion is the API version to talk to. Must be provided when initializing - // a RESTClient directly. When initializing a Client, will be set with the default - // code version. - GroupVersion *unversioned.GroupVersion - // Codec specifies the encoding and decoding behavior for runtime.Objects passed - // to a RESTClient or Client. Required when initializing a RESTClient, optional - // when initializing a Client. - Codec runtime.Codec -} - // New creates a Kubernetes client for the given config. This client works with pods, // replication controllers, daemons, and services. It allows operations such as list, get, update // and delete on these objects. An error is returned if the provided configuration // is not valid. -func New(c *Config) (*Client, error) { +func New(c *restclient.Config) (*Client, error) { config := *c if err := SetKubernetesDefaults(&config); err != nil { return nil, err } - client, err := RESTClientFor(&config) + client, err := restclient.RESTClientFor(&config) if err != nil { return nil, err } @@ -190,7 +89,7 @@ func New(c *Config) (*Client, error) { // MatchesServerVersion queries the server to compares the build version // (git hash) of the client with the server's build version. It returns an error // if it failed to contact the server or if the versions are not an exact match. -func MatchesServerVersion(client *Client, c *Config) error { +func MatchesServerVersion(client *Client, c *restclient.Config) error { var err error if client == nil { client, err = New(c) @@ -220,56 +119,6 @@ func ExtractGroupVersions(l *unversioned.APIGroupList) []string { return groupVersions } -// ServerAPIVersions returns the GroupVersions supported by the API server. -// It creates a RESTClient based on the passed in config, but it doesn't rely -// on the Version and Codec of the config, because it uses AbsPath and -// takes the raw response. -func ServerAPIVersions(c *Config) (groupVersions []string, err error) { - transport, err := TransportFor(c) - if err != nil { - return nil, err - } - client := http.Client{Transport: transport} - - configCopy := *c - configCopy.GroupVersion = nil - configCopy.APIPath = "" - baseURL, _, err := defaultServerUrlFor(&configCopy) - if err != nil { - return nil, err - } - // Get the groupVersions exposed at /api - originalPath := baseURL.Path - baseURL.Path = path.Join(originalPath, legacyAPIPath) - resp, err := client.Get(baseURL.String()) - if err != nil { - return nil, err - } - var v unversioned.APIVersions - defer resp.Body.Close() - err = json.NewDecoder(resp.Body).Decode(&v) - if err != nil { - return nil, fmt.Errorf("unexpected error: %v", err) - } - - groupVersions = append(groupVersions, v.Versions...) - // Get the groupVersions exposed at /apis - baseURL.Path = path.Join(originalPath, defaultAPIPath) - resp2, err := client.Get(baseURL.String()) - if err != nil { - return nil, err - } - var apiGroupList unversioned.APIGroupList - defer resp2.Body.Close() - err = json.NewDecoder(resp2.Body).Decode(&apiGroupList) - if err != nil { - return nil, fmt.Errorf("unexpected error: %v", err) - } - groupVersions = append(groupVersions, ExtractGroupVersions(&apiGroupList)...) - - return groupVersions, nil -} - // NegotiateVersion queries the server's supported api versions to find // a version that both client and server support. // - If no version is provided, try registered client versions in order of @@ -279,7 +128,7 @@ func ServerAPIVersions(c *Config) (groupVersions []string, err error) { // stderr and try client's registered versions in order of preference. // - If version is config default, and the server does not support it, // return an error. -func NegotiateVersion(client *Client, c *Config, requestedGV *unversioned.GroupVersion, clientRegisteredGVs []unversioned.GroupVersion) (*unversioned.GroupVersion, error) { +func NegotiateVersion(client *Client, c *restclient.Config, requestedGV *unversioned.GroupVersion, clientRegisteredGVs []unversioned.GroupVersion) (*unversioned.GroupVersion, error) { var err error if client == nil { client, err = New(c) @@ -349,7 +198,7 @@ func NegotiateVersion(client *Client, c *Config, requestedGV *unversioned.GroupV } // NewOrDie creates a Kubernetes client and panics if the provided API version is not recognized. -func NewOrDie(c *Config) *Client { +func NewOrDie(c *restclient.Config) *Client { client, err := New(c) if err != nil { panic(err) @@ -357,39 +206,9 @@ func NewOrDie(c *Config) *Client { return client } -// InClusterConfig returns a config object which uses the service account -// kubernetes gives to pods. It's intended for clients that expect to be -// running inside a pod running on kuberenetes. It will return an error if -// called from a process not running in a kubernetes environment. -func InClusterConfig() (*Config, error) { - host, port := os.Getenv("KUBERNETES_SERVICE_HOST"), os.Getenv("KUBERNETES_SERVICE_PORT") - if len(host) == 0 || len(port) == 0 { - return nil, fmt.Errorf("unable to load in-cluster configuration, KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT must be defined") - } - - token, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/" + api.ServiceAccountTokenKey) - if err != nil { - return nil, err - } - tlsClientConfig := TLSClientConfig{} - rootCAFile := "/var/run/secrets/kubernetes.io/serviceaccount/" + api.ServiceAccountRootCAKey - if _, err := util.CertPoolFromFile(rootCAFile); err != nil { - glog.Errorf("Expected to load root CA config from %s, but got err: %v", rootCAFile, err) - } else { - tlsClientConfig.CAFile = rootCAFile - } - - return &Config{ - // TODO: switch to using cluster DNS. - Host: "https://" + net.JoinHostPort(host, port), - BearerToken: string(token), - TLSClientConfig: tlsClientConfig, - }, nil -} - // NewInCluster is a shortcut for calling InClusterConfig() and then New(). func NewInCluster() (*Client, error) { - cc, err := InClusterConfig() + cc, err := restclient.InClusterConfig() if err != nil { return nil, err } @@ -399,13 +218,10 @@ func NewInCluster() (*Client, error) { // SetKubernetesDefaults sets default values on the provided client config for accessing the // Kubernetes API or returns an error if any of the defaults are impossible or invalid. // TODO: this method needs to be split into one that sets defaults per group, expected to be fix in PR "Refactoring clientcache.go and helper.go #14592" -func SetKubernetesDefaults(config *Config) error { +func SetKubernetesDefaults(config *restclient.Config) error { if config.APIPath == "" { config.APIPath = legacyAPIPath } - if len(config.UserAgent) == 0 { - config.UserAgent = DefaultKubernetesUserAgent() - } g, err := registered.Group(api.GroupName) if err != nil { return err @@ -416,233 +232,6 @@ func SetKubernetesDefaults(config *Config) error { if config.Codec == nil { config.Codec = api.Codecs.LegacyCodec(*config.GroupVersion) } - if config.QPS == 0.0 { - config.QPS = 5.0 - } - if config.Burst == 0 { - config.Burst = 10 - } - return nil -} - -// RESTClientFor returns a RESTClient that satisfies the requested attributes on a client Config -// object. Note that a RESTClient may require fields that are optional when initializing a Client. -// A RESTClient created by this method is generic - it expects to operate on an API that follows -// the Kubernetes conventions, but may not be the Kubernetes API. -func RESTClientFor(config *Config) (*RESTClient, error) { - if config.GroupVersion == nil { - return nil, fmt.Errorf("GroupVersion is required when initializing a RESTClient") - } - if config.Codec == nil { - return nil, fmt.Errorf("Codec is required when initializing a RESTClient") - } - - baseURL, versionedAPIPath, err := defaultServerUrlFor(config) - if err != nil { - return nil, err - } - - transport, err := TransportFor(config) - if err != nil { - return nil, err - } - - var httpClient *http.Client - if transport != http.DefaultTransport { - httpClient = &http.Client{Transport: transport} - } - - client := NewRESTClient(baseURL, versionedAPIPath, config.ContentConfig, config.QPS, config.Burst, httpClient) - - return client, nil -} - -// UnversionedRESTClientFor is the same as RESTClientFor, except that it allows -// the config.Version to be empty. -func UnversionedRESTClientFor(config *Config) (*RESTClient, error) { - if config.Codec == nil { - return nil, fmt.Errorf("Codec is required when initializing a RESTClient") - } - - baseURL, versionedAPIPath, err := defaultServerUrlFor(config) - if err != nil { - return nil, err - } - - transport, err := TransportFor(config) - if err != nil { - return nil, err - } - - var httpClient *http.Client - if transport != http.DefaultTransport { - httpClient = &http.Client{Transport: transport} - } - - versionConfig := config.ContentConfig - if versionConfig.GroupVersion == nil { - v := unversioned.SchemeGroupVersion - versionConfig.GroupVersion = &v - } - - client := NewRESTClient(baseURL, versionedAPIPath, versionConfig, config.QPS, config.Burst, httpClient) - return client, nil -} - -// DefaultServerURL converts a host, host:port, or URL string to the default base server API path -// to use with a Client at a given API version following the standard conventions for a -// Kubernetes API. -func DefaultServerURL(host, apiPath string, groupVersion unversioned.GroupVersion, defaultTLS bool) (*url.URL, string, error) { - if host == "" { - return nil, "", fmt.Errorf("host must be a URL or a host:port pair") - } - base := host - hostURL, err := url.Parse(base) - if err != nil { - return nil, "", err - } - if hostURL.Scheme == "" { - scheme := "http://" - if defaultTLS { - scheme = "https://" - } - hostURL, err = url.Parse(scheme + base) - if err != nil { - return nil, "", err - } - if hostURL.Path != "" && hostURL.Path != "/" { - return nil, "", fmt.Errorf("host must be a URL or a host:port pair: %q", base) - } - } - - // hostURL.Path is optional; a non-empty Path is treated as a prefix that is to be applied to - // all URIs used to access the host. this is useful when there's a proxy in front of the - // apiserver that has relocated the apiserver endpoints, forwarding all requests from, for - // example, /a/b/c to the apiserver. in this case the Path should be /a/b/c. - // - // if running without a frontend proxy (that changes the location of the apiserver), then - // hostURL.Path should be blank. - // - // versionedAPIPath, a path relative to baseURL.Path, points to a versioned API base - versionedAPIPath := path.Join("/", apiPath) - - // Add the version to the end of the path - if len(groupVersion.Group) > 0 { - versionedAPIPath = path.Join(versionedAPIPath, groupVersion.Group, groupVersion.Version) - - } else { - versionedAPIPath = path.Join(versionedAPIPath, groupVersion.Version) - - } - - return hostURL, versionedAPIPath, nil -} - -// IsConfigTransportTLS returns true if and only if the provided config will result in a protected -// connection to the server when it is passed to client.New() or client.RESTClientFor(). -// Use to determine when to send credentials over the wire. -// -// Note: the Insecure flag is ignored when testing for this value, so MITM attacks are -// still possible. -func IsConfigTransportTLS(config Config) bool { - // determination of TLS transport does not logically require a version to be specified - // modify the copy of the config we got to satisfy preconditions for defaultServerUrlFor - config.GroupVersion = defaultVersionFor(&config) - - baseURL, _, err := defaultServerUrlFor(&config) - if err != nil { - return false - } - return baseURL.Scheme == "https" -} - -// defaultServerUrlFor is shared between IsConfigTransportTLS and RESTClientFor. It -// requires Host and Version to be set prior to being called. -func defaultServerUrlFor(config *Config) (*url.URL, string, error) { - // TODO: move the default to secure when the apiserver supports TLS by default - // config.Insecure is taken to mean "I want HTTPS but don't bother checking the certs against a CA." - hasCA := len(config.CAFile) != 0 || len(config.CAData) != 0 - hasCert := len(config.CertFile) != 0 || len(config.CertData) != 0 - defaultTLS := hasCA || hasCert || config.Insecure - host := config.Host - if host == "" { - host = "localhost" - } - - if config.GroupVersion != nil { - return DefaultServerURL(host, config.APIPath, *config.GroupVersion, defaultTLS) - } - return DefaultServerURL(host, config.APIPath, unversioned.GroupVersion{}, defaultTLS) -} - -// defaultVersionFor is shared between IsConfigTransportTLS and RESTClientFor -func defaultVersionFor(config *Config) *unversioned.GroupVersion { - if config.GroupVersion == nil { - // Clients default to the preferred code API version - // TODO: implement version negotiation (highest version supported by server) - // TODO this drops out when groupmeta is refactored - copyGroupVersion := registered.GroupOrDie(api.GroupName).GroupVersion - return ©GroupVersion - } - - return config.GroupVersion -} - -// DefaultKubernetesUserAgent returns the default user agent that clients can use. -func DefaultKubernetesUserAgent() string { - commit := version.Get().GitCommit - if len(commit) > 7 { - commit = commit[:7] - } - if len(commit) == 0 { - commit = "unknown" - } - version := version.Get().GitVersion - seg := strings.SplitN(version, "-", 2) - version = seg[0] - return fmt.Sprintf("%s/%s (%s/%s) kubernetes/%s", path.Base(os.Args[0]), version, gruntime.GOOS, gruntime.GOARCH, commit) -} - -// LoadTLSFiles copies the data from the CertFile, KeyFile, and CAFile fields into the CertData, -// KeyData, and CAFile fields, or returns an error. If no error is returned, all three fields are -// either populated or were empty to start. -func LoadTLSFiles(c *Config) error { - var err error - c.CAData, err = dataFromSliceOrFile(c.CAData, c.CAFile) - if err != nil { - return err - } - - c.CertData, err = dataFromSliceOrFile(c.CertData, c.CertFile) - if err != nil { - return err - } - - c.KeyData, err = dataFromSliceOrFile(c.KeyData, c.KeyFile) - if err != nil { - return err - } - return nil -} - -// dataFromSliceOrFile returns data from the slice (if non-empty), or from the file, -// or an error if an error occurred reading the file -func dataFromSliceOrFile(data []byte, file string) ([]byte, error) { - if len(data) > 0 { - return data, nil - } - if len(file) > 0 { - fileData, err := ioutil.ReadFile(file) - if err != nil { - return []byte{}, err - } - return fileData, nil - } - return nil, nil -} - -func AddUserAgent(config *Config, userAgent string) *Config { - fullUserAgent := DefaultKubernetesUserAgent() + "/" + userAgent - config.UserAgent = fullUserAgent - return config + + return restclient.SetKubernetesDefaults(config) } diff --git a/pkg/client/unversioned/helper_blackbox_test.go b/pkg/client/unversioned/helper_blackbox_test.go index 5d497d5034..c4860a12f8 100644 --- a/pkg/client/unversioned/helper_blackbox_test.go +++ b/pkg/client/unversioned/helper_blackbox_test.go @@ -28,7 +28,7 @@ import ( "k8s.io/kubernetes/pkg/api/testapi" uapi "k8s.io/kubernetes/pkg/api/unversioned" - unversionedapi "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/client/unversioned/fake" ) @@ -48,14 +48,14 @@ func TestNegotiateVersion(t *testing.T) { expectedVersion *uapi.GroupVersion serverVersions []string clientVersions []uapi.GroupVersion - config *unversioned.Config + config *restclient.Config expectErr func(err error) bool sendErr error }{ { name: "server supports client default", version: &uapi.GroupVersion{Version: "version1"}, - config: &unversioned.Config{}, + config: &restclient.Config{}, serverVersions: []string{"version1", testapi.Default.GroupVersion().String()}, clientVersions: []uapi.GroupVersion{{Version: "version1"}, *testapi.Default.GroupVersion()}, expectedVersion: &uapi.GroupVersion{Version: "version1"}, @@ -63,28 +63,28 @@ func TestNegotiateVersion(t *testing.T) { { name: "server falls back to client supported", version: testapi.Default.GroupVersion(), - config: &unversioned.Config{}, + config: &restclient.Config{}, serverVersions: []string{"version1"}, clientVersions: []uapi.GroupVersion{{Version: "version1"}, *testapi.Default.GroupVersion()}, expectedVersion: &uapi.GroupVersion{Version: "version1"}, }, { name: "explicit version supported", - config: &unversioned.Config{ContentConfig: unversioned.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}, + config: &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}, serverVersions: []string{"/version1", testapi.Default.GroupVersion().String()}, clientVersions: []uapi.GroupVersion{{Version: "version1"}, *testapi.Default.GroupVersion()}, expectedVersion: testapi.Default.GroupVersion(), }, { name: "explicit version not supported", - config: &unversioned.Config{ContentConfig: unversioned.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}, + config: &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}, serverVersions: []string{"version1"}, clientVersions: []uapi.GroupVersion{{Version: "version1"}, *testapi.Default.GroupVersion()}, expectErr: func(err error) bool { return strings.Contains(err.Error(), `server does not support API version "v1"`) }, }, { name: "connection refused error", - config: &unversioned.Config{ContentConfig: unversioned.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}, + config: &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}, serverVersions: []string{"version1"}, clientVersions: []uapi.GroupVersion{{Version: "version1"}, *testapi.Default.GroupVersion()}, sendErr: errors.New("connection refused"), @@ -98,13 +98,13 @@ func TestNegotiateVersion(t *testing.T) { Codec: codec, Resp: &http.Response{ StatusCode: 200, - Body: objBody(&unversionedapi.APIVersions{Versions: test.serverVersions}), + Body: objBody(&uapi.APIVersions{Versions: test.serverVersions}), }, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { if test.sendErr != nil { return nil, test.sendErr } - return &http.Response{StatusCode: 200, Body: objBody(&unversionedapi.APIVersions{Versions: test.serverVersions})}, nil + return &http.Response{StatusCode: 200, Body: objBody(&uapi.APIVersions{Versions: test.serverVersions})}, nil }), } c := unversioned.NewOrDie(test.config) diff --git a/pkg/client/unversioned/helper_test.go b/pkg/client/unversioned/helper_test.go index 2d565afc21..b4d9a76444 100644 --- a/pkg/client/unversioned/helper_test.go +++ b/pkg/client/unversioned/helper_test.go @@ -20,80 +20,26 @@ import ( "encoding/json" "net/http" "net/http/httptest" - "path" "reflect" - "strings" "testing" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/runtime" ) -func TestIsConfigTransportTLS(t *testing.T) { - testCases := []struct { - Config *Config - TransportTLS bool - }{ - { - Config: &Config{}, - TransportTLS: false, - }, - { - Config: &Config{ - Host: "https://localhost", - }, - TransportTLS: true, - }, - { - Config: &Config{ - Host: "localhost", - TLSClientConfig: TLSClientConfig{ - CertFile: "foo", - }, - }, - TransportTLS: true, - }, - { - Config: &Config{ - Host: "///:://localhost", - TLSClientConfig: TLSClientConfig{ - CertFile: "foo", - }, - }, - TransportTLS: false, - }, - { - Config: &Config{ - Host: "1.2.3.4:567", - Insecure: true, - }, - TransportTLS: true, - }, - } - for _, testCase := range testCases { - if err := SetKubernetesDefaults(testCase.Config); err != nil { - t.Errorf("setting defaults failed for %#v: %v", testCase.Config, err) - continue - } - useTLS := IsConfigTransportTLS(*testCase.Config) - if testCase.TransportTLS != useTLS { - t.Errorf("expected %v for %#v", testCase.TransportTLS, testCase.Config) - } - } -} - func TestSetKubernetesDefaults(t *testing.T) { testCases := []struct { - Config Config - After Config + Config restclient.Config + After restclient.Config Err bool }{ { - Config{}, - Config{ + restclient.Config{}, + restclient.Config{ APIPath: "/api", - ContentConfig: ContentConfig{ + ContentConfig: restclient.ContentConfig{ GroupVersion: testapi.Default.GroupVersion(), Codec: testapi.Default.Codec(), }, @@ -104,10 +50,10 @@ func TestSetKubernetesDefaults(t *testing.T) { }, // Add this test back when we fixed config and SetKubernetesDefaults // { - // Config{ + // restclient.Config{ // GroupVersion: &unversioned.GroupVersion{Group: "not.a.group", Version: "not_an_api"}, // }, - // Config{}, + // restclient.Config{}, // true, // }, } @@ -131,16 +77,6 @@ func TestSetKubernetesDefaults(t *testing.T) { } } -func TestSetKubernetesDefaultsUserAgent(t *testing.T) { - config := &Config{} - if err := SetKubernetesDefaults(config); err != nil { - t.Errorf("unexpected error: %v", err) - } - if !strings.Contains(config.UserAgent, "kubernetes/") { - t.Errorf("no user agent set: %#v", config) - } -} - func TestHelperGetServerAPIVersions(t *testing.T) { expect := []string{"v1", "v2", "v3"} APIVersions := unversioned.APIVersions{Versions: expect} @@ -190,7 +126,7 @@ func TestHelperGetServerAPIVersions(t *testing.T) { })) // TODO: Uncomment when fix #19254 // defer server.Close() - got, err := ServerAPIVersions(&Config{Host: server.URL, ContentConfig: ContentConfig{GroupVersion: &unversioned.GroupVersion{Group: "invalid version", Version: "one"}, Codec: testapi.Default.Codec()}}) + got, err := restclient.ServerAPIVersions(&restclient.Config{Host: server.URL, ContentConfig: restclient.ContentConfig{GroupVersion: &unversioned.GroupVersion{Group: "invalid version", Version: "one"}, Codec: testapi.Default.Codec()}}) if err != nil { t.Fatalf("unexpected encoding error: %v", err) } @@ -210,7 +146,19 @@ func TestSetsCodec(t *testing.T) { // "invalidVersion": {true, "", nil}, } for version, expected := range testCases { - client, err := New(&Config{Host: "127.0.0.1", ContentConfig: ContentConfig{GroupVersion: &unversioned.GroupVersion{Version: version}}}) + conf := &restclient.Config{ + Host: "127.0.0.1", + ContentConfig: restclient.ContentConfig{ + GroupVersion: &unversioned.GroupVersion{Version: version}, + }, + } + + var versionedPath string + err := SetKubernetesDefaults(conf) + if err == nil { + _, versionedPath, err = restclient.DefaultServerURL(conf.Host, conf.APIPath, *conf.GroupVersion, false) + } + switch { case err == nil && expected.Err: t.Errorf("expected error but was nil") @@ -221,60 +169,11 @@ func TestSetsCodec(t *testing.T) { case err != nil: continue } - if e, a := expected.Prefix, client.RESTClient.versionedAPIPath; e != a { + if e, a := expected.Prefix, versionedPath; e != a { t.Errorf("expected %#v, got %#v", e, a) } - if e, a := expected.Codec, client.RESTClient.contentConfig.Codec; !reflect.DeepEqual(e, a) { + if e, a := expected.Codec, conf.Codec; !reflect.DeepEqual(e, a) { t.Errorf("expected %#v, got %#v", e, a) } } } - -func TestRESTClientRequires(t *testing.T) { - if _, err := RESTClientFor(&Config{Host: "127.0.0.1", ContentConfig: ContentConfig{Codec: testapi.Default.Codec()}}); err == nil { - t.Errorf("unexpected non-error") - } - if _, err := RESTClientFor(&Config{Host: "127.0.0.1", ContentConfig: ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}); err == nil { - t.Errorf("unexpected non-error") - } - if _, err := RESTClientFor(&Config{Host: "127.0.0.1", ContentConfig: ContentConfig{GroupVersion: testapi.Default.GroupVersion(), Codec: testapi.Default.Codec()}}); err != nil { - t.Errorf("unexpected error: %v", err) - } -} - -func TestValidatesHostParameter(t *testing.T) { - testCases := []struct { - Host string - APIPath string - - URL string - Err bool - }{ - {"127.0.0.1", "", "http://127.0.0.1/" + testapi.Default.GroupVersion().Version, false}, - {"127.0.0.1:8080", "", "http://127.0.0.1:8080/" + testapi.Default.GroupVersion().Version, false}, - {"foo.bar.com", "", "http://foo.bar.com/" + testapi.Default.GroupVersion().Version, false}, - {"http://host/prefix", "", "http://host/prefix/" + testapi.Default.GroupVersion().Version, false}, - {"http://host", "", "http://host/" + testapi.Default.GroupVersion().Version, false}, - {"http://host", "/", "http://host/" + testapi.Default.GroupVersion().Version, false}, - {"http://host", "/other", "http://host/other/" + testapi.Default.GroupVersion().Version, false}, - {"host/server", "", "", true}, - } - for i, testCase := range testCases { - u, versionedAPIPath, err := DefaultServerURL(testCase.Host, testCase.APIPath, *testapi.Default.GroupVersion(), false) - switch { - case err == nil && testCase.Err: - t.Errorf("expected error but was nil") - continue - case err != nil && !testCase.Err: - t.Errorf("unexpected error %v", err) - continue - case err != nil: - continue - } - u.Path = path.Join(u.Path, versionedAPIPath) - if e, a := testCase.URL, u.String(); e != a { - t.Errorf("%d: expected host %s, got %s", i, e, a) - continue - } - } -} diff --git a/pkg/client/unversioned/horizontalpodautoscaler_test.go b/pkg/client/unversioned/horizontalpodautoscaler_test.go index b4552be12c..550dae6ec1 100644 --- a/pkg/client/unversioned/horizontalpodautoscaler_test.go +++ b/pkg/client/unversioned/horizontalpodautoscaler_test.go @@ -16,11 +16,6 @@ limitations under the License. package unversioned_test -import ( - . "k8s.io/kubernetes/pkg/client/unversioned" - "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" -) - import ( "net/url" "testing" @@ -29,13 +24,15 @@ import ( "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/apis/autoscaling" "k8s.io/kubernetes/pkg/apis/extensions" + "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" ) func getHorizontalPodAutoscalersResoureName() string { return "horizontalpodautoscalers" } -func getHPAClient(t *testing.T, c *simple.Client, ns, resourceGroup string) HorizontalPodAutoscalerInterface { +func getHPAClient(t *testing.T, c *simple.Client, ns, resourceGroup string) unversioned.HorizontalPodAutoscalerInterface { switch resourceGroup { case autoscaling.GroupName: return c.Setup(t).Autoscaling().HorizontalPodAutoscalers(ns) diff --git a/pkg/client/unversioned/ingress_test.go b/pkg/client/unversioned/ingress_test.go index 6bab5f5ed4..dfec482ead 100644 --- a/pkg/client/unversioned/ingress_test.go +++ b/pkg/client/unversioned/ingress_test.go @@ -16,17 +16,13 @@ limitations under the License. package unversioned_test -import ( - . "k8s.io/kubernetes/pkg/client/unversioned" - "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" -) - import ( "testing" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/apis/extensions" + "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" ) func getIngressResourceName() string { diff --git a/pkg/client/unversioned/jobs_test.go b/pkg/client/unversioned/jobs_test.go index 1541648ed1..a3f8c2270f 100644 --- a/pkg/client/unversioned/jobs_test.go +++ b/pkg/client/unversioned/jobs_test.go @@ -16,11 +16,6 @@ limitations under the License. package unversioned_test -import ( - . "k8s.io/kubernetes/pkg/client/unversioned" - "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" -) - import ( "testing" @@ -28,13 +23,15 @@ import ( "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/apis/batch" "k8s.io/kubernetes/pkg/apis/extensions" + "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" ) func getJobsResourceName() string { return "jobs" } -func getJobClient(t *testing.T, c *simple.Client, ns, resourceGroup string) JobInterface { +func getJobClient(t *testing.T, c *simple.Client, ns, resourceGroup string) unversioned.JobInterface { switch resourceGroup { case batch.GroupName: return c.Setup(t).Batch().Jobs(ns) diff --git a/pkg/client/unversioned/limit_ranges_test.go b/pkg/client/unversioned/limit_ranges_test.go index f6936570cc..445310291e 100644 --- a/pkg/client/unversioned/limit_ranges_test.go +++ b/pkg/client/unversioned/limit_ranges_test.go @@ -16,11 +16,6 @@ limitations under the License. package unversioned_test -import ( - . "k8s.io/kubernetes/pkg/client/unversioned" - "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" -) - import ( "net/url" "testing" @@ -28,6 +23,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/resource" "k8s.io/kubernetes/pkg/api/testapi" + "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" ) func getLimitRangesResourceName() string { diff --git a/pkg/client/unversioned/namespaces_test.go b/pkg/client/unversioned/namespaces_test.go index 509980e7e6..8e38c935b6 100644 --- a/pkg/client/unversioned/namespaces_test.go +++ b/pkg/client/unversioned/namespaces_test.go @@ -16,17 +16,13 @@ limitations under the License. package unversioned_test -import ( - . "k8s.io/kubernetes/pkg/client/unversioned" - "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" -) - import ( "net/url" "testing" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" + "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" ) func TestNamespaceCreate(t *testing.T) { diff --git a/pkg/client/unversioned/nodes_test.go b/pkg/client/unversioned/nodes_test.go index 37735ec7db..d20656d49e 100644 --- a/pkg/client/unversioned/nodes_test.go +++ b/pkg/client/unversioned/nodes_test.go @@ -16,11 +16,6 @@ limitations under the License. package unversioned_test -import ( - . "k8s.io/kubernetes/pkg/client/unversioned" - "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" -) - import ( "net/url" "testing" @@ -29,6 +24,7 @@ import ( "k8s.io/kubernetes/pkg/api/resource" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" "k8s.io/kubernetes/pkg/labels" ) diff --git a/pkg/client/unversioned/persistentvolume_test.go b/pkg/client/unversioned/persistentvolume_test.go index 329539a83a..03ebed7e7c 100644 --- a/pkg/client/unversioned/persistentvolume_test.go +++ b/pkg/client/unversioned/persistentvolume_test.go @@ -16,11 +16,6 @@ limitations under the License. package unversioned_test -import ( - . "k8s.io/kubernetes/pkg/client/unversioned" - "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" -) - import ( "net/url" "testing" @@ -28,6 +23,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/resource" "k8s.io/kubernetes/pkg/api/testapi" + "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" ) func getPersistentVolumesResoureName() string { diff --git a/pkg/client/unversioned/persistentvolumeclaim_test.go b/pkg/client/unversioned/persistentvolumeclaim_test.go index 837b72a9c7..901f510dfa 100644 --- a/pkg/client/unversioned/persistentvolumeclaim_test.go +++ b/pkg/client/unversioned/persistentvolumeclaim_test.go @@ -16,11 +16,6 @@ limitations under the License. package unversioned_test -import ( - . "k8s.io/kubernetes/pkg/client/unversioned" - "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" -) - import ( "net/url" "testing" @@ -28,6 +23,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/resource" "k8s.io/kubernetes/pkg/api/testapi" + "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" ) func getPersistentVolumeClaimsResoureName() string { diff --git a/pkg/client/unversioned/pod_templates_test.go b/pkg/client/unversioned/pod_templates_test.go index bd9bcb5496..c72f0a21c8 100644 --- a/pkg/client/unversioned/pod_templates_test.go +++ b/pkg/client/unversioned/pod_templates_test.go @@ -16,17 +16,13 @@ limitations under the License. package unversioned_test -import ( - . "k8s.io/kubernetes/pkg/client/unversioned" - "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" -) - import ( "net/url" "testing" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" + "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" ) func getPodTemplatesResoureName() string { diff --git a/pkg/client/unversioned/pods.go b/pkg/client/unversioned/pods.go index 04bb989c2a..426d3ee8e9 100644 --- a/pkg/client/unversioned/pods.go +++ b/pkg/client/unversioned/pods.go @@ -18,6 +18,7 @@ package unversioned import ( "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/watch" ) @@ -36,7 +37,7 @@ type PodInterface interface { Watch(opts api.ListOptions) (watch.Interface, error) Bind(binding *api.Binding) error UpdateStatus(pod *api.Pod) (*api.Pod, error) - GetLogs(name string, opts *api.PodLogOptions) *Request + GetLogs(name string, opts *api.PodLogOptions) *restclient.Request } // pods implements PodsNamespacer interface @@ -109,6 +110,6 @@ func (c *pods) UpdateStatus(pod *api.Pod) (result *api.Pod, err error) { } // Get constructs a request for getting the logs for a pod -func (c *pods) GetLogs(name string, opts *api.PodLogOptions) *Request { +func (c *pods) GetLogs(name string, opts *api.PodLogOptions) *restclient.Request { return c.r.Get().Namespace(c.ns).Name(name).Resource("pods").SubResource("log").VersionedParams(opts, api.ParameterCodec) } diff --git a/pkg/client/unversioned/pods_test.go b/pkg/client/unversioned/pods_test.go index 49175facb6..42a806502a 100644 --- a/pkg/client/unversioned/pods_test.go +++ b/pkg/client/unversioned/pods_test.go @@ -16,8 +16,6 @@ limitations under the License. package unversioned_test -import . "k8s.io/kubernetes/pkg/client/unversioned" - import ( "net/http" "net/url" diff --git a/pkg/client/unversioned/podsecuritypolicy_test.go b/pkg/client/unversioned/podsecuritypolicy_test.go index dee0f59351..d51e2c5a04 100644 --- a/pkg/client/unversioned/podsecuritypolicy_test.go +++ b/pkg/client/unversioned/podsecuritypolicy_test.go @@ -24,7 +24,6 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/apis/extensions" - . "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" ) diff --git a/pkg/client/unversioned/portforward/portforward_test.go b/pkg/client/unversioned/portforward/portforward_test.go index 2d5060b292..6a2a261443 100644 --- a/pkg/client/unversioned/portforward/portforward_test.go +++ b/pkg/client/unversioned/portforward/portforward_test.go @@ -30,7 +30,7 @@ import ( "testing" "time" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" kubeletserver "k8s.io/kubernetes/pkg/kubelet/server" "k8s.io/kubernetes/pkg/types" @@ -298,7 +298,7 @@ func TestForwardPorts(t *testing.T) { server := httptest.NewServer(fakePortForwardServer(t, testName, test.serverSends, test.clientSends)) url, _ := url.Parse(server.URL) - exec, err := remotecommand.NewExecutor(&client.Config{}, "POST", url) + exec, err := remotecommand.NewExecutor(&restclient.Config{}, "POST", url) if err != nil { t.Fatal(err) } @@ -374,7 +374,7 @@ func TestForwardPortsReturnsErrorWhenAllBindsFailed(t *testing.T) { // defer server.Close() url, _ := url.Parse(server.URL) - exec, err := remotecommand.NewExecutor(&client.Config{}, "POST", url) + exec, err := remotecommand.NewExecutor(&restclient.Config{}, "POST", url) if err != nil { t.Fatal(err) } diff --git a/pkg/client/unversioned/remotecommand/remotecommand.go b/pkg/client/unversioned/remotecommand/remotecommand.go index d827f1010d..d05e6ba5b3 100644 --- a/pkg/client/unversioned/remotecommand/remotecommand.go +++ b/pkg/client/unversioned/remotecommand/remotecommand.go @@ -24,8 +24,8 @@ import ( "github.com/golang/glog" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/transport" - client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/util/httpstream" "k8s.io/kubernetes/pkg/util/httpstream/spdy" ) @@ -59,14 +59,14 @@ type streamExecutor struct { // multiplexed bidirectional streams. The current implementation uses SPDY, // but this could be replaced with HTTP/2 once it's available, or something else. // TODO: the common code between this and portforward could be abstracted. -func NewExecutor(config *client.Config, method string, url *url.URL) (StreamExecutor, error) { - tlsConfig, err := client.TLSConfigFor(config) +func NewExecutor(config *restclient.Config, method string, url *url.URL) (StreamExecutor, error) { + tlsConfig, err := restclient.TLSConfigFor(config) if err != nil { return nil, err } upgradeRoundTripper := spdy.NewRoundTripper(tlsConfig) - wrapper, err := client.HTTPWrappersForConfig(config, upgradeRoundTripper) + wrapper, err := restclient.HTTPWrappersForConfig(config, upgradeRoundTripper) if err != nil { return nil, err } diff --git a/pkg/client/unversioned/remotecommand/remotecommand_test.go b/pkg/client/unversioned/remotecommand/remotecommand_test.go index 71acd239d3..2812d3fb31 100644 --- a/pkg/client/unversioned/remotecommand/remotecommand_test.go +++ b/pkg/client/unversioned/remotecommand/remotecommand_test.go @@ -29,7 +29,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/unversioned" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/util/httpstream" "k8s.io/kubernetes/pkg/util/httpstream/spdy" ) @@ -211,12 +211,12 @@ func TestRequestExecuteRemoteCommand(t *testing.T) { server := httptest.NewServer(fakeExecServer(t, i, testCase.Stdin, testCase.Stdout, testCase.Stderr, testCase.Error, testCase.Tty, testCase.MessageCount)) url, _ := url.ParseRequestURI(server.URL) - c := client.NewRESTClient(url, "", client.ContentConfig{GroupVersion: &unversioned.GroupVersion{Group: "x"}}, -1, -1, nil) + c := restclient.NewRESTClient(url, "", restclient.ContentConfig{GroupVersion: &unversioned.GroupVersion{Group: "x"}}, -1, -1, nil) req := c.Post().Resource("testing") req.SetHeader(httpstream.HeaderProtocolVersion, StreamProtocolV2Name) req.Param("command", "ls") req.Param("command", "/") - conf := &client.Config{ + conf := &restclient.Config{ Host: server.URL, } e, err := NewExecutor(conf, "POST", req.URL()) @@ -296,10 +296,10 @@ func TestRequestAttachRemoteCommand(t *testing.T) { server := httptest.NewServer(fakeExecServer(t, i, testCase.Stdin, testCase.Stdout, testCase.Stderr, testCase.Error, testCase.Tty, 1)) url, _ := url.ParseRequestURI(server.URL) - c := client.NewRESTClient(url, "", client.ContentConfig{GroupVersion: &unversioned.GroupVersion{Group: "x"}}, -1, -1, nil) + c := restclient.NewRESTClient(url, "", restclient.ContentConfig{GroupVersion: &unversioned.GroupVersion{Group: "x"}}, -1, -1, nil) req := c.Post().Resource("testing") - conf := &client.Config{ + conf := &restclient.Config{ Host: server.URL, } e, err := NewExecutor(conf, "POST", req.URL()) diff --git a/pkg/client/unversioned/replica_sets_test.go b/pkg/client/unversioned/replica_sets_test.go index 960baae04e..097fdd1275 100644 --- a/pkg/client/unversioned/replica_sets_test.go +++ b/pkg/client/unversioned/replica_sets_test.go @@ -16,17 +16,13 @@ limitations under the License. package unversioned_test -import ( - . "k8s.io/kubernetes/pkg/client/unversioned" - "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" -) - import ( "testing" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/apis/extensions" + "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" ) func getReplicaSetResourceName() string { diff --git a/pkg/client/unversioned/replication_controllers_test.go b/pkg/client/unversioned/replication_controllers_test.go index 151423b925..de0458ce40 100644 --- a/pkg/client/unversioned/replication_controllers_test.go +++ b/pkg/client/unversioned/replication_controllers_test.go @@ -16,16 +16,12 @@ limitations under the License. package unversioned_test -import ( - . "k8s.io/kubernetes/pkg/client/unversioned" - "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" -) - import ( "testing" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" + "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" ) func getRCResourceName() string { diff --git a/pkg/client/unversioned/resource_quotas_test.go b/pkg/client/unversioned/resource_quotas_test.go index ff8abddce3..73dba8dfba 100644 --- a/pkg/client/unversioned/resource_quotas_test.go +++ b/pkg/client/unversioned/resource_quotas_test.go @@ -16,11 +16,6 @@ limitations under the License. package unversioned_test -import ( - . "k8s.io/kubernetes/pkg/client/unversioned" - "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" -) - import ( "net/url" "testing" @@ -28,6 +23,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/resource" "k8s.io/kubernetes/pkg/api/testapi" + "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" ) func getResourceQuotasResoureName() string { diff --git a/pkg/client/unversioned/services.go b/pkg/client/unversioned/services.go index 159187dbdf..8b40a5d048 100644 --- a/pkg/client/unversioned/services.go +++ b/pkg/client/unversioned/services.go @@ -18,6 +18,7 @@ package unversioned import ( "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/util/net" "k8s.io/kubernetes/pkg/watch" ) @@ -36,7 +37,7 @@ type ServiceInterface interface { UpdateStatus(srv *api.Service) (*api.Service, error) Delete(name string) error Watch(opts api.ListOptions) (watch.Interface, error) - ProxyGet(scheme, name, port, path string, params map[string]string) ResponseWrapper + ProxyGet(scheme, name, port, path string, params map[string]string) restclient.ResponseWrapper } // services implements ServicesNamespacer interface @@ -106,7 +107,7 @@ func (c *services) Watch(opts api.ListOptions) (watch.Interface, error) { } // ProxyGet returns a response of the service by calling it through the proxy. -func (c *services) ProxyGet(scheme, name, port, path string, params map[string]string) ResponseWrapper { +func (c *services) ProxyGet(scheme, name, port, path string, params map[string]string) restclient.ResponseWrapper { request := c.r.Get(). Namespace(c.ns). Resource("services"). diff --git a/pkg/client/unversioned/services_test.go b/pkg/client/unversioned/services_test.go index 343aef6f6b..fadfe2be48 100644 --- a/pkg/client/unversioned/services_test.go +++ b/pkg/client/unversioned/services_test.go @@ -16,11 +16,6 @@ limitations under the License. package unversioned_test -import ( - . "k8s.io/kubernetes/pkg/client/unversioned" - "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" -) - import ( "net/url" "testing" @@ -28,6 +23,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" "k8s.io/kubernetes/pkg/labels" ) diff --git a/pkg/client/unversioned/testclient/fake_pods.go b/pkg/client/unversioned/testclient/fake_pods.go index 824356aacd..e634030c80 100644 --- a/pkg/client/unversioned/testclient/fake_pods.go +++ b/pkg/client/unversioned/testclient/fake_pods.go @@ -18,7 +18,7 @@ package testclient import ( "k8s.io/kubernetes/pkg/api" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/watch" ) @@ -104,7 +104,7 @@ func (c *FakePods) UpdateStatus(pod *api.Pod) (*api.Pod, error) { return obj.(*api.Pod), err } -func (c *FakePods) GetLogs(name string, opts *api.PodLogOptions) *client.Request { +func (c *FakePods) GetLogs(name string, opts *api.PodLogOptions) *restclient.Request { action := GenericActionImpl{} action.Verb = "get" action.Namespace = c.Namespace @@ -113,5 +113,5 @@ func (c *FakePods) GetLogs(name string, opts *api.PodLogOptions) *client.Request action.Value = opts _, _ = c.Fake.Invokes(action, &api.Pod{}) - return &client.Request{} + return &restclient.Request{} } diff --git a/pkg/client/unversioned/testclient/fake_services.go b/pkg/client/unversioned/testclient/fake_services.go index 2f17c75789..fd4861ba14 100644 --- a/pkg/client/unversioned/testclient/fake_services.go +++ b/pkg/client/unversioned/testclient/fake_services.go @@ -18,7 +18,7 @@ package testclient import ( "k8s.io/kubernetes/pkg/api" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/watch" ) @@ -83,6 +83,6 @@ func (c *FakeServices) Watch(opts api.ListOptions) (watch.Interface, error) { return c.Fake.InvokesWatch(NewWatchAction("services", c.Namespace, opts)) } -func (c *FakeServices) ProxyGet(scheme, name, port, path string, params map[string]string) client.ResponseWrapper { +func (c *FakeServices) ProxyGet(scheme, name, port, path string, params map[string]string) restclient.ResponseWrapper { return c.Fake.InvokesProxy(NewProxyGetAction("services", c.Namespace, scheme, name, port, path, params)) } diff --git a/pkg/client/unversioned/testclient/fixture.go b/pkg/client/unversioned/testclient/fixture.go index 64388fb638..4956a1b90f 100644 --- a/pkg/client/unversioned/testclient/fixture.go +++ b/pkg/client/unversioned/testclient/fixture.go @@ -26,7 +26,7 @@ import ( "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/api/unversioned" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/yaml" "k8s.io/kubernetes/pkg/watch" @@ -311,6 +311,6 @@ func (r *SimpleProxyReactor) Handles(action Action) bool { return true } -func (r *SimpleProxyReactor) React(action Action) (bool, client.ResponseWrapper, error) { +func (r *SimpleProxyReactor) React(action Action) (bool, restclient.ResponseWrapper, error) { return r.Reaction(action) } diff --git a/pkg/client/unversioned/testclient/simple/simple_testclient.go b/pkg/client/unversioned/testclient/simple/simple_testclient.go index 187f4e21e8..8697da29ea 100644 --- a/pkg/client/unversioned/testclient/simple/simple_testclient.go +++ b/pkg/client/unversioned/testclient/simple/simple_testclient.go @@ -28,6 +28,7 @@ import ( "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/unversioned" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/fields" "k8s.io/kubernetes/pkg/labels" @@ -81,27 +82,27 @@ func (c *Client) Setup(t *testing.T) *Client { } c.server = httptest.NewServer(c.handler) if c.Client == nil { - c.Client = client.NewOrDie(&client.Config{ + c.Client = client.NewOrDie(&restclient.Config{ Host: c.server.URL, - ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}, + ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}, }) // TODO: caesarxuchao: hacky way to specify version of Experimental client. // We will fix this by supporting multiple group versions in Config - c.AutoscalingClient = client.NewAutoscalingOrDie(&client.Config{ + c.AutoscalingClient = client.NewAutoscalingOrDie(&restclient.Config{ Host: c.server.URL, - ContentConfig: client.ContentConfig{GroupVersion: testapi.Autoscaling.GroupVersion()}, + ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Autoscaling.GroupVersion()}, }) - c.BatchClient = client.NewBatchOrDie(&client.Config{ + c.BatchClient = client.NewBatchOrDie(&restclient.Config{ Host: c.server.URL, - ContentConfig: client.ContentConfig{GroupVersion: testapi.Batch.GroupVersion()}, + ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Batch.GroupVersion()}, }) - c.ExtensionsClient = client.NewExtensionsOrDie(&client.Config{ + c.ExtensionsClient = client.NewExtensionsOrDie(&restclient.Config{ Host: c.server.URL, - ContentConfig: client.ContentConfig{GroupVersion: testapi.Extensions.GroupVersion()}, + ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Extensions.GroupVersion()}, }) - c.Clientset = clientset.NewForConfigOrDie(&client.Config{Host: c.server.URL}) + c.Clientset = clientset.NewForConfigOrDie(&restclient.Config{Host: c.server.URL}) } c.QueryValidator = map[string]func(string, string) bool{} return c diff --git a/pkg/client/unversioned/testclient/testclient.go b/pkg/client/unversioned/testclient/testclient.go index ffd8642f4d..7008620325 100644 --- a/pkg/client/unversioned/testclient/testclient.go +++ b/pkg/client/unversioned/testclient/testclient.go @@ -26,6 +26,7 @@ import ( "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/apimachinery/registered" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/version" @@ -86,7 +87,7 @@ type ProxyReactor interface { // Handles indicates whether or not this Reactor deals with a given action Handles(action Action) bool // React handles a watch action and returns results. It may choose to delegate by indicated handled=false - React(action Action) (handled bool, ret client.ResponseWrapper, err error) + React(action Action) (handled bool, ret restclient.ResponseWrapper, err error) } // ReactionFunc is a function that returns an object or error for a given Action. If "handled" is false, @@ -99,7 +100,7 @@ type WatchReactionFunc func(action Action) (handled bool, ret watch.Interface, e // ProxyReactionFunc is a function that returns a ResponseWrapper interface for a given Action. If "handled" is false, // then the test client will continue ignore the results and continue to the next ProxyReactionFunc -type ProxyReactionFunc func(action Action) (handled bool, ret client.ResponseWrapper, err error) +type ProxyReactionFunc func(action Action) (handled bool, ret restclient.ResponseWrapper, err error) // AddReactor appends a reactor to the end of the chain func (c *Fake) AddReactor(verb, resource string, reaction ReactionFunc) { @@ -177,7 +178,7 @@ func (c *Fake) InvokesWatch(action Action) (watch.Interface, error) { } // InvokesProxy records the provided Action and then invokes the ReactFn (if provided). -func (c *Fake) InvokesProxy(action Action) client.ResponseWrapper { +func (c *Fake) InvokesProxy(action Action) restclient.ResponseWrapper { c.Lock() defer c.Unlock() diff --git a/pkg/client/unversioned/thirdpartyresources_test.go b/pkg/client/unversioned/thirdpartyresources_test.go index bf2e9e15c5..7536928616 100644 --- a/pkg/client/unversioned/thirdpartyresources_test.go +++ b/pkg/client/unversioned/thirdpartyresources_test.go @@ -22,7 +22,6 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/apis/extensions" - . "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/client/unversioned/testclient/simple" ) diff --git a/pkg/controller/controller_utils_test.go b/pkg/controller/controller_utils_test.go index 7799985d9d..b3afbc623d 100644 --- a/pkg/controller/controller_utils_test.go +++ b/pkg/controller/controller_utils_test.go @@ -32,7 +32,7 @@ import ( "k8s.io/kubernetes/pkg/client/cache" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" "k8s.io/kubernetes/pkg/client/record" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/securitycontext" "k8s.io/kubernetes/pkg/util" @@ -193,7 +193,7 @@ func TestCreatePods(t *testing.T) { testServer := httptest.NewServer(&fakeHandler) // TODO: Uncomment when fix #19254 // defer testServer.Close() - clientset := clientset.NewForConfigOrDie(&client.Config{Host: testServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + clientset := clientset.NewForConfigOrDie(&restclient.Config{Host: testServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) podControl := RealPodControl{ KubeClient: clientset, diff --git a/pkg/controller/daemon/controller_test.go b/pkg/controller/daemon/controller_test.go index 52196d4ff7..ceccbceeb0 100644 --- a/pkg/controller/daemon/controller_test.go +++ b/pkg/controller/daemon/controller_test.go @@ -27,7 +27,7 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/client/cache" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/securitycontext" ) @@ -132,7 +132,7 @@ func addPods(podStore cache.Store, nodeName string, label map[string]string, num } func newTestController() (*DaemonSetsController, *controller.FakePodControl) { - clientset := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + clientset := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) manager := NewDaemonSetsController(clientset, controller.NoResyncPeriodFunc) manager.podStoreSynced = alwaysReady podControl := &controller.FakePodControl{} diff --git a/pkg/controller/endpoint/endpoints_controller_test.go b/pkg/controller/endpoint/endpoints_controller_test.go index da8fc6cd5c..670824a52e 100644 --- a/pkg/controller/endpoint/endpoints_controller_test.go +++ b/pkg/controller/endpoint/endpoints_controller_test.go @@ -29,7 +29,7 @@ import ( _ "k8s.io/kubernetes/pkg/apimachinery/registered" "k8s.io/kubernetes/pkg/client/cache" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/intstr" @@ -105,7 +105,7 @@ func TestSyncEndpointsItemsPreserveNoSelector(t *testing.T) { }}) // TODO: Uncomment when fix #19254 // defer testServer.Close() - client := clientset.NewForConfigOrDie(&client.Config{Host: testServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: testServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) endpoints := NewEndpointController(client, controller.NoResyncPeriodFunc) endpoints.serviceStore.Store.Add(&api.Service{ ObjectMeta: api.ObjectMeta{Name: "foo", Namespace: ns}, @@ -138,7 +138,7 @@ func TestCheckLeftoverEndpoints(t *testing.T) { }}) // TODO: Uncomment when fix #19254 // defer testServer.Close() - client := clientset.NewForConfigOrDie(&client.Config{Host: testServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: testServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) endpoints := NewEndpointController(client, controller.NoResyncPeriodFunc) endpoints.checkLeftoverEndpoints() @@ -167,7 +167,7 @@ func TestSyncEndpointsProtocolTCP(t *testing.T) { }}) // TODO: Uncomment when fix #19254 // defer testServer.Close() - client := clientset.NewForConfigOrDie(&client.Config{Host: testServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: testServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) endpoints := NewEndpointController(client, controller.NoResyncPeriodFunc) addPods(endpoints.podStore.Store, ns, 1, 1, 0) endpoints.serviceStore.Store.Add(&api.Service{ @@ -209,7 +209,7 @@ func TestSyncEndpointsProtocolUDP(t *testing.T) { }}) // TODO: Uncomment when fix #19254 // defer testServer.Close() - client := clientset.NewForConfigOrDie(&client.Config{Host: testServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: testServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) endpoints := NewEndpointController(client, controller.NoResyncPeriodFunc) addPods(endpoints.podStore.Store, ns, 1, 1, 0) endpoints.serviceStore.Store.Add(&api.Service{ @@ -248,7 +248,7 @@ func TestSyncEndpointsItemsEmptySelectorSelectsAll(t *testing.T) { }}) // TODO: Uncomment when fix #19254 // defer testServer.Close() - client := clientset.NewForConfigOrDie(&client.Config{Host: testServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: testServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) endpoints := NewEndpointController(client, controller.NoResyncPeriodFunc) addPods(endpoints.podStore.Store, ns, 1, 1, 0) endpoints.serviceStore.Store.Add(&api.Service{ @@ -286,7 +286,7 @@ func TestSyncEndpointsItemsEmptySelectorSelectsAllNotReady(t *testing.T) { }}) // TODO: Uncomment when fix #19254 // defer testServer.Close() - client := clientset.NewForConfigOrDie(&client.Config{Host: testServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: testServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) endpoints := NewEndpointController(client, controller.NoResyncPeriodFunc) addPods(endpoints.podStore.Store, ns, 0, 1, 1) endpoints.serviceStore.Store.Add(&api.Service{ @@ -324,7 +324,7 @@ func TestSyncEndpointsItemsEmptySelectorSelectsAllMixed(t *testing.T) { }}) // TODO: Uncomment when fix #19254 // defer testServer.Close() - client := clientset.NewForConfigOrDie(&client.Config{Host: testServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: testServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) endpoints := NewEndpointController(client, controller.NoResyncPeriodFunc) addPods(endpoints.podStore.Store, ns, 1, 1, 1) endpoints.serviceStore.Store.Add(&api.Service{ @@ -366,7 +366,7 @@ func TestSyncEndpointsItemsPreexisting(t *testing.T) { }}) // TODO: Uncomment when fix #19254 // defer testServer.Close() - client := clientset.NewForConfigOrDie(&client.Config{Host: testServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: testServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) endpoints := NewEndpointController(client, controller.NoResyncPeriodFunc) addPods(endpoints.podStore.Store, ns, 1, 1, 0) endpoints.serviceStore.Store.Add(&api.Service{ @@ -407,7 +407,7 @@ func TestSyncEndpointsItemsPreexistingIdentical(t *testing.T) { }}) // TODO: Uncomment when fix #19254 // defer testServer.Close() - client := clientset.NewForConfigOrDie(&client.Config{Host: testServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: testServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) endpoints := NewEndpointController(client, controller.NoResyncPeriodFunc) addPods(endpoints.podStore.Store, api.NamespaceDefault, 1, 1, 0) endpoints.serviceStore.Store.Add(&api.Service{ @@ -427,7 +427,7 @@ func TestSyncEndpointsItems(t *testing.T) { serverResponse{http.StatusOK, &api.Endpoints{}}) // TODO: Uncomment when fix #19254 // defer testServer.Close() - client := clientset.NewForConfigOrDie(&client.Config{Host: testServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: testServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) endpoints := NewEndpointController(client, controller.NoResyncPeriodFunc) addPods(endpoints.podStore.Store, ns, 3, 2, 0) addPods(endpoints.podStore.Store, "blah", 5, 2, 0) // make sure these aren't found! @@ -470,7 +470,7 @@ func TestSyncEndpointsItemsWithLabels(t *testing.T) { serverResponse{http.StatusOK, &api.Endpoints{}}) // TODO: Uncomment when fix #19254 // defer testServer.Close() - client := clientset.NewForConfigOrDie(&client.Config{Host: testServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: testServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) endpoints := NewEndpointController(client, controller.NoResyncPeriodFunc) addPods(endpoints.podStore.Store, ns, 3, 2, 0) serviceLabels := map[string]string{"foo": "bar"} @@ -531,7 +531,7 @@ func TestSyncEndpointsItemsPreexistingLabelsChange(t *testing.T) { }}) // TODO: Uncomment when fix #19254 // defer testServer.Close() - client := clientset.NewForConfigOrDie(&client.Config{Host: testServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: testServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) endpoints := NewEndpointController(client, controller.NoResyncPeriodFunc) addPods(endpoints.podStore.Store, ns, 1, 1, 0) serviceLabels := map[string]string{"baz": "blah"} diff --git a/pkg/controller/job/controller_test.go b/pkg/controller/job/controller_test.go index 1a14aff86b..e64b612ca3 100644 --- a/pkg/controller/job/controller_test.go +++ b/pkg/controller/job/controller_test.go @@ -27,8 +27,8 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/testing/core" - client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/client/unversioned/testclient" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/util/rand" @@ -207,7 +207,7 @@ func TestControllerSyncJob(t *testing.T) { for name, tc := range testCases { // job manager setup - clientset := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + clientset := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) manager := NewJobController(clientset, controller.NoResyncPeriodFunc) fakePodControl := controller.FakePodControl{Err: tc.podControllerError} manager.podControl = &fakePodControl @@ -302,7 +302,7 @@ func TestSyncJobPastDeadline(t *testing.T) { for name, tc := range testCases { // job manager setup - clientset := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + clientset := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) manager := NewJobController(clientset, controller.NoResyncPeriodFunc) fakePodControl := controller.FakePodControl{} manager.podControl = &fakePodControl @@ -372,7 +372,7 @@ func getCondition(job *extensions.Job, condition extensions.JobConditionType) bo } func TestSyncPastDeadlineJobFinished(t *testing.T) { - clientset := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + clientset := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) manager := NewJobController(clientset, controller.NoResyncPeriodFunc) fakePodControl := controller.FakePodControl{} manager.podControl = &fakePodControl @@ -406,7 +406,7 @@ func TestSyncPastDeadlineJobFinished(t *testing.T) { } func TestSyncJobComplete(t *testing.T) { - clientset := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + clientset := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) manager := NewJobController(clientset, controller.NoResyncPeriodFunc) fakePodControl := controller.FakePodControl{} manager.podControl = &fakePodControl @@ -431,7 +431,7 @@ func TestSyncJobComplete(t *testing.T) { } func TestSyncJobDeleted(t *testing.T) { - clientset := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + clientset := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) manager := NewJobController(clientset, controller.NoResyncPeriodFunc) fakePodControl := controller.FakePodControl{} manager.podControl = &fakePodControl @@ -451,7 +451,7 @@ func TestSyncJobDeleted(t *testing.T) { } func TestSyncJobUpdateRequeue(t *testing.T) { - clientset := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + clientset := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) manager := NewJobController(clientset, controller.NoResyncPeriodFunc) fakePodControl := controller.FakePodControl{} manager.podControl = &fakePodControl @@ -472,7 +472,7 @@ func TestSyncJobUpdateRequeue(t *testing.T) { } func TestJobPodLookup(t *testing.T) { - clientset := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + clientset := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) manager := NewJobController(clientset, controller.NoResyncPeriodFunc) manager.podStoreSynced = alwaysReady testCases := []struct { @@ -562,7 +562,7 @@ func (fe FakeJobExpectations) SatisfiedExpectations(controllerKey string) bool { // TestSyncJobExpectations tests that a pod cannot sneak in between counting active pods // and checking expectations. func TestSyncJobExpectations(t *testing.T) { - clientset := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + clientset := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) manager := NewJobController(clientset, controller.NoResyncPeriodFunc) fakePodControl := controller.FakePodControl{} manager.podControl = &fakePodControl diff --git a/pkg/controller/node/nodecontroller.go b/pkg/controller/node/nodecontroller.go index 9dfde37700..e9099766e4 100644 --- a/pkg/controller/node/nodecontroller.go +++ b/pkg/controller/node/nodecontroller.go @@ -32,7 +32,6 @@ import ( clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" "k8s.io/kubernetes/pkg/client/record" unversionedcore "k8s.io/kubernetes/pkg/client/typed/generated/core/unversioned" - client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/controller/framework" @@ -727,7 +726,7 @@ func (nc *NodeController) tryUpdateNodeStatus(node *api.Node) (time.Duration, ap // returns true if the provided node still has pods scheduled to it, or an error if // the server could not be contacted. func (nc *NodeController) hasPods(nodeName string) (bool, error) { - selector := fields.OneTermEqualSelector(client.PodHost, nodeName) + selector := fields.OneTermEqualSelector(api.PodHostField, nodeName) options := api.ListOptions{FieldSelector: selector} pods, err := nc.kubeClient.Core().Pods(api.NamespaceAll).List(options) if err != nil { @@ -762,7 +761,7 @@ func (nc *NodeController) cancelPodEviction(nodeName string) bool { // if any pods were deleted. func (nc *NodeController) deletePods(nodeName string) (bool, error) { remaining := false - selector := fields.OneTermEqualSelector(client.PodHost, nodeName) + selector := fields.OneTermEqualSelector(api.PodHostField, nodeName) options := api.ListOptions{FieldSelector: selector} pods, err := nc.kubeClient.Core().Pods(api.NamespaceAll).List(options) if err != nil { @@ -802,7 +801,7 @@ func (nc *NodeController) deletePods(nodeName string) (bool, error) { // return true if success func (nc *NodeController) markAllPodsNotReady(nodeName string) error { glog.V(2).Infof("Update ready status of pods on node [%v]", nodeName) - opts := api.ListOptions{FieldSelector: fields.OneTermEqualSelector(client.PodHost, nodeName)} + opts := api.ListOptions{FieldSelector: fields.OneTermEqualSelector(api.PodHostField, nodeName)} pods, err := nc.kubeClient.Core().Pods(api.NamespaceAll).List(opts) if err != nil { return err @@ -843,7 +842,7 @@ func (nc *NodeController) terminatePods(nodeName string, since time.Time) (bool, // have we deleted all pods complete := true - selector := fields.OneTermEqualSelector(client.PodHost, nodeName) + selector := fields.OneTermEqualSelector(api.PodHostField, nodeName) options := api.ListOptions{FieldSelector: selector} pods, err := nc.kubeClient.Core().Pods(api.NamespaceAll).List(options) if err != nil { diff --git a/pkg/controller/podautoscaler/horizontal_test.go b/pkg/controller/podautoscaler/horizontal_test.go index bf1050470c..cd72a3689e 100644 --- a/pkg/controller/podautoscaler/horizontal_test.go +++ b/pkg/controller/podautoscaler/horizontal_test.go @@ -28,8 +28,8 @@ import ( _ "k8s.io/kubernetes/pkg/apimachinery/registered" "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/testing/core" - client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/client/unversioned/testclient" "k8s.io/kubernetes/pkg/controller/podautoscaler/metrics" "k8s.io/kubernetes/pkg/runtime" @@ -188,7 +188,7 @@ func (tc *testCase) prepareTestClient(t *testing.T) *fake.Clientset { return true, obj, nil }) - fakeClient.AddProxyReactor("services", func(action core.Action) (handled bool, ret client.ResponseWrapper, err error) { + fakeClient.AddProxyReactor("services", func(action core.Action) (handled bool, ret restclient.ResponseWrapper, err error) { timestamp := time.Now() metrics := heapster.MetricResultList{} for _, level := range tc.reportedLevels { diff --git a/pkg/controller/podautoscaler/metrics/metrics_client_test.go b/pkg/controller/podautoscaler/metrics/metrics_client_test.go index 7cef3af229..9af3cecfbd 100644 --- a/pkg/controller/podautoscaler/metrics/metrics_client_test.go +++ b/pkg/controller/podautoscaler/metrics/metrics_client_test.go @@ -27,8 +27,8 @@ import ( "k8s.io/kubernetes/pkg/api/resource" _ "k8s.io/kubernetes/pkg/apimachinery/registered" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/testing/core" - client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/runtime" heapster "k8s.io/heapster/api/v1/types" @@ -94,7 +94,7 @@ func (tc *testCase) prepareTestClient(t *testing.T) *fake.Clientset { return true, obj, nil }) - fakeClient.AddProxyReactor("services", func(action core.Action) (handled bool, ret client.ResponseWrapper, err error) { + fakeClient.AddProxyReactor("services", func(action core.Action) (handled bool, ret restclient.ResponseWrapper, err error) { metrics := heapster.MetricResultList{} var latestTimestamp time.Time for _, reportedMetricPoints := range tc.reportedMetricsPoints { diff --git a/pkg/controller/replicaset/replica_set_test.go b/pkg/controller/replicaset/replica_set_test.go index 7492422759..fd371b886f 100644 --- a/pkg/controller/replicaset/replica_set_test.go +++ b/pkg/controller/replicaset/replica_set_test.go @@ -32,8 +32,8 @@ import ( "k8s.io/kubernetes/pkg/client/cache" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/testing/core" - client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/client/unversioned/testclient" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/runtime" @@ -137,7 +137,7 @@ type serverResponse struct { } func TestSyncReplicaSetDoesNothing(t *testing.T) { - client := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) fakePodControl := controller.FakePodControl{} manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, BurstReplicas, 0) manager.podStoreSynced = alwaysReady @@ -154,7 +154,7 @@ func TestSyncReplicaSetDoesNothing(t *testing.T) { } func TestSyncReplicaSetDeletes(t *testing.T) { - client := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) fakePodControl := controller.FakePodControl{} manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, BurstReplicas, 0) manager.podStoreSynced = alwaysReady @@ -171,7 +171,7 @@ func TestSyncReplicaSetDeletes(t *testing.T) { } func TestDeleteFinalStateUnknown(t *testing.T) { - client := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) fakePodControl := controller.FakePodControl{} manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, BurstReplicas, 0) manager.podStoreSynced = alwaysReady @@ -205,7 +205,7 @@ func TestDeleteFinalStateUnknown(t *testing.T) { } func TestSyncReplicaSetCreates(t *testing.T) { - client := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, BurstReplicas, 0) manager.podStoreSynced = alwaysReady @@ -228,7 +228,7 @@ func TestStatusUpdatesWithoutReplicasChange(t *testing.T) { } testServer := httptest.NewServer(&fakeHandler) defer testServer.Close() - client := clientset.NewForConfigOrDie(&client.Config{Host: testServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: testServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, BurstReplicas, 0) manager.podStoreSynced = alwaysReady @@ -271,7 +271,7 @@ func TestControllerUpdateReplicas(t *testing.T) { testServer := httptest.NewServer(&fakeHandler) defer testServer.Close() - client := clientset.NewForConfigOrDie(&client.Config{Host: testServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: testServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, BurstReplicas, 0) manager.podStoreSynced = alwaysReady @@ -310,7 +310,7 @@ func TestSyncReplicaSetDormancy(t *testing.T) { } testServer := httptest.NewServer(&fakeHandler) defer testServer.Close() - client := clientset.NewForConfigOrDie(&client.Config{Host: testServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: testServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) fakePodControl := controller.FakePodControl{} manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, BurstReplicas, 0) @@ -360,7 +360,7 @@ func TestSyncReplicaSetDormancy(t *testing.T) { } func TestPodControllerLookup(t *testing.T) { - manager := NewReplicaSetController(clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}), controller.NoResyncPeriodFunc, BurstReplicas, 0) + manager := NewReplicaSetController(clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}), controller.NoResyncPeriodFunc, BurstReplicas, 0) manager.podStoreSynced = alwaysReady testCases := []struct { inRSs []*extensions.ReplicaSet @@ -574,7 +574,7 @@ func TestControllerUpdateRequeue(t *testing.T) { testServer := httptest.NewServer(&fakeHandler) defer testServer.Close() - client := clientset.NewForConfigOrDie(&client.Config{Host: testServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: testServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, BurstReplicas, 0) manager.podStoreSynced = alwaysReady @@ -653,7 +653,7 @@ func TestControllerUpdateStatusWithFailure(t *testing.T) { } func doTestControllerBurstReplicas(t *testing.T, burstReplicas, numReplicas int) { - client := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) fakePodControl := controller.FakePodControl{} manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, burstReplicas, 0) manager.podStoreSynced = alwaysReady @@ -775,7 +775,7 @@ func (fe FakeRSExpectations) SatisfiedExpectations(controllerKey string) bool { // TestRSSyncExpectations tests that a pod cannot sneak in between counting active pods // and checking expectations. func TestRSSyncExpectations(t *testing.T) { - client := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) fakePodControl := controller.FakePodControl{} manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, 2, 0) manager.podStoreSynced = alwaysReady @@ -801,7 +801,7 @@ func TestRSSyncExpectations(t *testing.T) { } func TestDeleteControllerAndExpectations(t *testing.T) { - client := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, 10, 0) manager.podStoreSynced = alwaysReady @@ -843,7 +843,7 @@ func TestDeleteControllerAndExpectations(t *testing.T) { } func TestRSManagerNotReady(t *testing.T) { - client := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) fakePodControl := controller.FakePodControl{} manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, 2, 0) manager.podControl = &fakePodControl @@ -880,7 +880,7 @@ func shuffle(controllers []*extensions.ReplicaSet) []*extensions.ReplicaSet { } func TestOverlappingRSs(t *testing.T) { - client := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) labelMap := map[string]string{"foo": "bar"} for i := 0; i < 5; i++ { @@ -912,7 +912,7 @@ func TestOverlappingRSs(t *testing.T) { } func TestDeletionTimestamp(t *testing.T) { - c := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + c := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) labelMap := map[string]string{"foo": "bar"} manager := NewReplicaSetController(c, controller.NoResyncPeriodFunc, 10, 0) manager.podStoreSynced = alwaysReady diff --git a/pkg/controller/replication/replication_controller_test.go b/pkg/controller/replication/replication_controller_test.go index 6d576163a3..9176857746 100644 --- a/pkg/controller/replication/replication_controller_test.go +++ b/pkg/controller/replication/replication_controller_test.go @@ -31,8 +31,8 @@ import ( "k8s.io/kubernetes/pkg/client/cache" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/testing/core" - client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/securitycontext" @@ -135,7 +135,7 @@ type serverResponse struct { } func TestSyncReplicationControllerDoesNothing(t *testing.T) { - c := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + c := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) fakePodControl := controller.FakePodControl{} manager := NewReplicationManager(c, controller.NoResyncPeriodFunc, BurstReplicas, 0) manager.podStoreSynced = alwaysReady @@ -151,7 +151,7 @@ func TestSyncReplicationControllerDoesNothing(t *testing.T) { } func TestSyncReplicationControllerDeletes(t *testing.T) { - c := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + c := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) fakePodControl := controller.FakePodControl{} manager := NewReplicationManager(c, controller.NoResyncPeriodFunc, BurstReplicas, 0) manager.podStoreSynced = alwaysReady @@ -167,7 +167,7 @@ func TestSyncReplicationControllerDeletes(t *testing.T) { } func TestDeleteFinalStateUnknown(t *testing.T) { - c := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + c := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) fakePodControl := controller.FakePodControl{} manager := NewReplicationManager(c, controller.NoResyncPeriodFunc, BurstReplicas, 0) manager.podStoreSynced = alwaysReady @@ -200,7 +200,7 @@ func TestDeleteFinalStateUnknown(t *testing.T) { } func TestSyncReplicationControllerCreates(t *testing.T) { - c := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + c := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) manager := NewReplicationManager(c, controller.NoResyncPeriodFunc, BurstReplicas, 0) manager.podStoreSynced = alwaysReady @@ -223,7 +223,7 @@ func TestStatusUpdatesWithoutReplicasChange(t *testing.T) { testServer := httptest.NewServer(&fakeHandler) // TODO: Uncomment when fix #19254 // defer testServer.Close() - c := clientset.NewForConfigOrDie(&client.Config{Host: testServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + c := clientset.NewForConfigOrDie(&restclient.Config{Host: testServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) manager := NewReplicationManager(c, controller.NoResyncPeriodFunc, BurstReplicas, 0) manager.podStoreSynced = alwaysReady @@ -265,7 +265,7 @@ func TestControllerUpdateReplicas(t *testing.T) { testServer := httptest.NewServer(&fakeHandler) // TODO: Uncomment when fix #19254 // defer testServer.Close() - c := clientset.NewForConfigOrDie(&client.Config{Host: testServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + c := clientset.NewForConfigOrDie(&restclient.Config{Host: testServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) manager := NewReplicationManager(c, controller.NoResyncPeriodFunc, BurstReplicas, 0) manager.podStoreSynced = alwaysReady @@ -304,7 +304,7 @@ func TestSyncReplicationControllerDormancy(t *testing.T) { testServer := httptest.NewServer(&fakeHandler) // TODO: Uncomment when fix #19254 // defer testServer.Close() - c := clientset.NewForConfigOrDie(&client.Config{Host: testServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + c := clientset.NewForConfigOrDie(&restclient.Config{Host: testServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) fakePodControl := controller.FakePodControl{} manager := NewReplicationManager(c, controller.NoResyncPeriodFunc, BurstReplicas, 0) manager.podStoreSynced = alwaysReady @@ -352,7 +352,7 @@ func TestSyncReplicationControllerDormancy(t *testing.T) { } func TestPodControllerLookup(t *testing.T) { - manager := NewReplicationManager(clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}), controller.NoResyncPeriodFunc, BurstReplicas, 0) + manager := NewReplicationManager(clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}), controller.NoResyncPeriodFunc, BurstReplicas, 0) manager.podStoreSynced = alwaysReady testCases := []struct { inRCs []*api.ReplicationController @@ -559,7 +559,7 @@ func TestControllerUpdateRequeue(t *testing.T) { // TODO: Uncomment when fix #19254 // defer testServer.Close() - c := clientset.NewForConfigOrDie(&client.Config{Host: testServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + c := clientset.NewForConfigOrDie(&restclient.Config{Host: testServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) manager := NewReplicationManager(c, controller.NoResyncPeriodFunc, BurstReplicas, 0) manager.podStoreSynced = alwaysReady @@ -639,7 +639,7 @@ func TestControllerUpdateStatusWithFailure(t *testing.T) { } func doTestControllerBurstReplicas(t *testing.T, burstReplicas, numReplicas int) { - c := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + c := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) fakePodControl := controller.FakePodControl{} manager := NewReplicationManager(c, controller.NoResyncPeriodFunc, burstReplicas, 0) manager.podStoreSynced = alwaysReady @@ -759,7 +759,7 @@ func (fe FakeRCExpectations) SatisfiedExpectations(controllerKey string) bool { // TestRCSyncExpectations tests that a pod cannot sneak in between counting active pods // and checking expectations. func TestRCSyncExpectations(t *testing.T) { - c := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + c := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) fakePodControl := controller.FakePodControl{} manager := NewReplicationManager(c, controller.NoResyncPeriodFunc, 2, 0) manager.podStoreSynced = alwaysReady @@ -784,7 +784,7 @@ func TestRCSyncExpectations(t *testing.T) { } func TestDeleteControllerAndExpectations(t *testing.T) { - c := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + c := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) manager := NewReplicationManager(c, controller.NoResyncPeriodFunc, 10, 0) manager.podStoreSynced = alwaysReady @@ -826,7 +826,7 @@ func TestDeleteControllerAndExpectations(t *testing.T) { } func TestRCManagerNotReady(t *testing.T) { - c := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + c := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) fakePodControl := controller.FakePodControl{} manager := NewReplicationManager(c, controller.NoResyncPeriodFunc, 2, 0) manager.podControl = &fakePodControl @@ -863,7 +863,7 @@ func shuffle(controllers []*api.ReplicationController) []*api.ReplicationControl } func TestOverlappingRCs(t *testing.T) { - c := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + c := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) for i := 0; i < 5; i++ { manager := NewReplicationManager(c, controller.NoResyncPeriodFunc, 10, 0) @@ -894,7 +894,7 @@ func TestOverlappingRCs(t *testing.T) { } func TestDeletionTimestamp(t *testing.T) { - c := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + c := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) manager := NewReplicationManager(c, controller.NoResyncPeriodFunc, 10, 0) manager.podStoreSynced = alwaysReady @@ -975,7 +975,7 @@ func TestDeletionTimestamp(t *testing.T) { } func BenchmarkGetPodControllerMultiNS(b *testing.B) { - client := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) manager := NewReplicationManager(client, controller.NoResyncPeriodFunc, BurstReplicas, 0) const nsNum = 1000 @@ -1021,7 +1021,7 @@ func BenchmarkGetPodControllerMultiNS(b *testing.B) { } func BenchmarkGetPodControllerSingleNS(b *testing.B) { - client := clientset.NewForConfigOrDie(&client.Config{Host: "", ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) manager := NewReplicationManager(client, controller.NoResyncPeriodFunc, BurstReplicas, 0) const rcNum = 1000 diff --git a/pkg/controller/serviceaccount/serviceaccounts_controller.go b/pkg/controller/serviceaccount/serviceaccounts_controller.go index 1a367d6b24..dd38531279 100644 --- a/pkg/controller/serviceaccount/serviceaccounts_controller.go +++ b/pkg/controller/serviceaccount/serviceaccounts_controller.go @@ -26,7 +26,6 @@ import ( "k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/client/cache" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" - client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/controller/framework" "k8s.io/kubernetes/pkg/fields" "k8s.io/kubernetes/pkg/runtime" @@ -76,7 +75,7 @@ func NewServiceAccountsController(cl clientset.Interface, options ServiceAccount accountSelector := fields.Everything() if len(options.ServiceAccounts) == 1 { // If we're maintaining a single account, we can scope the accounts we watch to just that name - accountSelector = fields.SelectorFromSet(map[string]string{client.ObjectNameField: options.ServiceAccounts[0].Name}) + accountSelector = fields.SelectorFromSet(map[string]string{api.ObjectNameField: options.ServiceAccounts[0].Name}) } e.serviceAccounts, e.serviceAccountController = framework.NewIndexerInformer( &cache.ListWatch{ diff --git a/pkg/controller/serviceaccount/tokens_controller.go b/pkg/controller/serviceaccount/tokens_controller.go index 8087aeaa42..168941493f 100644 --- a/pkg/controller/serviceaccount/tokens_controller.go +++ b/pkg/controller/serviceaccount/tokens_controller.go @@ -88,7 +88,7 @@ func NewTokensController(cl clientset.Interface, options TokensControllerOptions cache.Indexers{"namespace": cache.MetaNamespaceIndexFunc}, ) - tokenSelector := fields.SelectorFromSet(map[string]string{client.SecretType: string(api.SecretTypeServiceAccountToken)}) + tokenSelector := fields.SelectorFromSet(map[string]string{api.SecretTypeField: string(api.SecretTypeServiceAccountToken)}) e.secrets, e.secretController = framework.NewIndexerInformer( &cache.ListWatch{ ListFunc: func(options api.ListOptions) (runtime.Object, error) { diff --git a/pkg/kubectl/cmd/annotate_test.go b/pkg/kubectl/cmd/annotate_test.go index d2f58bf653..56e91666f3 100644 --- a/pkg/kubectl/cmd/annotate_test.go +++ b/pkg/kubectl/cmd/annotate_test.go @@ -25,7 +25,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/unversioned/fake" "k8s.io/kubernetes/pkg/runtime" ) @@ -392,7 +392,7 @@ func TestAnnotateErrors(t *testing.T) { f, tf, _ := NewAPIFactory() tf.Printer = &testPrinter{} tf.Namespace = "test" - tf.ClientConfig = &client.Config{ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} + tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} buf := bytes.NewBuffer([]byte{}) cmd := NewCmdAnnotate(f, buf) @@ -448,7 +448,7 @@ func TestAnnotateObject(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &client.Config{ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} + tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} buf := bytes.NewBuffer([]byte{}) cmd := NewCmdAnnotate(f, buf) @@ -498,7 +498,7 @@ func TestAnnotateObjectFromFile(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &client.Config{ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} + tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} buf := bytes.NewBuffer([]byte{}) cmd := NewCmdAnnotate(f, buf) @@ -551,7 +551,7 @@ func TestAnnotateMultipleObjects(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &client.Config{ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} + tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} buf := bytes.NewBuffer([]byte{}) cmd := NewCmdAnnotate(f, buf) diff --git a/pkg/kubectl/cmd/attach.go b/pkg/kubectl/cmd/attach.go index 0c475df831..e05032c128 100644 --- a/pkg/kubectl/cmd/attach.go +++ b/pkg/kubectl/cmd/attach.go @@ -28,6 +28,7 @@ import ( "github.com/golang/glog" "github.com/spf13/cobra" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -74,13 +75,13 @@ func NewCmdAttach(f *cmdutil.Factory, cmdIn io.Reader, cmdOut, cmdErr io.Writer) // RemoteAttach defines the interface accepted by the Attach command - provided for test stubbing type RemoteAttach interface { - Attach(method string, url *url.URL, config *client.Config, stdin io.Reader, stdout, stderr io.Writer, tty bool) error + Attach(method string, url *url.URL, config *restclient.Config, stdin io.Reader, stdout, stderr io.Writer, tty bool) error } // DefaultRemoteAttach is the standard implementation of attaching type DefaultRemoteAttach struct{} -func (*DefaultRemoteAttach) Attach(method string, url *url.URL, config *client.Config, stdin io.Reader, stdout, stderr io.Writer, tty bool) error { +func (*DefaultRemoteAttach) Attach(method string, url *url.URL, config *restclient.Config, stdin io.Reader, stdout, stderr io.Writer, tty bool) error { exec, err := remotecommand.NewExecutor(config, method, url) if err != nil { return err @@ -102,7 +103,7 @@ type AttachOptions struct { Attach RemoteAttach Client *client.Client - Config *client.Config + Config *restclient.Config } // Complete verifies command line arguments and loads data from the command environment diff --git a/pkg/kubectl/cmd/attach_test.go b/pkg/kubectl/cmd/attach_test.go index 7fc4b7fe60..363c4765c5 100644 --- a/pkg/kubectl/cmd/attach_test.go +++ b/pkg/kubectl/cmd/attach_test.go @@ -30,7 +30,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/unversioned" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/unversioned/fake" ) @@ -40,7 +40,7 @@ type fakeRemoteAttach struct { attachErr error } -func (f *fakeRemoteAttach) Attach(method string, url *url.URL, config *client.Config, stdin io.Reader, stdout, stderr io.Writer, tty bool) error { +func (f *fakeRemoteAttach) Attach(method string, url *url.URL, config *restclient.Config, stdin io.Reader, stdout, stderr io.Writer, tty bool) error { f.method = method f.url = url return f.attachErr @@ -87,7 +87,7 @@ func TestPodAndContainerAttach(t *testing.T) { Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { return nil, nil }), } tf.Namespace = "test" - tf.ClientConfig = &client.Config{} + tf.ClientConfig = &restclient.Config{} cmd := &cobra.Command{} options := test.p @@ -150,7 +150,7 @@ func TestAttach(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &client.Config{ContentConfig: client.ContentConfig{GroupVersion: &unversioned.GroupVersion{Version: test.version}}} + tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &unversioned.GroupVersion{Version: test.version}}} bufOut := bytes.NewBuffer([]byte{}) bufErr := bytes.NewBuffer([]byte{}) bufIn := bytes.NewBuffer([]byte{}) @@ -227,7 +227,7 @@ func TestAttachWarnings(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &client.Config{ContentConfig: client.ContentConfig{GroupVersion: &unversioned.GroupVersion{Version: test.version}}} + tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &unversioned.GroupVersion{Version: test.version}}} bufOut := bytes.NewBuffer([]byte{}) bufErr := bytes.NewBuffer([]byte{}) bufIn := bytes.NewBuffer([]byte{}) diff --git a/pkg/kubectl/cmd/cmd_test.go b/pkg/kubectl/cmd/cmd_test.go index 9bbf3f0c3a..fa00458a78 100644 --- a/pkg/kubectl/cmd/cmd_test.go +++ b/pkg/kubectl/cmd/cmd_test.go @@ -32,6 +32,7 @@ import ( "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/api/validation" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/client/unversioned/fake" "k8s.io/kubernetes/pkg/kubectl" @@ -167,7 +168,7 @@ type testFactory struct { Printer kubectl.ResourcePrinter Validator validation.Schema Namespace string - ClientConfig *client.Config + ClientConfig *restclient.Config Err error } @@ -212,7 +213,7 @@ func NewTestFactory() (*cmdutil.Factory, *testFactory, runtime.Codec) { DefaultNamespace: func() (string, bool, error) { return t.Namespace, false, t.Err }, - ClientConfig: func() (*client.Config, error) { + ClientConfig: func() (*restclient.Config, error) { return t.ClientConfig, t.Err }, }, t, codec @@ -279,13 +280,13 @@ func NewAPIFactory() (*cmdutil.Factory, *testFactory, runtime.Codec) { DefaultNamespace: func() (string, bool, error) { return t.Namespace, false, t.Err }, - ClientConfig: func() (*client.Config, error) { + ClientConfig: func() (*restclient.Config, error) { return t.ClientConfig, t.Err }, Generators: func(cmdName string) map[string]kubectl.Generator { return cmdutil.DefaultGenerators(cmdName) }, - LogsForObject: func(object, options runtime.Object) (*client.Request, error) { + LogsForObject: func(object, options runtime.Object) (*restclient.Request, error) { fakeClient := t.Client.(*fake.RESTClient) c := client.NewOrDie(t.ClientConfig) c.Client = fakeClient.Client diff --git a/pkg/kubectl/cmd/drain_test.go b/pkg/kubectl/cmd/drain_test.go index b0aa36649a..e9bd67415e 100644 --- a/pkg/kubectl/cmd/drain_test.go +++ b/pkg/kubectl/cmd/drain_test.go @@ -34,7 +34,7 @@ import ( "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apis/extensions" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/unversioned/fake" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/conversion" @@ -165,7 +165,7 @@ func TestCordon(t *testing.T) { } }), } - tf.ClientConfig = &client.Config{ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} + tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} buf := bytes.NewBuffer([]byte{}) cmd := test.cmd(f, buf) @@ -431,7 +431,7 @@ func TestDrain(t *testing.T) { } }), } - tf.ClientConfig = &client.Config{ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} + tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} buf := bytes.NewBuffer([]byte{}) cmd := NewCmdDrain(f, buf) diff --git a/pkg/kubectl/cmd/exec.go b/pkg/kubectl/cmd/exec.go index 717ba613b8..ca981b44e5 100644 --- a/pkg/kubectl/cmd/exec.go +++ b/pkg/kubectl/cmd/exec.go @@ -28,6 +28,7 @@ import ( "github.com/golang/glog" "github.com/spf13/cobra" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -75,13 +76,13 @@ func NewCmdExec(f *cmdutil.Factory, cmdIn io.Reader, cmdOut, cmdErr io.Writer) * // RemoteExecutor defines the interface accepted by the Exec command - provided for test stubbing type RemoteExecutor interface { - Execute(method string, url *url.URL, config *client.Config, stdin io.Reader, stdout, stderr io.Writer, tty bool) error + Execute(method string, url *url.URL, config *restclient.Config, stdin io.Reader, stdout, stderr io.Writer, tty bool) error } // DefaultRemoteExecutor is the standard implementation of remote command execution type DefaultRemoteExecutor struct{} -func (*DefaultRemoteExecutor) Execute(method string, url *url.URL, config *client.Config, stdin io.Reader, stdout, stderr io.Writer, tty bool) error { +func (*DefaultRemoteExecutor) Execute(method string, url *url.URL, config *restclient.Config, stdin io.Reader, stdout, stderr io.Writer, tty bool) error { exec, err := remotecommand.NewExecutor(config, method, url) if err != nil { return err @@ -104,7 +105,7 @@ type ExecOptions struct { Executor RemoteExecutor Client *client.Client - Config *client.Config + Config *restclient.Config } // Complete verifies command line arguments and loads data from the command environment diff --git a/pkg/kubectl/cmd/exec_test.go b/pkg/kubectl/cmd/exec_test.go index 8317db9367..001f59a477 100644 --- a/pkg/kubectl/cmd/exec_test.go +++ b/pkg/kubectl/cmd/exec_test.go @@ -30,7 +30,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/unversioned" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/unversioned/fake" ) @@ -40,7 +40,7 @@ type fakeRemoteExecutor struct { execErr error } -func (f *fakeRemoteExecutor) Execute(method string, url *url.URL, config *client.Config, stdin io.Reader, stdout, stderr io.Writer, tty bool) error { +func (f *fakeRemoteExecutor) Execute(method string, url *url.URL, config *restclient.Config, stdin io.Reader, stdout, stderr io.Writer, tty bool) error { f.method = method f.url = url return f.execErr @@ -130,7 +130,7 @@ func TestPodAndContainer(t *testing.T) { Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { return nil, nil }), } tf.Namespace = "test" - tf.ClientConfig = &client.Config{} + tf.ClientConfig = &restclient.Config{} cmd := &cobra.Command{} options := test.p @@ -196,7 +196,7 @@ func TestExec(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &client.Config{ContentConfig: client.ContentConfig{GroupVersion: &unversioned.GroupVersion{Version: test.version}}} + tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &unversioned.GroupVersion{Version: test.version}}} bufOut := bytes.NewBuffer([]byte{}) bufErr := bytes.NewBuffer([]byte{}) bufIn := bytes.NewBuffer([]byte{}) diff --git a/pkg/kubectl/cmd/get_test.go b/pkg/kubectl/cmd/get_test.go index 4d4ac5e18b..fd06eea312 100644 --- a/pkg/kubectl/cmd/get_test.go +++ b/pkg/kubectl/cmd/get_test.go @@ -32,7 +32,7 @@ import ( "k8s.io/kubernetes/pkg/api/testapi" apitesting "k8s.io/kubernetes/pkg/api/testing" "k8s.io/kubernetes/pkg/api/unversioned" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/unversioned/fake" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util" @@ -122,7 +122,7 @@ func TestGetUnknownSchemaObject(t *testing.T) { Resp: &http.Response{StatusCode: 200, Body: objBody(codec, &internalType{Name: "foo"})}, } tf.Namespace = "test" - tf.ClientConfig = &client.Config{ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} + tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} buf := bytes.NewBuffer([]byte{}) cmd := NewCmdGet(f, buf) @@ -194,7 +194,7 @@ func TestGetUnknownSchemaObjectListGeneric(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &client.Config{ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} + tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} buf := bytes.NewBuffer([]byte{}) cmd := NewCmdGet(f, buf) cmd.SetOutput(buf) @@ -236,7 +236,7 @@ func TestGetSchemaObject(t *testing.T) { Resp: &http.Response{StatusCode: 200, Body: objBody(codec, &api.ReplicationController{ObjectMeta: api.ObjectMeta{Name: "foo"}})}, } tf.Namespace = "test" - tf.ClientConfig = &client.Config{ContentConfig: client.ContentConfig{GroupVersion: &unversioned.GroupVersion{Version: "v1"}}} + tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &unversioned.GroupVersion{Version: "v1"}}} buf := bytes.NewBuffer([]byte{}) cmd := NewCmdGet(f, buf) @@ -461,7 +461,7 @@ func TestGetMultipleTypeObjectsAsList(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &client.Config{ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} + tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} buf := bytes.NewBuffer([]byte{}) cmd := NewCmdGet(f, buf) diff --git a/pkg/kubectl/cmd/label_test.go b/pkg/kubectl/cmd/label_test.go index 5267bc3cc0..50859fd60c 100644 --- a/pkg/kubectl/cmd/label_test.go +++ b/pkg/kubectl/cmd/label_test.go @@ -25,7 +25,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/unversioned/fake" "k8s.io/kubernetes/pkg/runtime" ) @@ -301,7 +301,7 @@ func TestLabelErrors(t *testing.T) { f, tf, _ := NewAPIFactory() tf.Printer = &testPrinter{} tf.Namespace = "test" - tf.ClientConfig = &client.Config{ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} + tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} buf := bytes.NewBuffer([]byte{}) cmd := NewCmdLabel(f, buf) @@ -354,7 +354,7 @@ func TestLabelForResourceFromFile(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &client.Config{ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} + tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} buf := bytes.NewBuffer([]byte{}) cmd := NewCmdLabel(f, buf) @@ -403,7 +403,7 @@ func TestLabelMultipleObjects(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &client.Config{ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} + tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} buf := bytes.NewBuffer([]byte{}) cmd := NewCmdLabel(f, buf) diff --git a/pkg/kubectl/cmd/logs.go b/pkg/kubectl/cmd/logs.go index 835d08ed32..fbbc2b8028 100644 --- a/pkg/kubectl/cmd/logs.go +++ b/pkg/kubectl/cmd/logs.go @@ -28,7 +28,7 @@ import ( "k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/api/validation" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/resource" "k8s.io/kubernetes/pkg/runtime" @@ -61,7 +61,7 @@ type LogsOptions struct { ClientMapper resource.ClientMapper Decoder runtime.Decoder - LogsForObject func(object, options runtime.Object) (*client.Request, error) + LogsForObject func(object, options runtime.Object) (*restclient.Request, error) Out io.Writer } diff --git a/pkg/kubectl/cmd/logs_test.go b/pkg/kubectl/cmd/logs_test.go index caa867031b..3e0e8fe381 100644 --- a/pkg/kubectl/cmd/logs_test.go +++ b/pkg/kubectl/cmd/logs_test.go @@ -28,7 +28,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/unversioned" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/unversioned/fake" ) @@ -66,7 +66,7 @@ func TestLog(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &client.Config{ContentConfig: client.ContentConfig{GroupVersion: &unversioned.GroupVersion{Version: test.version}}} + tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &unversioned.GroupVersion{Version: test.version}}} buf := bytes.NewBuffer([]byte{}) cmd := NewCmdLogs(f, buf) diff --git a/pkg/kubectl/cmd/portforward.go b/pkg/kubectl/cmd/portforward.go index 23ba15784b..3fb2d3a4db 100644 --- a/pkg/kubectl/cmd/portforward.go +++ b/pkg/kubectl/cmd/portforward.go @@ -24,7 +24,7 @@ import ( "github.com/golang/glog" "github.com/spf13/cobra" "k8s.io/kubernetes/pkg/api" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/unversioned/portforward" "k8s.io/kubernetes/pkg/client/unversioned/remotecommand" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -62,12 +62,12 @@ func NewCmdPortForward(f *cmdutil.Factory) *cobra.Command { } type portForwarder interface { - ForwardPorts(method string, url *url.URL, config *client.Config, ports []string, stopChan <-chan struct{}) error + ForwardPorts(method string, url *url.URL, config *restclient.Config, ports []string, stopChan <-chan struct{}) error } type defaultPortForwarder struct{} -func (*defaultPortForwarder) ForwardPorts(method string, url *url.URL, config *client.Config, ports []string, stopChan <-chan struct{}) error { +func (*defaultPortForwarder) ForwardPorts(method string, url *url.URL, config *restclient.Config, ports []string, stopChan <-chan struct{}) error { dialer, err := remotecommand.NewExecutor(config, method, url) if err != nil { return err diff --git a/pkg/kubectl/cmd/portforward_test.go b/pkg/kubectl/cmd/portforward_test.go index eebda28b8d..d88ab90f44 100644 --- a/pkg/kubectl/cmd/portforward_test.go +++ b/pkg/kubectl/cmd/portforward_test.go @@ -27,7 +27,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/unversioned" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/unversioned/fake" ) @@ -37,7 +37,7 @@ type fakePortForwarder struct { pfErr error } -func (f *fakePortForwarder) ForwardPorts(method string, url *url.URL, config *client.Config, ports []string, stopChan <-chan struct{}) error { +func (f *fakePortForwarder) ForwardPorts(method string, url *url.URL, config *restclient.Config, ports []string, stopChan <-chan struct{}) error { f.method = method f.url = url return f.pfErr @@ -84,7 +84,7 @@ func TestPortForward(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &client.Config{ContentConfig: client.ContentConfig{GroupVersion: &unversioned.GroupVersion{Version: test.version}}} + tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &unversioned.GroupVersion{Version: test.version}}} ff := &fakePortForwarder{} if test.pfErr { ff.pfErr = fmt.Errorf("pf error") @@ -154,7 +154,7 @@ func TestPortForwardWithPFlag(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &client.Config{ContentConfig: client.ContentConfig{GroupVersion: &unversioned.GroupVersion{Version: test.version}}} + tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: &unversioned.GroupVersion{Version: test.version}}} ff := &fakePortForwarder{} if test.pfErr { ff.pfErr = fmt.Errorf("pf error") diff --git a/pkg/kubectl/cmd/run_test.go b/pkg/kubectl/cmd/run_test.go index a728a810e6..a6d18d7930 100644 --- a/pkg/kubectl/cmd/run_test.go +++ b/pkg/kubectl/cmd/run_test.go @@ -28,7 +28,7 @@ import ( "github.com/spf13/cobra" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/unversioned/fake" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/runtime" @@ -157,7 +157,7 @@ func TestRunArgsFollowDashRules(t *testing.T) { }), } tf.Namespace = "test" - tf.ClientConfig = &client.Config{} + tf.ClientConfig = &restclient.Config{} cmd := NewCmdRun(f, os.Stdin, os.Stdout, os.Stderr) cmd.Flags().Set("image", "nginx") cmd.Flags().Set("generator", "run/v1") @@ -265,7 +265,7 @@ func TestGenerateService(t *testing.T) { for _, test := range tests { sawPOST := false f, tf, codec := NewAPIFactory() - tf.ClientConfig = &client.Config{ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} + tf.ClientConfig = &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} tf.Client = &fake.RESTClient{ Codec: codec, Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) { diff --git a/pkg/kubectl/cmd/util/clientcache.go b/pkg/kubectl/cmd/util/clientcache.go index 523c577500..5e6551cdee 100644 --- a/pkg/kubectl/cmd/util/clientcache.go +++ b/pkg/kubectl/cmd/util/clientcache.go @@ -19,6 +19,7 @@ package util import ( "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apimachinery/registered" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" ) @@ -26,7 +27,7 @@ import ( func NewClientCache(loader clientcmd.ClientConfig) *ClientCache { return &ClientCache{ clients: make(map[unversioned.GroupVersion]*client.Client), - configs: make(map[unversioned.GroupVersion]*client.Config), + configs: make(map[unversioned.GroupVersion]*restclient.Config), loader: loader, } } @@ -36,14 +37,14 @@ func NewClientCache(loader clientcmd.ClientConfig) *ClientCache { type ClientCache struct { loader clientcmd.ClientConfig clients map[unversioned.GroupVersion]*client.Client - configs map[unversioned.GroupVersion]*client.Config - defaultConfig *client.Config + configs map[unversioned.GroupVersion]*restclient.Config + defaultConfig *restclient.Config defaultClient *client.Client matchVersion bool } // ClientConfigForVersion returns the correct config for a server -func (c *ClientCache) ClientConfigForVersion(version *unversioned.GroupVersion) (*client.Config, error) { +func (c *ClientCache) ClientConfigForVersion(version *unversioned.GroupVersion) (*restclient.Config, error) { if c.defaultConfig == nil { config, err := c.loader.ClientConfig() if err != nil { diff --git a/pkg/kubectl/cmd/util/factory.go b/pkg/kubectl/cmd/util/factory.go index a92ddd1ddb..16116ef44f 100644 --- a/pkg/kubectl/cmd/util/factory.go +++ b/pkg/kubectl/cmd/util/factory.go @@ -45,6 +45,7 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/apis/metrics" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/kubectl" @@ -79,7 +80,7 @@ type Factory struct { // Returns a client for accessing Kubernetes resources or an error. Client func() (*client.Client, error) // Returns a client.Config for accessing the Kubernetes server. - ClientConfig func() (*client.Config, error) + ClientConfig func() (*restclient.Config, error) // Returns a RESTClient for working with the specified RESTMapping or an error. This is intended // for working with arbitrary resources and is not guaranteed to point to a Kubernetes APIServer. ClientForMapping func(mapping *meta.RESTMapping) (resource.RESTClient, error) @@ -106,7 +107,7 @@ type Factory struct { // LabelsForObject returns the labels associated with the provided object LabelsForObject func(object runtime.Object) (map[string]string, error) // LogsForObject returns a request for the logs associated with the provided object - LogsForObject func(object, options runtime.Object) (*client.Request, error) + LogsForObject func(object, options runtime.Object) (*restclient.Request, error) // PauseObject marks the provided object as paused ie. it will not be reconciled by its controller. PauseObject func(object runtime.Object) (bool, error) // ResumeObject resumes a paused object ie. it will be reconciled by its controller. @@ -225,7 +226,7 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory { Client: func() (*client.Client, error) { return clients.ClientForVersion(nil) }, - ClientConfig: func() (*client.Config, error) { + ClientConfig: func() (*restclient.Config, error) { return clients.ClientConfigForVersion(nil) }, ClientForMapping: func(mapping *meta.RESTMapping) (resource.RESTClient, error) { @@ -365,7 +366,7 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory { LabelsForObject: func(object runtime.Object) (map[string]string, error) { return meta.NewAccessor().Labels(object) }, - LogsForObject: func(object, options runtime.Object) (*client.Request, error) { + LogsForObject: func(object, options runtime.Object) (*restclient.Request, error) { c, err := clients.ClientForVersion(nil) if err != nil { return nil, err @@ -633,7 +634,7 @@ type clientSwaggerSchema struct { const schemaFileName = "schema.json" type schemaClient interface { - Get() *client.Request + Get() *restclient.Request } func recursiveSplit(dir string) []string { diff --git a/pkg/kubectl/describe.go b/pkg/kubectl/describe.go index efda35c4d0..af1dba129a 100644 --- a/pkg/kubectl/describe.go +++ b/pkg/kubectl/describe.go @@ -1421,7 +1421,7 @@ func (d *ServiceAccountDescriber) Describe(namespace, name string) (string, erro tokens := []api.Secret{} - tokenSelector := fields.SelectorFromSet(map[string]string{client.SecretType: string(api.SecretTypeServiceAccountToken)}) + tokenSelector := fields.SelectorFromSet(map[string]string{api.SecretTypeField: string(api.SecretTypeServiceAccountToken)}) options := api.ListOptions{FieldSelector: tokenSelector} secrets, err := d.Secrets(namespace).List(options) if err == nil { diff --git a/pkg/kubectl/interfaces.go b/pkg/kubectl/interfaces.go index 890947b5c6..8f1e6f197b 100644 --- a/pkg/kubectl/interfaces.go +++ b/pkg/kubectl/interfaces.go @@ -18,7 +18,7 @@ package kubectl import ( "k8s.io/kubernetes/pkg/api" - client "k8s.io/kubernetes/pkg/client/unversioned" + client "k8s.io/kubernetes/pkg/client/restclient" ) // RESTClient is a client helper for dealing with RESTful resources diff --git a/pkg/kubectl/proxy_server.go b/pkg/kubectl/proxy_server.go index bfbb9b6a0e..082b542fc8 100644 --- a/pkg/kubectl/proxy_server.go +++ b/pkg/kubectl/proxy_server.go @@ -28,7 +28,7 @@ import ( "time" "github.com/golang/glog" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/util" ) @@ -146,7 +146,7 @@ type ProxyServer struct { // NewProxyServer creates and installs a new ProxyServer. // It automatically registers the created ProxyServer to http.DefaultServeMux. // 'filter', if non-nil, protects requests to the api only. -func NewProxyServer(filebase string, apiProxyPrefix string, staticPrefix string, filter *FilterServer, cfg *client.Config) (*ProxyServer, error) { +func NewProxyServer(filebase string, apiProxyPrefix string, staticPrefix string, filter *FilterServer, cfg *restclient.Config) (*ProxyServer, error) { host := cfg.Host if !strings.HasSuffix(host, "/") { host = host + "/" @@ -156,7 +156,7 @@ func NewProxyServer(filebase string, apiProxyPrefix string, staticPrefix string, return nil, err } proxy := newProxy(target) - if proxy.Transport, err = client.TransportFor(cfg); err != nil { + if proxy.Transport, err = restclient.TransportFor(cfg); err != nil { return nil, err } proxyServer := http.Handler(proxy) diff --git a/pkg/kubectl/proxy_server_test.go b/pkg/kubectl/proxy_server_test.go index 494b926cc0..2d403149fe 100644 --- a/pkg/kubectl/proxy_server_test.go +++ b/pkg/kubectl/proxy_server_test.go @@ -26,7 +26,7 @@ import ( "strings" "testing" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" ) func TestAccept(t *testing.T) { @@ -293,7 +293,7 @@ func TestPathHandling(t *testing.T) { {"/custom/", "/custom/api/v1/pods/", "/api/v1/pods/"}, } - cc := &client.Config{ + cc := &restclient.Config{ Host: ts.URL, } diff --git a/pkg/kubectl/resource/interfaces.go b/pkg/kubectl/resource/interfaces.go index 54d20dfbff..2639a61ecc 100644 --- a/pkg/kubectl/resource/interfaces.go +++ b/pkg/kubectl/resource/interfaces.go @@ -19,7 +19,7 @@ package resource import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/meta" - client "k8s.io/kubernetes/pkg/client/unversioned" + client "k8s.io/kubernetes/pkg/client/restclient" ) // RESTClient is a client helper for dealing with RESTful resources diff --git a/pkg/kubectl/rolling_updater_test.go b/pkg/kubectl/rolling_updater_test.go index 882267accb..943908e8ca 100644 --- a/pkg/kubectl/rolling_updater_test.go +++ b/pkg/kubectl/rolling_updater_test.go @@ -29,6 +29,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" apitesting "k8s.io/kubernetes/pkg/api/testing" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/client/unversioned/fake" "k8s.io/kubernetes/pkg/client/unversioned/testclient" @@ -1367,7 +1368,7 @@ func TestUpdateWithRetries(t *testing.T) { } }), } - clientConfig := &client.Config{ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} + clientConfig := &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} client := client.NewOrDie(clientConfig) client.Client = fakeClient.Client @@ -1464,7 +1465,7 @@ func TestAddDeploymentHash(t *testing.T) { } }), } - clientConfig := &client.Config{ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} + clientConfig := &restclient.Config{ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} client := client.NewOrDie(clientConfig) client.Client = fakeClient.Client diff --git a/pkg/kubelet/client/kubelet_client.go b/pkg/kubelet/client/kubelet_client.go index 3d547726a9..cd48f05c3d 100644 --- a/pkg/kubelet/client/kubelet_client.go +++ b/pkg/kubelet/client/kubelet_client.go @@ -25,8 +25,8 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/validation" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/transport" - client "k8s.io/kubernetes/pkg/client/unversioned" utilnet "k8s.io/kubernetes/pkg/util/net" ) @@ -36,7 +36,7 @@ type KubeletClientConfig struct { EnableHttps bool // TLSClientConfig contains settings to enable transport layer security - client.TLSClientConfig + restclient.TLSClientConfig // Server requires Bearer authentication BearerToken string diff --git a/pkg/kubelet/client/kubelet_client_test.go b/pkg/kubelet/client/kubelet_client_test.go index 13a2b0d604..19c816b166 100644 --- a/pkg/kubelet/client/kubelet_client_test.go +++ b/pkg/kubelet/client/kubelet_client_test.go @@ -22,7 +22,7 @@ import ( "net/url" "testing" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/probe" utiltesting "k8s.io/kubernetes/pkg/util/testing" ) @@ -65,7 +65,7 @@ func TestNewKubeletClientTLSInvalid(t *testing.T) { config := &KubeletClientConfig{ EnableHttps: true, //Invalid certificate and key path - TLSClientConfig: client.TLSClientConfig{ + TLSClientConfig: restclient.TLSClientConfig{ CertFile: "../../client/testdata/mycertinvalid.cer", KeyFile: "../../client/testdata/mycertinvalid.key", CAFile: "../../client/testdata/myCA.cer", @@ -85,7 +85,7 @@ func TestNewKubeletClientTLSValid(t *testing.T) { config := &KubeletClientConfig{ Port: 1234, EnableHttps: true, - TLSClientConfig: client.TLSClientConfig{ + TLSClientConfig: restclient.TLSClientConfig{ CertFile: "../../client/testdata/mycertvalid.cer", // TLS Configuration, only applies if EnableHttps is true. KeyFile: "../../client/testdata/mycertvalid.key", diff --git a/pkg/kubelet/config/apiserver.go b/pkg/kubelet/config/apiserver.go index f78c5e3515..c3baed8d04 100644 --- a/pkg/kubelet/config/apiserver.go +++ b/pkg/kubelet/config/apiserver.go @@ -21,14 +21,13 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/client/cache" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" - client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/fields" kubetypes "k8s.io/kubernetes/pkg/kubelet/types" ) // NewSourceApiserver creates a config source that watches and pulls from the apiserver. func NewSourceApiserver(c *clientset.Clientset, nodeName string, updates chan<- interface{}) { - lw := cache.NewListWatchFromClient(c.CoreClient, "pods", api.NamespaceAll, fields.OneTermEqualSelector(client.PodHost, nodeName)) + lw := cache.NewListWatchFromClient(c.CoreClient, "pods", api.NamespaceAll, fields.OneTermEqualSelector(api.PodHostField, nodeName)) newSourceApiserverFromLW(lw, updates) } diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index 345e208d78..53d52cb8fc 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -44,7 +44,6 @@ import ( "k8s.io/kubernetes/pkg/client/cache" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" "k8s.io/kubernetes/pkg/client/record" - client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/fieldpath" "k8s.io/kubernetes/pkg/fields" @@ -239,7 +238,7 @@ func NewMainKubelet( if kubeClient != nil { // TODO: cache.NewListWatchFromClient is limited as it takes a client implementation rather // than an interface. There is no way to construct a list+watcher using resource name. - fieldSelector := fields.Set{client.ObjectNameField: nodeName}.AsSelector() + fieldSelector := fields.Set{api.ObjectNameField: nodeName}.AsSelector() listWatch := &cache.ListWatch{ ListFunc: func(options api.ListOptions) (runtime.Object, error) { options.FieldSelector = fieldSelector diff --git a/pkg/metrics/metrics_grabber.go b/pkg/metrics/metrics_grabber.go index ac95999ec5..9fefbb3304 100644 --- a/pkg/metrics/metrics_grabber.go +++ b/pkg/metrics/metrics_grabber.go @@ -91,7 +91,7 @@ func NewMetricsGrabber(c *client.Client, kubelets bool, scheduler bool, controll } func (g *MetricsGrabber) GrabFromKubelet(nodeName string) (KubeletMetrics, error) { - nodes, err := g.client.Nodes().List(api.ListOptions{FieldSelector: fields.Set{client.ObjectNameField: nodeName}.AsSelector()}) + nodes, err := g.client.Nodes().List(api.ListOptions{FieldSelector: fields.Set{api.ObjectNameField: nodeName}.AsSelector()}) if err != nil { return KubeletMetrics{}, err } diff --git a/plugin/pkg/admission/initialresources/hawkular.go b/plugin/pkg/admission/initialresources/hawkular.go index 9f82d6a6fa..1d276d7cfc 100644 --- a/plugin/pkg/admission/initialresources/hawkular.go +++ b/plugin/pkg/admission/initialresources/hawkular.go @@ -20,17 +20,18 @@ import ( "crypto/tls" "crypto/x509" "fmt" - "github.com/golang/glog" - "github.com/hawkular/hawkular-client-go/metrics" "io/ioutil" - "k8s.io/kubernetes/pkg/api" "net/http" "net/url" "strconv" "strings" "time" - client "k8s.io/kubernetes/pkg/client/unversioned" + "github.com/golang/glog" + "github.com/hawkular/hawkular-client-go/metrics" + "k8s.io/kubernetes/pkg/api" + + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" ) @@ -172,7 +173,7 @@ func (hs *hawkularSource) init() error { if err != nil { return err } - tC, err = client.TLSConfigFor(kubeConfig) + tC, err = restclient.TLSConfigFor(kubeConfig) if err != nil { return err } diff --git a/plugin/pkg/admission/serviceaccount/admission.go b/plugin/pkg/admission/serviceaccount/admission.go index 06cfad5393..543604c9e5 100644 --- a/plugin/pkg/admission/serviceaccount/admission.go +++ b/plugin/pkg/admission/serviceaccount/admission.go @@ -29,7 +29,6 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/client/cache" - client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/fields" kubelet "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/runtime" @@ -102,7 +101,7 @@ func NewServiceAccount(cl clientset.Interface) *serviceAccount { 0, ) - tokenSelector := fields.SelectorFromSet(map[string]string{client.SecretType: string(api.SecretTypeServiceAccountToken)}) + tokenSelector := fields.SelectorFromSet(map[string]string{api.SecretTypeField: string(api.SecretTypeServiceAccountToken)}) secretsIndexer, secretsReflector := cache.NewNamespaceKeyedIndexerAndReflector( &cache.ListWatch{ ListFunc: func(options api.ListOptions) (runtime.Object, error) { diff --git a/plugin/pkg/auth/authorizer/webhook/webhook.go b/plugin/pkg/auth/authorizer/webhook/webhook.go index 7d064c5373..ce6065b8b6 100644 --- a/plugin/pkg/auth/authorizer/webhook/webhook.go +++ b/plugin/pkg/auth/authorizer/webhook/webhook.go @@ -26,7 +26,7 @@ import ( "k8s.io/kubernetes/pkg/apimachinery/registered" "k8s.io/kubernetes/pkg/apis/authorization/v1beta1" "k8s.io/kubernetes/pkg/auth/authorizer" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime/serializer/json" @@ -46,7 +46,7 @@ var ( var _ authorizer.Authorizer = (*WebhookAuthorizer)(nil) type WebhookAuthorizer struct { - restClient *client.RESTClient + restClient *restclient.RESTClient } // New creates a new WebhookAuthorizer from the provided kubeconfig file. @@ -88,7 +88,7 @@ func New(kubeConfigFile string) (*WebhookAuthorizer, error) { serializer := json.NewSerializer(json.DefaultMetaFactory, api.Scheme, runtime.ObjectTyperToTyper(api.Scheme), false) clientConfig.ContentConfig.Codec = versioning.NewCodecForScheme(api.Scheme, serializer, encodeVersions, decodeVersions) - restClient, err := client.UnversionedRESTClientFor(clientConfig) + restClient, err := restclient.UnversionedRESTClientFor(clientConfig) if err != nil { return nil, err } diff --git a/plugin/pkg/scheduler/algorithmprovider/defaults/compatibility_test.go b/plugin/pkg/scheduler/algorithmprovider/defaults/compatibility_test.go index d981d03202..2c37459fd0 100644 --- a/plugin/pkg/scheduler/algorithmprovider/defaults/compatibility_test.go +++ b/plugin/pkg/scheduler/algorithmprovider/defaults/compatibility_test.go @@ -20,14 +20,16 @@ import ( "reflect" "testing" + "net/http/httptest" + "k8s.io/kubernetes/pkg/api/testapi" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/runtime" utiltesting "k8s.io/kubernetes/pkg/util/testing" schedulerapi "k8s.io/kubernetes/plugin/pkg/scheduler/api" latestschedulerapi "k8s.io/kubernetes/plugin/pkg/scheduler/api/latest" "k8s.io/kubernetes/plugin/pkg/scheduler/factory" - "net/http/httptest" ) func TestCompatibility_v1_Scheduler(t *testing.T) { @@ -113,7 +115,7 @@ func TestCompatibility_v1_Scheduler(t *testing.T) { server := httptest.NewServer(&handler) // TODO: Uncomment when fix #19254 // defer server.Close() - client := client.NewOrDie(&client.Config{Host: server.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := client.NewOrDie(&restclient.Config{Host: server.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) if _, err := factory.NewConfigFactory(client, "some-scheduler-name").CreateFromConfig(policy); err != nil { t.Errorf("%s: Error constructing: %v", v, err) diff --git a/plugin/pkg/scheduler/api/types.go b/plugin/pkg/scheduler/api/types.go index 36ca11029a..89bbe63738 100644 --- a/plugin/pkg/scheduler/api/types.go +++ b/plugin/pkg/scheduler/api/types.go @@ -21,7 +21,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/unversioned" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" ) type Policy struct { @@ -124,7 +124,7 @@ type ExtenderConfig struct { // EnableHttps specifies whether https should be used to communicate with the extender EnableHttps bool `json:"enableHttps,omitempty"` // TLSConfig specifies the transport layer security config - TLSConfig *client.TLSClientConfig `json:"tlsConfig,omitempty"` + TLSConfig *restclient.TLSClientConfig `json:"tlsConfig,omitempty"` // HTTPTimeout specifies the timeout duration for a call to the extender. Filter timeout fails the scheduling of the pod. Prioritize // timeout is ignored, k8s/other extenders priorities are used to select the node. HTTPTimeout time.Duration `json:"httpTimeout,omitempty"` diff --git a/plugin/pkg/scheduler/api/v1/types.go b/plugin/pkg/scheduler/api/v1/types.go index ec67a90c8e..89618a56e8 100644 --- a/plugin/pkg/scheduler/api/v1/types.go +++ b/plugin/pkg/scheduler/api/v1/types.go @@ -21,7 +21,7 @@ import ( "k8s.io/kubernetes/pkg/api/unversioned" apiv1 "k8s.io/kubernetes/pkg/api/v1" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" ) type Policy struct { @@ -124,7 +124,7 @@ type ExtenderConfig struct { // EnableHttps specifies whether https should be used to communicate with the extender EnableHttps bool `json:"enableHttps,omitempty"` // TLSConfig specifies the transport layer security config - TLSConfig *client.TLSClientConfig `json:"tlsConfig,omitempty"` + TLSConfig *restclient.TLSClientConfig `json:"tlsConfig,omitempty"` // HTTPTimeout specifies the timeout duration for a call to the extender. Filter timeout fails the scheduling of the pod. Prioritize // timeout is ignored, k8s/other extenders priorities are used to select the node. HTTPTimeout time.Duration `json:"httpTimeout,omitempty"` diff --git a/plugin/pkg/scheduler/extender.go b/plugin/pkg/scheduler/extender.go index fafa5b1829..8a54aaf407 100644 --- a/plugin/pkg/scheduler/extender.go +++ b/plugin/pkg/scheduler/extender.go @@ -25,7 +25,7 @@ import ( "time" "k8s.io/kubernetes/pkg/api" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/plugin/pkg/scheduler/algorithm" schedulerapi "k8s.io/kubernetes/plugin/pkg/scheduler/api" ) @@ -45,7 +45,7 @@ type HTTPExtender struct { } func makeTransport(config *schedulerapi.ExtenderConfig) (http.RoundTripper, error) { - var cfg client.Config + var cfg restclient.Config if config.TLSConfig != nil { cfg.TLSClientConfig = *config.TLSConfig } @@ -55,7 +55,7 @@ func makeTransport(config *schedulerapi.ExtenderConfig) (http.RoundTripper, erro cfg.Insecure = true } } - tlsConfig, err := client.TLSConfigFor(&cfg) + tlsConfig, err := restclient.TLSConfigFor(&cfg) if err != nil { return nil, err } diff --git a/plugin/pkg/scheduler/factory/factory.go b/plugin/pkg/scheduler/factory/factory.go index 2a69bb052b..e03981dd4c 100644 --- a/plugin/pkg/scheduler/factory/factory.go +++ b/plugin/pkg/scheduler/factory/factory.go @@ -350,7 +350,7 @@ func (factory *ConfigFactory) createAssignedNonTerminatedPodLW() *cache.ListWatc // createNodeLW returns a cache.ListWatch that gets all changes to nodes. func (factory *ConfigFactory) createNodeLW() *cache.ListWatch { // TODO: Filter out nodes that doesn't have NodeReady condition. - fields := fields.Set{client.NodeUnschedulable: "false"}.AsSelector() + fields := fields.Set{api.NodeUnschedulableField: "false"}.AsSelector() return cache.NewListWatchFromClient(factory.Client, "nodes", api.NamespaceAll, fields) } diff --git a/plugin/pkg/scheduler/factory/factory_test.go b/plugin/pkg/scheduler/factory/factory_test.go index c97a79cc44..5d8963b006 100644 --- a/plugin/pkg/scheduler/factory/factory_test.go +++ b/plugin/pkg/scheduler/factory/factory_test.go @@ -27,6 +27,7 @@ import ( "k8s.io/kubernetes/pkg/api/testapi" apitesting "k8s.io/kubernetes/pkg/api/testing" "k8s.io/kubernetes/pkg/client/cache" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/types" @@ -46,7 +47,7 @@ func TestCreate(t *testing.T) { server := httptest.NewServer(&handler) // TODO: Uncomment when fix #19254 // defer server.Close() - client := client.NewOrDie(&client.Config{Host: server.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := client.NewOrDie(&restclient.Config{Host: server.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) factory := NewConfigFactory(client, api.DefaultSchedulerName) factory.Create() } @@ -65,7 +66,7 @@ func TestCreateFromConfig(t *testing.T) { server := httptest.NewServer(&handler) // TODO: Uncomment when fix #19254 // defer server.Close() - client := client.NewOrDie(&client.Config{Host: server.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := client.NewOrDie(&restclient.Config{Host: server.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) factory := NewConfigFactory(client, api.DefaultSchedulerName) // Pre-register some predicate and priority functions @@ -107,7 +108,7 @@ func TestCreateFromEmptyConfig(t *testing.T) { server := httptest.NewServer(&handler) // TODO: Uncomment when fix #19254 // defer server.Close() - client := client.NewOrDie(&client.Config{Host: server.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := client.NewOrDie(&restclient.Config{Host: server.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) factory := NewConfigFactory(client, api.DefaultSchedulerName) configData = []byte(`{}`) @@ -151,7 +152,7 @@ func TestDefaultErrorFunc(t *testing.T) { server := httptest.NewServer(mux) // TODO: Uncomment when fix #19254 // defer server.Close() - factory := NewConfigFactory(client.NewOrDie(&client.Config{Host: server.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}), api.DefaultSchedulerName) + factory := NewConfigFactory(client.NewOrDie(&restclient.Config{Host: server.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}), api.DefaultSchedulerName) queue := cache.NewFIFO(cache.MetaNamespaceKeyFunc) podBackoff := podBackoff{ perPodBackoff: map[types.NamespacedName]*backoffEntry{}, @@ -235,7 +236,7 @@ func TestBind(t *testing.T) { server := httptest.NewServer(&handler) // TODO: Uncomment when fix #19254 // defer server.Close() - client := client.NewOrDie(&client.Config{Host: server.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := client.NewOrDie(&restclient.Config{Host: server.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) b := binder{client} if err := b.Bind(item.binding); err != nil { @@ -321,7 +322,7 @@ func TestResponsibleForPod(t *testing.T) { server := httptest.NewServer(&handler) // TODO: Uncomment when fix #19254 // defer server.Close() - client := client.NewOrDie(&client.Config{Host: server.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := client.NewOrDie(&restclient.Config{Host: server.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) // factory of "default-scheduler" factoryDefaultScheduler := NewConfigFactory(client, api.DefaultSchedulerName) // factory of "foo-scheduler" diff --git a/test/component/scheduler/perf/util.go b/test/component/scheduler/perf/util.go index 49b6acaf65..7e4431b140 100644 --- a/test/component/scheduler/perf/util.go +++ b/test/component/scheduler/perf/util.go @@ -25,6 +25,7 @@ import ( "k8s.io/kubernetes/pkg/api/resource" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/client/record" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/master" "k8s.io/kubernetes/plugin/pkg/scheduler" @@ -53,9 +54,9 @@ func mustSetupScheduler() (schedulerConfigFactory *factory.ConfigFactory, destro m.Handler.ServeHTTP(w, req) })) - c := client.NewOrDie(&client.Config{ + c := client.NewOrDie(&restclient.Config{ Host: s.URL, - ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}, + ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}, QPS: 5000.0, Burst: 5000, }) diff --git a/test/e2e/kubelet_stats.go b/test/e2e/kubelet_stats.go index 63b991c811..0e4fc11777 100644 --- a/test/e2e/kubelet_stats.go +++ b/test/e2e/kubelet_stats.go @@ -32,6 +32,7 @@ import ( cadvisorapi "github.com/google/cadvisor/info/v1" "github.com/prometheus/common/model" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/kubelet/metrics" "k8s.io/kubernetes/pkg/kubelet/server/stats" @@ -337,12 +338,12 @@ type usageDataPerContainer struct { } // Performs a get on a node proxy endpoint given the nodename and rest client. -func nodeProxyRequest(c *client.Client, node, endpoint string) (client.Result, error) { +func nodeProxyRequest(c *client.Client, node, endpoint string) (restclient.Result, error) { subResourceProxyAvailable, err := serverVersionGTE(subResourceServiceAndNodeProxyVersion, c) if err != nil { - return client.Result{}, err + return restclient.Result{}, err } - var result client.Result + var result restclient.Result if subResourceProxyAvailable { result = c.Get(). Resource("nodes"). diff --git a/test/e2e/reboot.go b/test/e2e/reboot.go index a9d7958cbe..4851aaf0d5 100644 --- a/test/e2e/reboot.go +++ b/test/e2e/reboot.go @@ -208,7 +208,7 @@ func printStatusAndLogsForNotReadyPods(c *client.Client, ns string, podNames []s func rebootNode(c *client.Client, provider, name, rebootCmd string) bool { // Setup ns := api.NamespaceSystem - ps := newPodStore(c, ns, labels.Everything(), fields.OneTermEqualSelector(client.PodHost, name)) + ps := newPodStore(c, ns, labels.Everything(), fields.OneTermEqualSelector(api.PodHostField, name)) defer ps.Stop() // Get the node initially. diff --git a/test/e2e/resize_nodes.go b/test/e2e/resize_nodes.go index e839c0ee85..a08ad65ce3 100644 --- a/test/e2e/resize_nodes.go +++ b/test/e2e/resize_nodes.go @@ -590,7 +590,7 @@ var _ = Describe("Nodes [Disruptive]", func() { if !isNodeConditionSetAsExpected(&node, api.NodeReady, true) { return false } - podOpts = api.ListOptions{FieldSelector: fields.OneTermEqualSelector(client.PodHost, node.Name)} + podOpts = api.ListOptions{FieldSelector: fields.OneTermEqualSelector(api.PodHostField, node.Name)} pods, err := c.Pods(api.NamespaceAll).List(podOpts) if err != nil || len(pods.Items) <= 0 { return false @@ -601,7 +601,7 @@ var _ = Describe("Nodes [Disruptive]", func() { Failf("No eligible node were found: %d", len(nodes.Items)) } node := nodes.Items[0] - podOpts = api.ListOptions{FieldSelector: fields.OneTermEqualSelector(client.PodHost, node.Name)} + podOpts = api.ListOptions{FieldSelector: fields.OneTermEqualSelector(api.PodHostField, node.Name)} if err = waitForMatchPodsCondition(c, podOpts, "Running and Ready", podReadyTimeout, podRunningReady); err != nil { Failf("Pods on node %s are not ready and running within %v: %v", node.Name, podReadyTimeout, err) } diff --git a/test/e2e/util.go b/test/e2e/util.go index fb1dce4207..4ab6b6f7b0 100644 --- a/test/e2e/util.go +++ b/test/e2e/util.go @@ -42,6 +42,7 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/client/cache" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api" @@ -131,7 +132,7 @@ const ( var subResourcePodProxyVersion = version.MustParse("v1.1.0") var subResourceServiceAndNodeProxyVersion = version.MustParse("v1.2.0") -func getServicesProxyRequest(c *client.Client, request *client.Request) (*client.Request, error) { +func getServicesProxyRequest(c *client.Client, request *restclient.Request) (*restclient.Request, error) { subResourceProxyAvailable, err := serverVersionGTE(subResourceServiceAndNodeProxyVersion, c) if err != nil { return nil, err @@ -142,7 +143,7 @@ func getServicesProxyRequest(c *client.Client, request *client.Request) (*client return request.Prefix("proxy").Resource("services"), nil } -func GetServicesProxyRequest(c *client.Client, request *client.Request) (*client.Request, error) { +func GetServicesProxyRequest(c *client.Client, request *restclient.Request) (*restclient.Request, error) { return getServicesProxyRequest(c, request) } @@ -1185,7 +1186,7 @@ func serviceResponding(c *client.Client, ns, name string) error { }) } -func loadConfig() (*client.Config, error) { +func loadConfig() (*restclient.Config, error) { switch { case testContext.KubeConfig != "": Logf(">>> testContext.KubeConfig: %s\n", testContext.KubeConfig) @@ -1203,7 +1204,7 @@ func loadConfig() (*client.Config, error) { } } -func loadClientFromConfig(config *client.Config) (*client.Client, error) { +func loadClientFromConfig(config *restclient.Config) (*client.Client, error) { c, err := client.New(config) if err != nil { return nil, fmt.Errorf("error creating client: %v", err.Error()) @@ -2933,9 +2934,9 @@ func (rt *extractRT) RoundTrip(req *http.Request) (*http.Response, error) { // headersForConfig extracts any http client logic necessary for the provided // config. -func headersForConfig(c *client.Config) (http.Header, error) { +func headersForConfig(c *restclient.Config) (http.Header, error) { extract := &extractRT{} - rt, err := client.HTTPWrappersForConfig(c, extract) + rt, err := restclient.HTTPWrappersForConfig(c, extract) if err != nil { return nil, err } @@ -2947,8 +2948,8 @@ func headersForConfig(c *client.Config) (http.Header, error) { // OpenWebSocketForURL constructs a websocket connection to the provided URL, using the client // config, with the specified protocols. -func OpenWebSocketForURL(url *url.URL, config *client.Config, protocols []string) (*websocket.Conn, error) { - tlsConfig, err := client.TLSConfigFor(config) +func OpenWebSocketForURL(url *url.URL, config *restclient.Config, protocols []string) (*websocket.Conn, error) { + tlsConfig, err := restclient.TLSConfigFor(config) if err != nil { return nil, fmt.Errorf("failed to create tls config: %v", err) } diff --git a/test/e2e_node/conformance_test.go b/test/e2e_node/conformance_test.go index eadaddce71..33ab9c42a1 100644 --- a/test/e2e_node/conformance_test.go +++ b/test/e2e_node/conformance_test.go @@ -20,6 +20,7 @@ import ( "time" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" . "github.com/onsi/ginkgo" @@ -35,7 +36,7 @@ var _ = Describe("Container Conformance Test", func() { BeforeEach(func() { // Setup the apiserver client - cl = client.NewOrDie(&client.Config{Host: *apiServerAddress}) + cl = client.NewOrDie(&restclient.Config{Host: *apiServerAddress}) }) Describe("container conformance blackbox test", func() { diff --git a/test/e2e_node/kubelet_test.go b/test/e2e_node/kubelet_test.go index b041507b61..88b630a610 100644 --- a/test/e2e_node/kubelet_test.go +++ b/test/e2e_node/kubelet_test.go @@ -27,6 +27,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/stats" @@ -39,7 +40,7 @@ var _ = Describe("Kubelet", func() { var cl *client.Client BeforeEach(func() { // Setup the apiserver client - cl = client.NewOrDie(&client.Config{Host: *apiServerAddress}) + cl = client.NewOrDie(&restclient.Config{Host: *apiServerAddress}) }) Describe("pod scheduling", func() { diff --git a/test/integration/client_test.go b/test/integration/client_test.go index 7c67581783..b4324f5d16 100644 --- a/test/integration/client_test.go +++ b/test/integration/client_test.go @@ -29,6 +29,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/util/wait" @@ -44,7 +45,7 @@ func TestClient(t *testing.T) { ns := api.NamespaceDefault framework.DeleteAllEtcdKeys() - client := client.NewOrDie(&client.Config{Host: s.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := client.NewOrDie(&restclient.Config{Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) info, err := client.Discovery().ServerVersion() if err != nil { @@ -115,7 +116,7 @@ func TestSingleWatch(t *testing.T) { ns := "blargh" deleteAllEtcdKeys() - client := client.NewOrDie(&client.Config{Host: s.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := client.NewOrDie(&restclient.Config{Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) mkEvent := func(i int) *api.Event { name := fmt.Sprintf("event-%v", i) @@ -200,7 +201,7 @@ func TestMultiWatch(t *testing.T) { // defer s.Close() ns := api.NamespaceDefault - client := client.NewOrDie(&client.Config{Host: s.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := client.NewOrDie(&restclient.Config{Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) dummyEvent := func(i int) *api.Event { name := fmt.Sprintf("unrelated-%v", i) diff --git a/test/integration/configmap_test.go b/test/integration/configmap_test.go index 6a904d8a50..094881bcea 100644 --- a/test/integration/configmap_test.go +++ b/test/integration/configmap_test.go @@ -27,6 +27,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/master" "k8s.io/kubernetes/test/integration/framework" @@ -48,7 +49,7 @@ func TestConfigMap(t *testing.T) { } framework.DeleteAllEtcdKeys() - client := client.NewOrDie(&client.Config{Host: s.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := client.NewOrDie(&restclient.Config{Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) DoTestConfigMap(t, client) } diff --git a/test/integration/dynamic_client_test.go b/test/integration/dynamic_client_test.go index 1a18916fa6..02ef007c29 100644 --- a/test/integration/dynamic_client_test.go +++ b/test/integration/dynamic_client_test.go @@ -26,6 +26,7 @@ import ( "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/api/v1" + "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/typed/dynamic" uclient "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/runtime" @@ -38,9 +39,9 @@ func TestDynamicClient(t *testing.T) { framework.DeleteAllEtcdKeys() gv := testapi.Default.GroupVersion() - config := &uclient.Config{ + config := &restclient.Config{ Host: s.URL, - ContentConfig: uclient.ContentConfig{GroupVersion: gv}, + ContentConfig: restclient.ContentConfig{GroupVersion: gv}, } client := uclient.NewOrDie(config) diff --git a/test/integration/extender_test.go b/test/integration/extender_test.go index c3178c9d3a..3f28dbc02d 100644 --- a/test/integration/extender_test.go +++ b/test/integration/extender_test.go @@ -34,6 +34,7 @@ import ( "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/client/record" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/master" "k8s.io/kubernetes/pkg/util/wait" @@ -199,7 +200,7 @@ func TestSchedulerExtender(t *testing.T) { t.Fatalf("error in bringing up the master: %v", err) } - restClient := client.NewOrDie(&client.Config{Host: s.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + restClient := client.NewOrDie(&restclient.Config{Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) extender1 := &Extender{ name: "extender1", diff --git a/test/integration/framework/master_utils.go b/test/integration/framework/master_utils.go index 9091fd7e4b..4192562478 100644 --- a/test/integration/framework/master_utils.go +++ b/test/integration/framework/master_utils.go @@ -35,6 +35,7 @@ import ( "k8s.io/kubernetes/pkg/apiserver" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" "k8s.io/kubernetes/pkg/client/record" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/controller" replicationcontroller "k8s.io/kubernetes/pkg/controller/replication" @@ -104,8 +105,8 @@ func NewMasterComponents(c *Config) *MasterComponents { DeleteAllEtcdKeys() } // TODO: caesarxuchao: remove this client when the refactoring of client libraray is done. - restClient := client.NewOrDie(&client.Config{Host: s.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}, QPS: c.QPS, Burst: c.Burst}) - clientset := clientset.NewForConfigOrDie(&client.Config{Host: s.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}, QPS: c.QPS, Burst: c.Burst}) + restClient := client.NewOrDie(&restclient.Config{Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}, QPS: c.QPS, Burst: c.Burst}) + clientset := clientset.NewForConfigOrDie(&restclient.Config{Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}, QPS: c.QPS, Burst: c.Burst}) rcStopCh := make(chan struct{}) controllerManager := replicationcontroller.NewReplicationManager(clientset, controller.NoResyncPeriodFunc, c.Burst, 4096) @@ -271,7 +272,7 @@ func StartPods(numPods int, host string, restClient *client.Client) error { defer func() { glog.Infof("StartPods took %v with numPods %d", time.Since(start), numPods) }() - hostField := fields.OneTermEqualSelector(client.PodHost, host) + hostField := fields.OneTermEqualSelector(api.PodHostField, host) options := api.ListOptions{FieldSelector: hostField} pods, err := restClient.Pods(TestNS).List(options) if err != nil || len(pods.Items) == numPods { diff --git a/test/integration/metrics_test.go b/test/integration/metrics_test.go index 57bc1350f9..33ef7abd7f 100644 --- a/test/integration/metrics_test.go +++ b/test/integration/metrics_test.go @@ -27,6 +27,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/test/integration/framework" @@ -109,7 +110,7 @@ func TestApiserverMetrics(t *testing.T) { // Make a request to the apiserver to ensure there's at least one data point // for the metrics we're expecting -- otherwise, they won't be exported. - client := client.NewOrDie(&client.Config{Host: s.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := client.NewOrDie(&restclient.Config{Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) if _, err := client.Pods(api.NamespaceDefault).List(api.ListOptions{}); err != nil { t.Fatalf("unexpected error getting pods: %v", err) } diff --git a/test/integration/persistent_volumes_test.go b/test/integration/persistent_volumes_test.go index 4f81bb5698..6863ee5145 100644 --- a/test/integration/persistent_volumes_test.go +++ b/test/integration/persistent_volumes_test.go @@ -28,7 +28,7 @@ import ( "k8s.io/kubernetes/pkg/api/resource" "k8s.io/kubernetes/pkg/api/testapi" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" fake_cloud "k8s.io/kubernetes/pkg/cloudprovider/providers/fake" persistentvolumecontroller "k8s.io/kubernetes/pkg/controller/persistentvolume" "k8s.io/kubernetes/pkg/conversion" @@ -49,9 +49,9 @@ func TestPersistentVolumeRecycler(t *testing.T) { deleteAllEtcdKeys() // Use higher QPS and Burst, there is a test for race condition below, which // creates many claims and default values were too low. - binderClient := clientset.NewForConfigOrDie(&client.Config{Host: s.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}, QPS: 1000, Burst: 100000}) - recyclerClient := clientset.NewForConfigOrDie(&client.Config{Host: s.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}, QPS: 1000, Burst: 100000}) - testClient := clientset.NewForConfigOrDie(&client.Config{Host: s.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}, QPS: 1000, Burst: 100000}) + binderClient := clientset.NewForConfigOrDie(&restclient.Config{Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}, QPS: 1000, Burst: 100000}) + recyclerClient := clientset.NewForConfigOrDie(&restclient.Config{Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}, QPS: 1000, Burst: 100000}) + testClient := clientset.NewForConfigOrDie(&restclient.Config{Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}, QPS: 1000, Burst: 100000}) host := volume.NewFakeVolumeHost("/tmp/fake", nil, nil) plugins := []volume.VolumePlugin{&volume.FakeVolumePlugin{"plugin-name", host, volume.VolumeConfig{}, volume.VolumeOptions{}, 0, 0}} diff --git a/test/integration/pods.go b/test/integration/pods.go index 4d2970cf03..5743488b8e 100644 --- a/test/integration/pods.go +++ b/test/integration/pods.go @@ -26,6 +26,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/master" "k8s.io/kubernetes/test/integration/framework" @@ -47,7 +48,7 @@ func TestPodUpdateActiveDeadlineSeconds(t *testing.T) { } framework.DeleteAllEtcdKeys() - client := client.NewOrDie(&client.Config{Host: s.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := client.NewOrDie(&restclient.Config{Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) var ( iZero = int64(0) @@ -179,7 +180,7 @@ func TestPodReadOnlyFilesystem(t *testing.T) { } framework.DeleteAllEtcdKeys() - client := client.NewOrDie(&client.Config{Host: s.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := client.NewOrDie(&restclient.Config{Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) pod := &api.Pod{ ObjectMeta: api.ObjectMeta{ diff --git a/test/integration/scheduler_test.go b/test/integration/scheduler_test.go index 2573f45b99..4b41fe73f6 100644 --- a/test/integration/scheduler_test.go +++ b/test/integration/scheduler_test.go @@ -34,6 +34,7 @@ import ( "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/client/cache" "k8s.io/kubernetes/pkg/client/record" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/master" "k8s.io/kubernetes/pkg/util/wait" @@ -66,7 +67,7 @@ func TestUnschedulableNodes(t *testing.T) { t.Fatalf("Error in bringing up the master: %v", err) } - restClient := client.NewOrDie(&client.Config{Host: s.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + restClient := client.NewOrDie(&restclient.Config{Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) schedulerConfigFactory := factory.NewConfigFactory(restClient, api.DefaultSchedulerName) schedulerConfig, err := schedulerConfigFactory.Create() @@ -313,7 +314,7 @@ func TestMultiScheduler(t *testing.T) { - testPodNoAnnotation2 and testPodWithAnnotationFitsDefault2 shoule NOT be scheduled */ // 1. create and start default-scheduler - restClient := client.NewOrDie(&client.Config{Host: s.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + restClient := client.NewOrDie(&restclient.Config{Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) schedulerConfigFactory := factory.NewConfigFactory(restClient, api.DefaultSchedulerName) schedulerConfig, err := schedulerConfigFactory.Create() @@ -384,7 +385,7 @@ func TestMultiScheduler(t *testing.T) { } // 5. create and start a scheduler with name "foo-scheduler" - restClient2 := client.NewOrDie(&client.Config{Host: s.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + restClient2 := client.NewOrDie(&restclient.Config{Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) schedulerConfigFactory2 := factory.NewConfigFactory(restClient2, "foo-scheduler") schedulerConfig2, err := schedulerConfigFactory2.Create() @@ -473,7 +474,7 @@ func TestAllocatable(t *testing.T) { } // 1. create and start default-scheduler - restClient := client.NewOrDie(&client.Config{Host: s.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + restClient := client.NewOrDie(&restclient.Config{Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) schedulerConfigFactory := factory.NewConfigFactory(restClient, api.DefaultSchedulerName) schedulerConfig, err := schedulerConfigFactory.Create() diff --git a/test/integration/secret_test.go b/test/integration/secret_test.go index 6ae16b274b..32b8f7561f 100644 --- a/test/integration/secret_test.go +++ b/test/integration/secret_test.go @@ -27,6 +27,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" + "k8s.io/kubernetes/pkg/client/restclient" client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/master" "k8s.io/kubernetes/test/integration/framework" @@ -54,7 +55,7 @@ func TestSecrets(t *testing.T) { } framework.DeleteAllEtcdKeys() - client := client.NewOrDie(&client.Config{Host: s.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) + client := client.NewOrDie(&restclient.Config{Host: s.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}}) DoTestSecrets(t, client) } diff --git a/test/integration/service_account_test.go b/test/integration/service_account_test.go index 78a34beed1..e80e5783e4 100644 --- a/test/integration/service_account_test.go +++ b/test/integration/service_account_test.go @@ -39,7 +39,7 @@ import ( "k8s.io/kubernetes/pkg/auth/authorizer" "k8s.io/kubernetes/pkg/auth/user" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" - client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" serviceaccountcontroller "k8s.io/kubernetes/pkg/controller/serviceaccount" "k8s.io/kubernetes/pkg/master" "k8s.io/kubernetes/pkg/serviceaccount" @@ -335,7 +335,7 @@ func TestServiceAccountTokenAuthentication(t *testing.T) { // startServiceAccountTestServer returns a started server // It is the responsibility of the caller to ensure the returned stopFunc is called -func startServiceAccountTestServer(t *testing.T) (*clientset.Clientset, client.Config, func()) { +func startServiceAccountTestServer(t *testing.T) (*clientset.Clientset, restclient.Config, func()) { deleteAllEtcdKeys() @@ -346,10 +346,10 @@ func startServiceAccountTestServer(t *testing.T) (*clientset.Clientset, client.C })) // Anonymous client config - clientConfig := client.Config{Host: apiServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} + clientConfig := restclient.Config{Host: apiServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}} // Root client // TODO: remove rootClient after we refactor pkg/admission to use the clientset. - rootClientset := clientset.NewForConfigOrDie(&client.Config{Host: apiServer.URL, ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}, BearerToken: rootToken}) + rootClientset := clientset.NewForConfigOrDie(&restclient.Config{Host: apiServer.URL, ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()}, BearerToken: rootToken}) // Set up two authenticators: // 1. A token authenticator that maps the rootToken to the "root" user // 2. A ServiceAccountToken authenticator that validates ServiceAccount tokens