mirror of https://github.com/k3s-io/k3s
Merge pull request #21408 from krousey/unversioned_breakup
Move restclient to it's own packagepull/6/head
commit
4183ac174b
|
@ -37,6 +37,7 @@ import (
|
||||||
kapi "k8s.io/kubernetes/pkg/api"
|
kapi "k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
kcache "k8s.io/kubernetes/pkg/client/cache"
|
kcache "k8s.io/kubernetes/pkg/client/cache"
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
kclient "k8s.io/kubernetes/pkg/client/unversioned"
|
kclient "k8s.io/kubernetes/pkg/client/unversioned"
|
||||||
kclientcmd "k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
|
kclientcmd "k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
|
||||||
kframework "k8s.io/kubernetes/pkg/controller/framework"
|
kframework "k8s.io/kubernetes/pkg/controller/framework"
|
||||||
|
@ -466,7 +467,7 @@ func expandKubeMasterURL() (string, error) {
|
||||||
// TODO: evaluate using pkg/client/clientcmd
|
// TODO: evaluate using pkg/client/clientcmd
|
||||||
func newKubeClient() (*kclient.Client, error) {
|
func newKubeClient() (*kclient.Client, error) {
|
||||||
var (
|
var (
|
||||||
config *kclient.Config
|
config *restclient.Config
|
||||||
err error
|
err error
|
||||||
masterURL string
|
masterURL string
|
||||||
)
|
)
|
||||||
|
@ -480,9 +481,9 @@ func newKubeClient() (*kclient.Client, error) {
|
||||||
|
|
||||||
if masterURL != "" && *argKubecfgFile == "" {
|
if masterURL != "" && *argKubecfgFile == "" {
|
||||||
// Only --kube-master-url was provided.
|
// Only --kube-master-url was provided.
|
||||||
config = &kclient.Config{
|
config = &restclient.Config{
|
||||||
Host: masterURL,
|
Host: masterURL,
|
||||||
ContentConfig: kclient.ContentConfig{GroupVersion: &unversioned.GroupVersion{Version: "v1"}},
|
ContentConfig: restclient.ContentConfig{GroupVersion: &unversioned.GroupVersion{Version: "v1"}},
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// We either have:
|
// We either have:
|
||||||
|
|
|
@ -40,6 +40,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
||||||
"k8s.io/kubernetes/pkg/client/record"
|
"k8s.io/kubernetes/pkg/client/record"
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
client "k8s.io/kubernetes/pkg/client/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/controller"
|
"k8s.io/kubernetes/pkg/controller"
|
||||||
endpointcontroller "k8s.io/kubernetes/pkg/controller/endpoint"
|
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")
|
glog.Fatalf("Failed to connect to etcd")
|
||||||
}
|
}
|
||||||
|
|
||||||
cl := client.NewOrDie(&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(&client.Config{Host: apiServer.URL, ContentConfig: client.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.
|
// TODO: caesarxuchao: hacky way to specify version of Experimental client.
|
||||||
// We will fix this by supporting multiple group versions in Config
|
// 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
|
// Master
|
||||||
host, port, err := net.SplitHostPort(strings.TrimLeft(apiServer.URL, "http://"))
|
host, port, err := net.SplitHostPort(strings.TrimLeft(apiServer.URL, "http://"))
|
||||||
|
@ -993,10 +994,10 @@ func main() {
|
||||||
// Wait for the synchronization threads to come up.
|
// Wait for the synchronization threads to come up.
|
||||||
time.Sleep(time.Second * 10)
|
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.
|
// TODO: caesarxuchao: hacky way to specify version of Experimental client.
|
||||||
// We will fix this by supporting multiple group versions in Config
|
// 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
|
// Run tests in parallel
|
||||||
testFuncs := []testFunc{
|
testFuncs := []testFunc{
|
||||||
|
|
|
@ -44,7 +44,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/apiserver/authenticator"
|
"k8s.io/kubernetes/pkg/apiserver/authenticator"
|
||||||
"k8s.io/kubernetes/pkg/capabilities"
|
"k8s.io/kubernetes/pkg/capabilities"
|
||||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
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"
|
"k8s.io/kubernetes/pkg/cloudprovider"
|
||||||
serviceaccountcontroller "k8s.io/kubernetes/pkg/controller/serviceaccount"
|
serviceaccountcontroller "k8s.io/kubernetes/pkg/controller/serviceaccount"
|
||||||
"k8s.io/kubernetes/pkg/genericapiserver"
|
"k8s.io/kubernetes/pkg/genericapiserver"
|
||||||
|
@ -254,7 +254,7 @@ func Run(s *options.APIServer) error {
|
||||||
glog.Fatalf("error in parsing runtime-config: %s", err)
|
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)),
|
Host: net.JoinHostPort(s.InsecureBindAddress.String(), strconv.Itoa(s.InsecurePort)),
|
||||||
}
|
}
|
||||||
if len(s.DeprecatedStorageVersion) != 0 {
|
if len(s.DeprecatedStorageVersion) != 0 {
|
||||||
|
|
|
@ -39,6 +39,7 @@ import (
|
||||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
||||||
"k8s.io/kubernetes/pkg/client/leaderelection"
|
"k8s.io/kubernetes/pkg/client/leaderelection"
|
||||||
"k8s.io/kubernetes/pkg/client/record"
|
"k8s.io/kubernetes/pkg/client/record"
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
client "k8s.io/kubernetes/pkg/client/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
|
"k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
|
||||||
"k8s.io/kubernetes/pkg/cloudprovider"
|
"k8s.io/kubernetes/pkg/cloudprovider"
|
||||||
|
@ -180,19 +181,19 @@ func Run(s *options.CMServer) error {
|
||||||
panic("unreachable")
|
panic("unreachable")
|
||||||
}
|
}
|
||||||
|
|
||||||
func StartControllers(s *options.CMServer, kubeClient *client.Client, kubeconfig *client.Config, stop <-chan struct{}) error {
|
func StartControllers(s *options.CMServer, kubeClient *client.Client, kubeconfig *restclient.Config, stop <-chan struct{}) error {
|
||||||
go endpointcontroller.NewEndpointController(clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "endpoint-controller")), ResyncPeriod(s)).
|
go endpointcontroller.NewEndpointController(clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "endpoint-controller")), ResyncPeriod(s)).
|
||||||
Run(s.ConcurrentEndpointSyncs, wait.NeverStop)
|
Run(s.ConcurrentEndpointSyncs, wait.NeverStop)
|
||||||
|
|
||||||
go replicationcontroller.NewReplicationManager(
|
go replicationcontroller.NewReplicationManager(
|
||||||
clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "replication-controller")),
|
clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "replication-controller")),
|
||||||
ResyncPeriod(s),
|
ResyncPeriod(s),
|
||||||
replicationcontroller.BurstReplicas,
|
replicationcontroller.BurstReplicas,
|
||||||
s.LookupCacheSizeForRC,
|
s.LookupCacheSizeForRC,
|
||||||
).Run(s.ConcurrentRCSyncs, wait.NeverStop)
|
).Run(s.ConcurrentRCSyncs, wait.NeverStop)
|
||||||
|
|
||||||
if s.TerminatedPodGCThreshold > 0 {
|
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)
|
Run(wait.NeverStop)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -203,13 +204,13 @@ func StartControllers(s *options.CMServer, kubeClient *client.Client, kubeconfig
|
||||||
|
|
||||||
// this cidr has been validated already
|
// this cidr has been validated already
|
||||||
_, clusterCIDR, _ := net.ParseCIDR(s.ClusterCIDR)
|
_, 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),
|
s.PodEvictionTimeout.Duration, util.NewTokenBucketRateLimiter(s.DeletingPodsQps, s.DeletingPodsBurst),
|
||||||
util.NewTokenBucketRateLimiter(s.DeletingPodsQps, s.DeletingPodsBurst),
|
util.NewTokenBucketRateLimiter(s.DeletingPodsQps, s.DeletingPodsBurst),
|
||||||
s.NodeMonitorGracePeriod.Duration, s.NodeStartupGracePeriod.Duration, s.NodeMonitorPeriod.Duration, clusterCIDR, s.AllocateNodeCIDRs)
|
s.NodeMonitorGracePeriod.Duration, s.NodeStartupGracePeriod.Duration, s.NodeMonitorPeriod.Duration, clusterCIDR, s.AllocateNodeCIDRs)
|
||||||
nodeController.Run(s.NodeSyncPeriod.Duration)
|
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 {
|
if err := serviceController.Run(s.ServiceSyncPeriod.Duration, s.NodeSyncPeriod.Duration); err != nil {
|
||||||
glog.Errorf("Failed to start service controller: %v", err)
|
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 {
|
} 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.")
|
glog.Warning("allocate-node-cidrs is set, but cloud provider does not support routes. Will not manage routes.")
|
||||||
} else {
|
} 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)
|
routeController.Run(s.NodeSyncPeriod.Duration)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
glog.Infof("allocate-node-cidrs set to %v, node controller not creating routes", s.AllocateNodeCIDRs)
|
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)
|
resourceQuotaRegistry := quotainstall.NewRegistry(resourceQuotaControllerClient)
|
||||||
groupKindsToReplenish := []unversioned.GroupKind{
|
groupKindsToReplenish := []unversioned.GroupKind{
|
||||||
api.Kind("Pod"),
|
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.
|
// important when we start apiserver and controller manager at the same time.
|
||||||
var versionStrings []string
|
var versionStrings []string
|
||||||
err = wait.PollImmediate(time.Second, 10*time.Second, func() (bool, error) {
|
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
|
return true, nil
|
||||||
}
|
}
|
||||||
glog.Errorf("Failed to get api versions from server: %v", err)
|
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)
|
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)
|
go namespaceController.Run(s.ConcurrentNamespaceSyncs, wait.NeverStop)
|
||||||
|
|
||||||
groupVersion := "extensions/v1beta1"
|
groupVersion := "extensions/v1beta1"
|
||||||
|
@ -275,7 +276,7 @@ func StartControllers(s *options.CMServer, kubeClient *client.Client, kubeconfig
|
||||||
glog.Infof("Starting %s apis", groupVersion)
|
glog.Infof("Starting %s apis", groupVersion)
|
||||||
if containsResource(resources, "horizontalpodautoscalers") {
|
if containsResource(resources, "horizontalpodautoscalers") {
|
||||||
glog.Infof("Starting horizontal pod controller.")
|
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(
|
metricsClient := metrics.NewHeapsterMetricsClient(
|
||||||
hpaClient,
|
hpaClient,
|
||||||
metrics.DefaultHeapsterNamespace,
|
metrics.DefaultHeapsterNamespace,
|
||||||
|
@ -289,25 +290,25 @@ func StartControllers(s *options.CMServer, kubeClient *client.Client, kubeconfig
|
||||||
|
|
||||||
if containsResource(resources, "daemonsets") {
|
if containsResource(resources, "daemonsets") {
|
||||||
glog.Infof("Starting daemon set controller")
|
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)
|
Run(s.ConcurrentDaemonSetSyncs, wait.NeverStop)
|
||||||
}
|
}
|
||||||
|
|
||||||
if containsResource(resources, "jobs") {
|
if containsResource(resources, "jobs") {
|
||||||
glog.Infof("Starting job controller")
|
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)
|
Run(s.ConcurrentJobSyncs, wait.NeverStop)
|
||||||
}
|
}
|
||||||
|
|
||||||
if containsResource(resources, "deployments") {
|
if containsResource(resources, "deployments") {
|
||||||
glog.Infof("Starting deployment controller")
|
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)
|
Run(s.ConcurrentDeploymentSyncs, wait.NeverStop)
|
||||||
}
|
}
|
||||||
|
|
||||||
if containsResource(resources, "replicasets") {
|
if containsResource(resources, "replicasets") {
|
||||||
glog.Infof("Starting ReplicaSet controller")
|
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)
|
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.")
|
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()
|
pvclaimBinder.Run()
|
||||||
|
|
||||||
pvRecycler, err := persistentvolumecontroller.NewPersistentVolumeRecycler(
|
pvRecycler, err := persistentvolumecontroller.NewPersistentVolumeRecycler(
|
||||||
clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "persistent-volume-recycler")),
|
clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "persistent-volume-recycler")),
|
||||||
s.PVClaimBinderSyncPeriod.Duration,
|
s.PVClaimBinderSyncPeriod.Duration,
|
||||||
s.VolumeConfiguration.PersistentVolumeRecyclerConfiguration.MaximumRetry,
|
s.VolumeConfiguration.PersistentVolumeRecyclerConfiguration.MaximumRetry,
|
||||||
ProbeRecyclableVolumePlugins(s.VolumeConfiguration),
|
ProbeRecyclableVolumePlugins(s.VolumeConfiguration),
|
||||||
|
@ -334,7 +335,7 @@ func StartControllers(s *options.CMServer, kubeClient *client.Client, kubeconfig
|
||||||
pvRecycler.Run()
|
pvRecycler.Run()
|
||||||
|
|
||||||
if provisioner != nil {
|
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 {
|
if err != nil {
|
||||||
glog.Fatalf("Failed to start persistent volume provisioner controller: %+v", err)
|
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)
|
glog.Errorf("Error reading key for service account token controller: %v", err)
|
||||||
} else {
|
} else {
|
||||||
serviceaccountcontroller.NewTokensController(
|
serviceaccountcontroller.NewTokensController(
|
||||||
clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "tokens-controller")),
|
clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "tokens-controller")),
|
||||||
serviceaccountcontroller.TokensControllerOptions{
|
serviceaccountcontroller.TokensControllerOptions{
|
||||||
TokenGenerator: serviceaccount.JWTTokenGenerator(privateKey),
|
TokenGenerator: serviceaccount.JWTTokenGenerator(privateKey),
|
||||||
RootCA: rootCA,
|
RootCA: rootCA,
|
||||||
|
@ -371,7 +372,7 @@ func StartControllers(s *options.CMServer, kubeClient *client.Client, kubeconfig
|
||||||
}
|
}
|
||||||
|
|
||||||
serviceaccountcontroller.NewServiceAccountsController(
|
serviceaccountcontroller.NewServiceAccountsController(
|
||||||
clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "service-account-controller")),
|
clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "service-account-controller")),
|
||||||
serviceaccountcontroller.DefaultServiceAccountsControllerOptions(),
|
serviceaccountcontroller.DefaultServiceAccountsControllerOptions(),
|
||||||
).Run()
|
).Run()
|
||||||
|
|
||||||
|
|
|
@ -40,8 +40,8 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/client/chaosclient"
|
"k8s.io/kubernetes/pkg/client/chaosclient"
|
||||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
||||||
"k8s.io/kubernetes/pkg/client/record"
|
"k8s.io/kubernetes/pkg/client/record"
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
unversionedcore "k8s.io/kubernetes/pkg/client/typed/generated/core/unversioned"
|
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"
|
clientauth "k8s.io/kubernetes/pkg/client/unversioned/auth"
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
|
"k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
|
||||||
clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
|
clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
|
||||||
|
@ -394,7 +394,7 @@ func InitializeTLS(s *options.KubeletServer) (*server.TLSOptions, error) {
|
||||||
return tlsOptions, nil
|
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())
|
authInfo, err := clientauth.LoadFromFile(s.AuthPath.Value())
|
||||||
if err != nil && !useDefaults {
|
if err != nil && !useDefaults {
|
||||||
return nil, err
|
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 didn't load correctly - continue with defaults.
|
||||||
authInfo = &clientauth.Info{}
|
authInfo = &clientauth.Info{}
|
||||||
}
|
}
|
||||||
authConfig, err := authInfo.MergeWithConfig(client.Config{})
|
authConfig, err := authInfo.MergeWithConfig(restclient.Config{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -416,7 +416,7 @@ func authPathClientConfig(s *options.KubeletServer, useDefaults bool) (*client.C
|
||||||
return &authConfig, nil
|
return &authConfig, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func kubeconfigClientConfig(s *options.KubeletServer) (*client.Config, error) {
|
func kubeconfigClientConfig(s *options.KubeletServer) (*restclient.Config, error) {
|
||||||
return clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
|
return clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
|
||||||
&clientcmd.ClientConfigLoadingRules{ExplicitPath: s.KubeConfig.Value()},
|
&clientcmd.ClientConfigLoadingRules{ExplicitPath: s.KubeConfig.Value()},
|
||||||
&clientcmd.ConfigOverrides{ClusterInfo: clientcmdapi.Cluster{Server: s.APIServerList[0]}}).ClientConfig()
|
&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
|
// to load the default kubeconfig file, then the default auth path file, and
|
||||||
// fall back to the default auth (none) without an error.
|
// fall back to the default auth (none) without an error.
|
||||||
// TODO(roberthbailey): Remove support for --auth-path
|
// 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() {
|
if s.KubeConfig.Provided() && s.AuthPath.Provided() {
|
||||||
return nil, fmt.Errorf("cannot specify both --kubeconfig and --auth-path")
|
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
|
// including api-server-list, via createClientConfig and then injects chaos into
|
||||||
// the configuration via addChaosToClientConfig. This func is exported to support
|
// the configuration via addChaosToClientConfig. This func is exported to support
|
||||||
// integration with third party kubelet extensions (e.g. kubernetes-mesos).
|
// 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 {
|
if len(s.APIServerList) < 1 {
|
||||||
return nil, fmt.Errorf("no api servers specified")
|
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.
|
// 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 {
|
if s.ChaosChance != 0.0 {
|
||||||
config.WrapTransport = func(rt http.RoundTripper) http.RoundTripper {
|
config.WrapTransport = func(rt http.RoundTripper) http.RoundTripper {
|
||||||
seed := chaosclient.NewSeed(1)
|
seed := chaosclient.NewSeed(1)
|
||||||
|
|
|
@ -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.
|
// perhaps we can adapt the go2ild framework to this kind of usage.
|
||||||
sw := generator.NewSnippetWriter(w, c, "$", "$")
|
sw := generator.NewSnippetWriter(w, c, "$", "$")
|
||||||
const pkgUnversioned = "k8s.io/kubernetes/pkg/client/unversioned"
|
const pkgUnversioned = "k8s.io/kubernetes/pkg/client/unversioned"
|
||||||
|
const pkgRESTClient = "k8s.io/kubernetes/pkg/client/restclient"
|
||||||
|
|
||||||
type arg struct {
|
type arg struct {
|
||||||
Group string
|
Group string
|
||||||
|
@ -85,9 +86,9 @@ func (g *genClientset) GenerateType(c *generator.Context, t *types.Type, w io.Wr
|
||||||
|
|
||||||
m := map[string]interface{}{
|
m := map[string]interface{}{
|
||||||
"allGroups": allGroups,
|
"allGroups": allGroups,
|
||||||
"Config": c.Universe.Type(types.Name{Package: pkgUnversioned, Name: "Config"}),
|
"Config": c.Universe.Type(types.Name{Package: pkgRESTClient, Name: "Config"}),
|
||||||
"DefaultKubernetesUserAgent": c.Universe.Function(types.Name{Package: pkgUnversioned, Name: "DefaultKubernetesUserAgent"}),
|
"DefaultKubernetesUserAgent": c.Universe.Function(types.Name{Package: pkgRESTClient, Name: "DefaultKubernetesUserAgent"}),
|
||||||
"RESTClient": c.Universe.Type(types.Name{Package: pkgUnversioned, Name: "RESTClient"}),
|
"RESTClient": c.Universe.Type(types.Name{Package: pkgRESTClient, Name: "RESTClient"}),
|
||||||
"DiscoveryInterface": c.Universe.Type(types.Name{Package: pkgUnversioned, Name: "DiscoveryInterface"}),
|
"DiscoveryInterface": c.Universe.Type(types.Name{Package: pkgUnversioned, Name: "DiscoveryInterface"}),
|
||||||
"DiscoveryClient": c.Universe.Type(types.Name{Package: pkgUnversioned, Name: "DiscoveryClient"}),
|
"DiscoveryClient": c.Universe.Type(types.Name{Package: pkgUnversioned, Name: "DiscoveryClient"}),
|
||||||
"NewDiscoveryClientForConfig": c.Universe.Function(types.Name{Package: pkgUnversioned, Name: "NewDiscoveryClientForConfig"}),
|
"NewDiscoveryClientForConfig": c.Universe.Function(types.Name{Package: pkgUnversioned, Name: "NewDiscoveryClientForConfig"}),
|
||||||
|
|
|
@ -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 {
|
func (g *genGroup) GenerateType(c *generator.Context, t *types.Type, w io.Writer) error {
|
||||||
sw := generator.NewSnippetWriter(w, c, "$", "$")
|
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 pkgRegistered = "k8s.io/kubernetes/pkg/apimachinery/registered"
|
||||||
const pkgAPI = "k8s.io/kubernetes/pkg/api"
|
const pkgAPI = "k8s.io/kubernetes/pkg/api"
|
||||||
apiPath := func(group string) string {
|
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),
|
"Group": namer.IC(g.group),
|
||||||
"canonicalGroup": canonize(g.group),
|
"canonicalGroup": canonize(g.group),
|
||||||
"types": g.types,
|
"types": g.types,
|
||||||
"Config": c.Universe.Type(types.Name{Package: pkgUnversioned, Name: "Config"}),
|
"Config": c.Universe.Type(types.Name{Package: pkgRESTClient, Name: "Config"}),
|
||||||
"DefaultKubernetesUserAgent": c.Universe.Function(types.Name{Package: pkgUnversioned, Name: "DefaultKubernetesUserAgent"}),
|
"DefaultKubernetesUserAgent": c.Universe.Function(types.Name{Package: pkgRESTClient, Name: "DefaultKubernetesUserAgent"}),
|
||||||
"RESTClient": c.Universe.Type(types.Name{Package: pkgUnversioned, Name: "RESTClient"}),
|
"RESTClient": c.Universe.Type(types.Name{Package: pkgRESTClient, Name: "RESTClient"}),
|
||||||
"RESTClientFor": c.Universe.Function(types.Name{Package: pkgUnversioned, Name: "RESTClientFor"}),
|
"RESTClientFor": c.Universe.Function(types.Name{Package: pkgRESTClient, Name: "RESTClientFor"}),
|
||||||
"latestGroup": c.Universe.Variable(types.Name{Package: pkgRegistered, Name: "Group"}),
|
"latestGroup": c.Universe.Variable(types.Name{Package: pkgRegistered, Name: "Group"}),
|
||||||
"GroupOrDie": c.Universe.Variable(types.Name{Package: pkgRegistered, Name: "GroupOrDie"}),
|
"GroupOrDie": c.Universe.Variable(types.Name{Package: pkgRegistered, Name: "GroupOrDie"}),
|
||||||
"apiPath": apiPath(g.group),
|
"apiPath": apiPath(g.group),
|
||||||
|
|
|
@ -19,6 +19,7 @@ package test_internalclientset
|
||||||
import (
|
import (
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
unversionedtestgroup "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/testoutput/testgroup/unversioned"
|
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"
|
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.
|
// 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 clientset Clientset
|
||||||
var err error
|
var err error
|
||||||
clientset.TestgroupClient, err = unversionedtestgroup.NewForConfig(c)
|
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
|
// NewForConfigOrDie creates a new Clientset for the given config and
|
||||||
// panics if there is an error in the config.
|
// panics if there is an error in the config.
|
||||||
func NewForConfigOrDie(c *unversioned.Config) *Clientset {
|
func NewForConfigOrDie(c *restclient.Config) *Clientset {
|
||||||
var clientset Clientset
|
var clientset Clientset
|
||||||
clientset.TestgroupClient = unversionedtestgroup.NewForConfigOrDie(c)
|
clientset.TestgroupClient = unversionedtestgroup.NewForConfigOrDie(c)
|
||||||
|
|
||||||
|
@ -71,7 +72,7 @@ func NewForConfigOrDie(c *unversioned.Config) *Clientset {
|
||||||
}
|
}
|
||||||
|
|
||||||
// New creates a new Clientset for the given RESTClient.
|
// New creates a new Clientset for the given RESTClient.
|
||||||
func New(c *unversioned.RESTClient) *Clientset {
|
func New(c *restclient.RESTClient) *Clientset {
|
||||||
var clientset Clientset
|
var clientset Clientset
|
||||||
clientset.TestgroupClient = unversionedtestgroup.New(c)
|
clientset.TestgroupClient = unversionedtestgroup.New(c)
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ package unversioned
|
||||||
import (
|
import (
|
||||||
api "k8s.io/kubernetes/pkg/api"
|
api "k8s.io/kubernetes/pkg/api"
|
||||||
registered "k8s.io/kubernetes/pkg/apimachinery/registered"
|
registered "k8s.io/kubernetes/pkg/apimachinery/registered"
|
||||||
unversioned "k8s.io/kubernetes/pkg/client/unversioned"
|
restclient "k8s.io/kubernetes/pkg/client/restclient"
|
||||||
)
|
)
|
||||||
|
|
||||||
type TestgroupInterface interface {
|
type TestgroupInterface interface {
|
||||||
|
@ -28,7 +28,7 @@ type TestgroupInterface interface {
|
||||||
|
|
||||||
// TestgroupClient is used to interact with features provided by the Testgroup group.
|
// TestgroupClient is used to interact with features provided by the Testgroup group.
|
||||||
type TestgroupClient struct {
|
type TestgroupClient struct {
|
||||||
*unversioned.RESTClient
|
*restclient.RESTClient
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *TestgroupClient) TestTypes(namespace string) TestTypeInterface {
|
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.
|
// 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
|
config := *c
|
||||||
if err := setConfigDefaults(&config); err != nil {
|
if err := setConfigDefaults(&config); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
client, err := unversioned.RESTClientFor(&config)
|
client, err := restclient.RESTClientFor(&config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,7 @@ func NewForConfig(c *unversioned.Config) (*TestgroupClient, error) {
|
||||||
|
|
||||||
// NewForConfigOrDie creates a new TestgroupClient for the given config and
|
// NewForConfigOrDie creates a new TestgroupClient for the given config and
|
||||||
// panics if there is an error in the config.
|
// 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)
|
client, err := NewForConfig(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
@ -59,11 +59,11 @@ func NewForConfigOrDie(c *unversioned.Config) *TestgroupClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
// New creates a new TestgroupClient for the given RESTClient.
|
// New creates a new TestgroupClient for the given RESTClient.
|
||||||
func New(c *unversioned.RESTClient) *TestgroupClient {
|
func New(c *restclient.RESTClient) *TestgroupClient {
|
||||||
return &TestgroupClient{c}
|
return &TestgroupClient{c}
|
||||||
}
|
}
|
||||||
|
|
||||||
func setConfigDefaults(config *unversioned.Config) error {
|
func setConfigDefaults(config *restclient.Config) error {
|
||||||
// if testgroup group is not registered, return an error
|
// if testgroup group is not registered, return an error
|
||||||
g, err := registered.Group("testgroup")
|
g, err := registered.Group("testgroup")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -71,7 +71,7 @@ func setConfigDefaults(config *unversioned.Config) error {
|
||||||
}
|
}
|
||||||
config.APIPath = "/apis"
|
config.APIPath = "/apis"
|
||||||
if config.UserAgent == "" {
|
if config.UserAgent == "" {
|
||||||
config.UserAgent = unversioned.DefaultKubernetesUserAgent()
|
config.UserAgent = restclient.DefaultKubernetesUserAgent()
|
||||||
}
|
}
|
||||||
// TODO: Unconditionally set the config.Version, until we fix the config.
|
// TODO: Unconditionally set the config.Version, until we fix the config.
|
||||||
//if config.Version == "" {
|
//if config.Version == "" {
|
||||||
|
|
|
@ -28,7 +28,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
"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/client/unversioned/testclient/simple"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
)
|
)
|
||||||
|
@ -54,7 +54,7 @@ type DecoratedSimpleClient struct {
|
||||||
func (c *DecoratedSimpleClient) Setup(t *testing.T) *DecoratedSimpleClient {
|
func (c *DecoratedSimpleClient) Setup(t *testing.T) *DecoratedSimpleClient {
|
||||||
c.simpleClient.Setup(t)
|
c.simpleClient.Setup(t)
|
||||||
url := c.simpleClient.ServerURL()
|
url := c.simpleClient.ServerURL()
|
||||||
c.TestgroupClient = NewForConfigOrDie(&client.Config{
|
c.TestgroupClient = NewForConfigOrDie(&restclient.Config{
|
||||||
Host: url,
|
Host: url,
|
||||||
})
|
})
|
||||||
return c
|
return c
|
||||||
|
|
|
@ -31,6 +31,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
client "k8s.io/kubernetes/pkg/client/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
|
"k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
|
||||||
clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
|
clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
|
||||||
|
@ -130,14 +131,14 @@ func (s *CMServer) Run(_ []string) error {
|
||||||
glog.Fatal(server.ListenAndServe())
|
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 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)
|
Run(s.ConcurrentRCSyncs, wait.NeverStop)
|
||||||
|
|
||||||
if s.TerminatedPodGCThreshold > 0 {
|
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)
|
Run(wait.NeverStop)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -150,18 +151,18 @@ func (s *CMServer) Run(_ []string) error {
|
||||||
glog.Fatalf("Cloud provider could not be initialized: %v", err)
|
glog.Fatalf("Cloud provider could not be initialized: %v", err)
|
||||||
}
|
}
|
||||||
_, clusterCIDR, _ := net.ParseCIDR(s.ClusterCIDR)
|
_, 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),
|
s.PodEvictionTimeout.Duration, util.NewTokenBucketRateLimiter(s.DeletingPodsQps, s.DeletingPodsBurst),
|
||||||
util.NewTokenBucketRateLimiter(s.DeletingPodsQps, s.DeletingPodsBurst),
|
util.NewTokenBucketRateLimiter(s.DeletingPodsQps, s.DeletingPodsBurst),
|
||||||
s.NodeMonitorGracePeriod.Duration, s.NodeStartupGracePeriod.Duration, s.NodeMonitorPeriod.Duration, clusterCIDR, s.AllocateNodeCIDRs)
|
s.NodeMonitorGracePeriod.Duration, s.NodeStartupGracePeriod.Duration, s.NodeMonitorPeriod.Duration, clusterCIDR, s.AllocateNodeCIDRs)
|
||||||
nodeController.Run(s.NodeSyncPeriod.Duration)
|
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 {
|
if err := nodeStatusUpdaterController.Run(wait.NeverStop); err != nil {
|
||||||
glog.Fatalf("Failed to start node status update controller: %v", err)
|
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 {
|
if err := serviceController.Run(s.ServiceSyncPeriod.Duration, s.NodeSyncPeriod.Duration); err != nil {
|
||||||
glog.Errorf("Failed to start service controller: %v", err)
|
glog.Errorf("Failed to start service controller: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -171,11 +172,11 @@ func (s *CMServer) Run(_ []string) error {
|
||||||
if !ok {
|
if !ok {
|
||||||
glog.Fatal("Cloud provider must support routes if allocate-node-cidrs is set")
|
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)
|
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)
|
resourceQuotaRegistry := quotainstall.NewRegistry(resourceQuotaControllerClient)
|
||||||
groupKindsToReplenish := []unversioned.GroupKind{
|
groupKindsToReplenish := []unversioned.GroupKind{
|
||||||
api.Kind("Pod"),
|
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.
|
// important when we start apiserver and controller manager at the same time.
|
||||||
var versionStrings []string
|
var versionStrings []string
|
||||||
err = wait.PollImmediate(time.Second, 10*time.Second, func() (bool, error) {
|
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
|
return true, nil
|
||||||
}
|
}
|
||||||
glog.Errorf("Failed to get api versions from server: %v", err)
|
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)
|
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)
|
go namespaceController.Run(s.ConcurrentNamespaceSyncs, wait.NeverStop)
|
||||||
|
|
||||||
groupVersion := "extensions/v1beta1"
|
groupVersion := "extensions/v1beta1"
|
||||||
|
@ -223,7 +224,7 @@ func (s *CMServer) Run(_ []string) error {
|
||||||
glog.Infof("Starting %s apis", groupVersion)
|
glog.Infof("Starting %s apis", groupVersion)
|
||||||
if containsResource(resources, "horizontalpodautoscalers") {
|
if containsResource(resources, "horizontalpodautoscalers") {
|
||||||
glog.Infof("Starting horizontal pod controller.")
|
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(
|
metricsClient := metrics.NewHeapsterMetricsClient(
|
||||||
hpaClient,
|
hpaClient,
|
||||||
metrics.DefaultHeapsterNamespace,
|
metrics.DefaultHeapsterNamespace,
|
||||||
|
@ -237,25 +238,25 @@ func (s *CMServer) Run(_ []string) error {
|
||||||
|
|
||||||
if containsResource(resources, "daemonsets") {
|
if containsResource(resources, "daemonsets") {
|
||||||
glog.Infof("Starting daemon set controller")
|
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)
|
Run(s.ConcurrentDaemonSetSyncs, wait.NeverStop)
|
||||||
}
|
}
|
||||||
|
|
||||||
if containsResource(resources, "jobs") {
|
if containsResource(resources, "jobs") {
|
||||||
glog.Infof("Starting job controller")
|
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)
|
Run(s.ConcurrentJobSyncs, wait.NeverStop)
|
||||||
}
|
}
|
||||||
|
|
||||||
if containsResource(resources, "deployments") {
|
if containsResource(resources, "deployments") {
|
||||||
glog.Infof("Starting deployment controller")
|
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)
|
Run(s.ConcurrentDeploymentSyncs, wait.NeverStop)
|
||||||
}
|
}
|
||||||
|
|
||||||
if containsResource(resources, "replicasets") {
|
if containsResource(resources, "replicasets") {
|
||||||
glog.Infof("Starting ReplicaSet controller")
|
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)
|
Run(s.ConcurrentRSSyncs, wait.NeverStop)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -267,13 +268,13 @@ func (s *CMServer) Run(_ []string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
pvclaimBinder := persistentvolumecontroller.NewPersistentVolumeClaimBinder(
|
pvclaimBinder := persistentvolumecontroller.NewPersistentVolumeClaimBinder(
|
||||||
clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "persistent-volume-binder")),
|
clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "persistent-volume-binder")),
|
||||||
s.PVClaimBinderSyncPeriod.Duration,
|
s.PVClaimBinderSyncPeriod.Duration,
|
||||||
)
|
)
|
||||||
pvclaimBinder.Run()
|
pvclaimBinder.Run()
|
||||||
|
|
||||||
pvRecycler, err := persistentvolumecontroller.NewPersistentVolumeRecycler(
|
pvRecycler, err := persistentvolumecontroller.NewPersistentVolumeRecycler(
|
||||||
clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "persistent-volume-recycler")),
|
clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "persistent-volume-recycler")),
|
||||||
s.PVClaimBinderSyncPeriod.Duration,
|
s.PVClaimBinderSyncPeriod.Duration,
|
||||||
s.VolumeConfiguration.PersistentVolumeRecyclerConfiguration.MaximumRetry,
|
s.VolumeConfiguration.PersistentVolumeRecyclerConfiguration.MaximumRetry,
|
||||||
kubecontrollermanager.ProbeRecyclableVolumePlugins(s.VolumeConfiguration),
|
kubecontrollermanager.ProbeRecyclableVolumePlugins(s.VolumeConfiguration),
|
||||||
|
@ -285,7 +286,7 @@ func (s *CMServer) Run(_ []string) error {
|
||||||
pvRecycler.Run()
|
pvRecycler.Run()
|
||||||
|
|
||||||
if provisioner != nil {
|
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 {
|
if err != nil {
|
||||||
glog.Fatalf("Failed to start persistent volume provisioner controller: %+v", err)
|
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)
|
glog.Errorf("Error reading key for service account token controller: %v", err)
|
||||||
} else {
|
} else {
|
||||||
serviceaccountcontroller.NewTokensController(
|
serviceaccountcontroller.NewTokensController(
|
||||||
clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "tokens-controller")),
|
clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "tokens-controller")),
|
||||||
serviceaccountcontroller.TokensControllerOptions{
|
serviceaccountcontroller.TokensControllerOptions{
|
||||||
TokenGenerator: serviceaccount.JWTTokenGenerator(privateKey),
|
TokenGenerator: serviceaccount.JWTTokenGenerator(privateKey),
|
||||||
RootCA: rootCA,
|
RootCA: rootCA,
|
||||||
|
@ -322,7 +323,7 @@ func (s *CMServer) Run(_ []string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
serviceaccountcontroller.NewServiceAccountsController(
|
serviceaccountcontroller.NewServiceAccountsController(
|
||||||
clientset.NewForConfigOrDie(client.AddUserAgent(kubeconfig, "service-account-controller")),
|
clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "service-account-controller")),
|
||||||
serviceaccountcontroller.DefaultServiceAccountsControllerOptions(),
|
serviceaccountcontroller.DefaultServiceAccountsControllerOptions(),
|
||||||
).Run()
|
).Run()
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,6 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/client/cache"
|
"k8s.io/kubernetes/pkg/client/cache"
|
||||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
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/fields"
|
||||||
"k8s.io/kubernetes/pkg/kubelet"
|
"k8s.io/kubernetes/pkg/kubelet"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm"
|
"k8s.io/kubernetes/pkg/kubelet/cm"
|
||||||
|
@ -295,7 +294,7 @@ func (s *KubeletExecutorServer) Run(hks hyperkube.Interface, _ []string) error {
|
||||||
|
|
||||||
var (
|
var (
|
||||||
pw = cache.NewListWatchFromClient(apiclient.CoreClient, "pods", api.NamespaceAll,
|
pw = cache.NewListWatchFromClient(apiclient.CoreClient, "pods", api.NamespaceAll,
|
||||||
fields.OneTermEqualSelector(client.PodHost, s.HostnameOverride),
|
fields.OneTermEqualSelector(api.PodHostField, s.HostnameOverride),
|
||||||
)
|
)
|
||||||
reg = executor.NewRegistry(apiclient)
|
reg = executor.NewRegistry(apiclient)
|
||||||
)
|
)
|
||||||
|
|
|
@ -27,18 +27,17 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
"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"
|
kubeletapp "k8s.io/kubernetes/cmd/kubelet/app"
|
||||||
exservice "k8s.io/kubernetes/contrib/mesos/pkg/executor/service"
|
exservice "k8s.io/kubernetes/contrib/mesos/pkg/executor/service"
|
||||||
"k8s.io/kubernetes/contrib/mesos/pkg/hyperkube"
|
"k8s.io/kubernetes/contrib/mesos/pkg/hyperkube"
|
||||||
"k8s.io/kubernetes/contrib/mesos/pkg/minion/config"
|
"k8s.io/kubernetes/contrib/mesos/pkg/minion/config"
|
||||||
"k8s.io/kubernetes/contrib/mesos/pkg/minion/tasks"
|
"k8s.io/kubernetes/contrib/mesos/pkg/minion/tasks"
|
||||||
"k8s.io/kubernetes/pkg/api/resource"
|
"k8s.io/kubernetes/pkg/api/resource"
|
||||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
|
|
||||||
log "github.com/golang/glog"
|
|
||||||
"github.com/kardianos/osext"
|
|
||||||
"github.com/spf13/pflag"
|
|
||||||
"gopkg.in/natefinch/lumberjack.v2"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -53,7 +52,7 @@ type MinionServer struct {
|
||||||
|
|
||||||
privateMountNS bool
|
privateMountNS bool
|
||||||
hks hyperkube.Interface
|
hks hyperkube.Interface
|
||||||
clientConfig *client.Config
|
clientConfig *restclient.Config
|
||||||
kmBinary string
|
kmBinary string
|
||||||
tasks []*tasks.Task
|
tasks []*tasks.Task
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/client/cache"
|
"k8s.io/kubernetes/pkg/client/cache"
|
||||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
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/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util/wait"
|
"k8s.io/kubernetes/pkg/util/wait"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
|
@ -490,9 +490,9 @@ func newLifecycleTest(t *testing.T) lifecycleTest {
|
||||||
ei.Data = []byte{0, 1, 2}
|
ei.Data = []byte{0, 1, 2}
|
||||||
|
|
||||||
// create framework
|
// create framework
|
||||||
client := clientset.NewForConfigOrDie(&client.Config{
|
client := clientset.NewForConfigOrDie(&restclient.Config{
|
||||||
Host: apiServer.server.URL,
|
Host: apiServer.server.URL,
|
||||||
ContentConfig: client.ContentConfig{GroupVersion: testapi.Default.GroupVersion()},
|
ContentConfig: restclient.ContentConfig{GroupVersion: testapi.Default.GroupVersion()},
|
||||||
})
|
})
|
||||||
c := *schedcfg.CreateDefaultConfig()
|
c := *schedcfg.CreateDefaultConfig()
|
||||||
fw := framework.New(framework.Config{
|
fw := framework.New(framework.Config{
|
||||||
|
|
|
@ -74,8 +74,8 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/client/cache"
|
"k8s.io/kubernetes/pkg/client/cache"
|
||||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
||||||
"k8s.io/kubernetes/pkg/client/record"
|
"k8s.io/kubernetes/pkg/client/record"
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
unversionedcore "k8s.io/kubernetes/pkg/client/typed/generated/core/unversioned"
|
unversionedcore "k8s.io/kubernetes/pkg/client/typed/generated/core/unversioned"
|
||||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
|
"k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
|
||||||
cloud "k8s.io/kubernetes/pkg/cloudprovider/providers/mesos"
|
cloud "k8s.io/kubernetes/pkg/cloudprovider/providers/mesos"
|
||||||
controllerfw "k8s.io/kubernetes/pkg/controller/framework"
|
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
|
// 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)
|
kubeconfig, err := clientcmd.BuildConfigFromFlags(s.apiServerList[0], s.kubeconfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
@ -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"
|
||||||
|
)
|
|
@ -20,7 +20,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"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/fields"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
|
@ -42,7 +42,7 @@ type ListWatch struct {
|
||||||
|
|
||||||
// Getter interface knows how to access Get method from RESTClient.
|
// Getter interface knows how to access Get method from RESTClient.
|
||||||
type Getter interface {
|
type Getter interface {
|
||||||
Get() *client.Request
|
Get() *restclient.Request
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewListWatchFromClient creates a new ListWatch from the specified client, resource, namespace and field selector.
|
// NewListWatchFromClient creates a new ListWatch from the specified client, resource, namespace and field selector.
|
||||||
|
|
|
@ -24,6 +24,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
client "k8s.io/kubernetes/pkg/client/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/fields"
|
||||||
utiltesting "k8s.io/kubernetes/pkg/util/testing"
|
utiltesting "k8s.io/kubernetes/pkg/util/testing"
|
||||||
|
@ -97,7 +98,7 @@ func TestListWatchesCanList(t *testing.T) {
|
||||||
server := httptest.NewServer(&handler)
|
server := httptest.NewServer(&handler)
|
||||||
// TODO: Uncomment when fix #19254
|
// TODO: Uncomment when fix #19254
|
||||||
// defer server.Close()
|
// 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)
|
lw := NewListWatchFromClient(client, item.resource, item.namespace, item.fieldSelector)
|
||||||
// This test merely tests that the correct request is made.
|
// This test merely tests that the correct request is made.
|
||||||
lw.List(api.ListOptions{})
|
lw.List(api.ListOptions{})
|
||||||
|
@ -164,7 +165,7 @@ func TestListWatchesCanWatch(t *testing.T) {
|
||||||
server := httptest.NewServer(&handler)
|
server := httptest.NewServer(&handler)
|
||||||
// TODO: Uncomment when fix #19254
|
// TODO: Uncomment when fix #19254
|
||||||
// defer server.Close()
|
// 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)
|
lw := NewListWatchFromClient(client, item.resource, item.namespace, item.fieldSelector)
|
||||||
// This test merely tests that the correct request is made.
|
// This test merely tests that the correct request is made.
|
||||||
lw.Watch(api.ListOptions{ResourceVersion: item.rv})
|
lw.Watch(api.ListOptions{ResourceVersion: item.rv})
|
||||||
|
|
|
@ -18,6 +18,7 @@ package internalclientset
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
|
restclient "k8s.io/kubernetes/pkg/client/restclient"
|
||||||
unversionedcore "k8s.io/kubernetes/pkg/client/typed/generated/core/unversioned"
|
unversionedcore "k8s.io/kubernetes/pkg/client/typed/generated/core/unversioned"
|
||||||
unversionedextensions "k8s.io/kubernetes/pkg/client/typed/generated/extensions/unversioned"
|
unversionedextensions "k8s.io/kubernetes/pkg/client/typed/generated/extensions/unversioned"
|
||||||
unversioned "k8s.io/kubernetes/pkg/client/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.
|
// 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 clientset Clientset
|
||||||
var err error
|
var err error
|
||||||
clientset.CoreClient, err = unversionedcore.NewForConfig(c)
|
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
|
// NewForConfigOrDie creates a new Clientset for the given config and
|
||||||
// panics if there is an error in the config.
|
// panics if there is an error in the config.
|
||||||
func NewForConfigOrDie(c *unversioned.Config) *Clientset {
|
func NewForConfigOrDie(c *restclient.Config) *Clientset {
|
||||||
var clientset Clientset
|
var clientset Clientset
|
||||||
clientset.CoreClient = unversionedcore.NewForConfigOrDie(c)
|
clientset.CoreClient = unversionedcore.NewForConfigOrDie(c)
|
||||||
clientset.ExtensionsClient = unversionedextensions.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.
|
// New creates a new Clientset for the given RESTClient.
|
||||||
func New(c *unversioned.RESTClient) *Clientset {
|
func New(c *restclient.RESTClient) *Clientset {
|
||||||
var clientset Clientset
|
var clientset Clientset
|
||||||
clientset.CoreClient = unversionedcore.New(c)
|
clientset.CoreClient = unversionedcore.New(c)
|
||||||
clientset.ExtensionsClient = unversionedextensions.New(c)
|
clientset.ExtensionsClient = unversionedextensions.New(c)
|
||||||
|
|
|
@ -18,6 +18,7 @@ package release_1_2
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
|
restclient "k8s.io/kubernetes/pkg/client/restclient"
|
||||||
v1core "k8s.io/kubernetes/pkg/client/typed/generated/core/v1"
|
v1core "k8s.io/kubernetes/pkg/client/typed/generated/core/v1"
|
||||||
v1beta1extensions "k8s.io/kubernetes/pkg/client/typed/generated/extensions/v1beta1"
|
v1beta1extensions "k8s.io/kubernetes/pkg/client/typed/generated/extensions/v1beta1"
|
||||||
unversioned "k8s.io/kubernetes/pkg/client/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.
|
// 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 clientset Clientset
|
||||||
var err error
|
var err error
|
||||||
clientset.CoreClient, err = v1core.NewForConfig(c)
|
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
|
// NewForConfigOrDie creates a new Clientset for the given config and
|
||||||
// panics if there is an error in the config.
|
// panics if there is an error in the config.
|
||||||
func NewForConfigOrDie(c *unversioned.Config) *Clientset {
|
func NewForConfigOrDie(c *restclient.Config) *Clientset {
|
||||||
var clientset Clientset
|
var clientset Clientset
|
||||||
clientset.CoreClient = v1core.NewForConfigOrDie(c)
|
clientset.CoreClient = v1core.NewForConfigOrDie(c)
|
||||||
clientset.ExtensionsClient = v1beta1extensions.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.
|
// New creates a new Clientset for the given RESTClient.
|
||||||
func New(c *unversioned.RESTClient) *Clientset {
|
func New(c *restclient.RESTClient) *Clientset {
|
||||||
var clientset Clientset
|
var clientset Clientset
|
||||||
clientset.CoreClient = v1core.New(c)
|
clientset.CoreClient = v1core.New(c)
|
||||||
clientset.ExtensionsClient = v1beta1extensions.New(c)
|
clientset.ExtensionsClient = v1beta1extensions.New(c)
|
||||||
|
|
|
@ -24,7 +24,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/errors"
|
"k8s.io/kubernetes/pkg/api/errors"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"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/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
utilruntime "k8s.io/kubernetes/pkg/util/runtime"
|
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.
|
// 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.
|
// Otherwise, something about the event is malformed and we should abandon it.
|
||||||
switch err.(type) {
|
switch err.(type) {
|
||||||
case *client.RequestConstructionError:
|
case *restclient.RequestConstructionError:
|
||||||
// We will construct the request the same next time, so don't keep trying.
|
// 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)
|
glog.Errorf("Unable to construct event '%#v': '%v' (will not retry!)", event, err)
|
||||||
return true
|
return true
|
||||||
|
|
|
@ -26,7 +26,8 @@ import (
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/errors"
|
"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"
|
k8sruntime "k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
"k8s.io/kubernetes/pkg/util/strategicpatch"
|
"k8s.io/kubernetes/pkg/util/strategicpatch"
|
||||||
|
@ -391,7 +392,7 @@ func TestWriteEventError(t *testing.T) {
|
||||||
"giveUp1": {
|
"giveUp1": {
|
||||||
timesToSendError: 1000,
|
timesToSendError: 1000,
|
||||||
attemptsWanted: 1,
|
attemptsWanted: 1,
|
||||||
err: &client.RequestConstructionError{},
|
err: &restclient.RequestConstructionError{},
|
||||||
},
|
},
|
||||||
"giveUp2": {
|
"giveUp2": {
|
||||||
timesToSendError: 1000,
|
timesToSendError: 1000,
|
||||||
|
|
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package unversioned
|
package restclient
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package unversioned
|
package restclient
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
|
@ -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
|
||||||
|
}
|
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package unversioned
|
package restclient
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
@ -292,22 +292,22 @@ func (r *Request) RequestURI(uri string) *Request {
|
||||||
const (
|
const (
|
||||||
// A constant that clients can use to refer in a field selector to the object name field.
|
// 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.
|
// Will be automatically emitted as the correct name for the API version.
|
||||||
NodeUnschedulable = "spec.unschedulable"
|
nodeUnschedulable = "spec.unschedulable"
|
||||||
ObjectNameField = "metadata.name"
|
objectNameField = "metadata.name"
|
||||||
PodHost = "spec.nodeName"
|
podHost = "spec.nodeName"
|
||||||
PodStatus = "status.phase"
|
podStatus = "status.phase"
|
||||||
SecretType = "type"
|
secretType = "type"
|
||||||
|
|
||||||
EventReason = "reason"
|
eventReason = "reason"
|
||||||
EventSource = "source"
|
eventSource = "source"
|
||||||
EventType = "type"
|
eventType = "type"
|
||||||
EventInvolvedKind = "involvedObject.kind"
|
eventInvolvedKind = "involvedObject.kind"
|
||||||
EventInvolvedNamespace = "involvedObject.namespace"
|
eventInvolvedNamespace = "involvedObject.namespace"
|
||||||
EventInvolvedName = "involvedObject.name"
|
eventInvolvedName = "involvedObject.name"
|
||||||
EventInvolvedUID = "involvedObject.uid"
|
eventInvolvedUID = "involvedObject.uid"
|
||||||
EventInvolvedAPIVersion = "involvedObject.apiVersion"
|
eventInvolvedAPIVersion = "involvedObject.apiVersion"
|
||||||
EventInvolvedResourceVersion = "involvedObject.resourceVersion"
|
eventInvolvedResourceVersion = "involvedObject.resourceVersion"
|
||||||
EventInvolvedFieldPath = "involvedObject.fieldPath"
|
eventInvolvedFieldPath = "involvedObject.fieldPath"
|
||||||
)
|
)
|
||||||
|
|
||||||
type clientFieldNameToAPIVersionFieldName map[string]string
|
type clientFieldNameToAPIVersionFieldName map[string]string
|
||||||
|
@ -350,34 +350,34 @@ func (v versionToResourceToFieldMapping) filterField(groupVersion *unversioned.G
|
||||||
var fieldMappings = versionToResourceToFieldMapping{
|
var fieldMappings = versionToResourceToFieldMapping{
|
||||||
v1.SchemeGroupVersion: resourceTypeToFieldMapping{
|
v1.SchemeGroupVersion: resourceTypeToFieldMapping{
|
||||||
"nodes": clientFieldNameToAPIVersionFieldName{
|
"nodes": clientFieldNameToAPIVersionFieldName{
|
||||||
ObjectNameField: ObjectNameField,
|
objectNameField: objectNameField,
|
||||||
NodeUnschedulable: NodeUnschedulable,
|
nodeUnschedulable: nodeUnschedulable,
|
||||||
},
|
},
|
||||||
"pods": clientFieldNameToAPIVersionFieldName{
|
"pods": clientFieldNameToAPIVersionFieldName{
|
||||||
PodHost: PodHost,
|
podHost: podHost,
|
||||||
PodStatus: PodStatus,
|
podStatus: podStatus,
|
||||||
},
|
},
|
||||||
"secrets": clientFieldNameToAPIVersionFieldName{
|
"secrets": clientFieldNameToAPIVersionFieldName{
|
||||||
SecretType: SecretType,
|
secretType: secretType,
|
||||||
},
|
},
|
||||||
"serviceAccounts": clientFieldNameToAPIVersionFieldName{
|
"serviceAccounts": clientFieldNameToAPIVersionFieldName{
|
||||||
ObjectNameField: ObjectNameField,
|
objectNameField: objectNameField,
|
||||||
},
|
},
|
||||||
"endpoints": clientFieldNameToAPIVersionFieldName{
|
"endpoints": clientFieldNameToAPIVersionFieldName{
|
||||||
ObjectNameField: ObjectNameField,
|
objectNameField: objectNameField,
|
||||||
},
|
},
|
||||||
"events": clientFieldNameToAPIVersionFieldName{
|
"events": clientFieldNameToAPIVersionFieldName{
|
||||||
ObjectNameField: ObjectNameField,
|
objectNameField: objectNameField,
|
||||||
EventReason: EventReason,
|
eventReason: eventReason,
|
||||||
EventSource: EventSource,
|
eventSource: eventSource,
|
||||||
EventType: EventType,
|
eventType: eventType,
|
||||||
EventInvolvedKind: EventInvolvedKind,
|
eventInvolvedKind: eventInvolvedKind,
|
||||||
EventInvolvedNamespace: EventInvolvedNamespace,
|
eventInvolvedNamespace: eventInvolvedNamespace,
|
||||||
EventInvolvedName: EventInvolvedName,
|
eventInvolvedName: eventInvolvedName,
|
||||||
EventInvolvedUID: EventInvolvedUID,
|
eventInvolvedUID: eventInvolvedUID,
|
||||||
EventInvolvedAPIVersion: EventInvolvedAPIVersion,
|
eventInvolvedAPIVersion: eventInvolvedAPIVersion,
|
||||||
EventInvolvedResourceVersion: EventInvolvedResourceVersion,
|
eventInvolvedResourceVersion: eventInvolvedResourceVersion,
|
||||||
EventInvolvedFieldPath: EventInvolvedFieldPath,
|
eventInvolvedFieldPath: eventInvolvedFieldPath,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package unversioned
|
package restclient
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
@ -1094,7 +1094,7 @@ func TestAbsPath(t *testing.T) {
|
||||||
absPath string
|
absPath string
|
||||||
wantsAbsPath string
|
wantsAbsPath string
|
||||||
}{
|
}{
|
||||||
{"", "", "", "/"},
|
{"/", "", "", "/"},
|
||||||
{"", "", "/", "/"},
|
{"", "", "/", "/"},
|
||||||
{"", "", "/api", "/api"},
|
{"", "", "/api", "/api"},
|
||||||
{"", "", "/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", "/r1", "/api/", "/p1/api/p2/api/"},
|
||||||
{"/p1/api/p2", "/api/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})
|
u, _ := url.Parse("http://localhost:123" + tc.configPrefix)
|
||||||
r := c.Post().Prefix(tc.resourcePrefix).AbsPath(tc.absPath)
|
r := NewRequest(nil, "POST", u, "", ContentConfig{GroupVersion: &unversioned.GroupVersion{Group: "test"}}, nil, nil).Prefix(tc.resourcePrefix).AbsPath(tc.absPath)
|
||||||
if r.pathPrefix != tc.wantsAbsPath {
|
if r.pathPrefix != tc.wantsAbsPath {
|
||||||
t.Errorf("test case %d failed, unexpected path: %q, expected %q", i, r.pathPrefix, tc.wantsAbsPath)
|
t.Errorf("test case %d failed, unexpected path: %q, expected %q", i, r.pathPrefix, tc.wantsAbsPath)
|
||||||
}
|
}
|
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package unversioned
|
package restclient
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/tls"
|
"crypto/tls"
|
|
@ -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)
|
||||||
|
}
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package unversioned
|
package restclient
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/url"
|
"net/url"
|
|
@ -14,13 +14,14 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package unversioned
|
package restclient
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/util"
|
|
||||||
"net/url"
|
"net/url"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"k8s.io/kubernetes/pkg/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func parse(raw string) *url.URL {
|
func parse(raw string) *url.URL {
|
|
@ -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
|
||||||
|
}
|
|
@ -21,7 +21,7 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"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/runtime"
|
||||||
"k8s.io/kubernetes/pkg/version"
|
"k8s.io/kubernetes/pkg/version"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"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 indicates whether or not this Reactor deals with a given action
|
||||||
Handles(action Action) bool
|
Handles(action Action) bool
|
||||||
// React handles a watch action and returns results. It may choose to delegate by indicated handled=false
|
// 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,
|
// 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,
|
// 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
|
// 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
|
// AddReactor appends a reactor to the end of the chain
|
||||||
func (c *Fake) AddReactor(verb, resource string, reaction ReactionFunc) {
|
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).
|
// 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()
|
c.Lock()
|
||||||
defer c.Unlock()
|
defer c.Unlock()
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api/errors"
|
"k8s.io/kubernetes/pkg/api/errors"
|
||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"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/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util/yaml"
|
"k8s.io/kubernetes/pkg/util/yaml"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
|
@ -309,6 +309,6 @@ func (r *SimpleProxyReactor) Handles(action Action) bool {
|
||||||
return true
|
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)
|
return r.Reaction(action)
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ import (
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"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/conversion/queryparams"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
|
@ -37,12 +37,12 @@ import (
|
||||||
// Client is a Kubernetes client that allows you to access metadata
|
// Client is a Kubernetes client that allows you to access metadata
|
||||||
// and manipulate metadata of a Kubernetes API group.
|
// and manipulate metadata of a Kubernetes API group.
|
||||||
type Client struct {
|
type Client struct {
|
||||||
cl *client.RESTClient
|
cl *restclient.RESTClient
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewClient returns a new client based on the passed in config. The
|
// NewClient returns a new client based on the passed in config. The
|
||||||
// codec is ignored, as the dynamic client uses it's own codec.
|
// 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
|
// avoid changing the original config
|
||||||
confCopy := *conf
|
confCopy := *conf
|
||||||
conf = &confCopy
|
conf = &confCopy
|
||||||
|
@ -54,7 +54,7 @@ func NewClient(conf *client.Config) (*Client, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(conf.UserAgent) == 0 {
|
if len(conf.UserAgent) == 0 {
|
||||||
conf.UserAgent = client.DefaultKubernetesUserAgent()
|
conf.UserAgent = restclient.DefaultKubernetesUserAgent()
|
||||||
}
|
}
|
||||||
|
|
||||||
if conf.QPS == 0.0 {
|
if conf.QPS == 0.0 {
|
||||||
|
@ -64,7 +64,7 @@ func NewClient(conf *client.Config) (*Client, error) {
|
||||||
conf.Burst = 10
|
conf.Burst = 10
|
||||||
}
|
}
|
||||||
|
|
||||||
cl, err := client.RESTClientFor(conf)
|
cl, err := restclient.RESTClientFor(conf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
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
|
// ResourceClient is an API interface to a specific resource under a
|
||||||
// dynamic client.
|
// dynamic client.
|
||||||
type ResourceClient struct {
|
type ResourceClient struct {
|
||||||
cl *client.RESTClient
|
cl *restclient.RESTClient
|
||||||
resource *unversioned.APIResource
|
resource *unversioned.APIResource
|
||||||
ns string
|
ns string
|
||||||
}
|
}
|
||||||
|
@ -94,7 +94,7 @@ type ResourceClient struct {
|
||||||
// namespace applies a namespace to the request if the configured
|
// namespace applies a namespace to the request if the configured
|
||||||
// resource is a namespaced resource. Otherwise, it just returns the
|
// resource is a namespaced resource. Otherwise, it just returns the
|
||||||
// passed in request.
|
// 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 {
|
if rc.resource.Namespaced {
|
||||||
return req.Namespace(rc.ns)
|
return req.Namespace(rc.ns)
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@ import (
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"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/runtime"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
watchjson "k8s.io/kubernetes/pkg/watch/json"
|
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) {
|
func getClientServer(gv *unversioned.GroupVersion, h func(http.ResponseWriter, *http.Request)) (*Client, *httptest.Server, error) {
|
||||||
srv := httptest.NewServer(http.HandlerFunc(h))
|
srv := httptest.NewServer(http.HandlerFunc(h))
|
||||||
cl, err := NewClient(&client.Config{
|
cl, err := NewClient(&restclient.Config{
|
||||||
Host: srv.URL,
|
Host: srv.URL,
|
||||||
ContentConfig: client.ContentConfig{GroupVersion: gv},
|
ContentConfig: restclient.ContentConfig{GroupVersion: gv},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
srv.Close()
|
srv.Close()
|
||||||
|
|
|
@ -19,7 +19,7 @@ package unversioned
|
||||||
import (
|
import (
|
||||||
api "k8s.io/kubernetes/pkg/api"
|
api "k8s.io/kubernetes/pkg/api"
|
||||||
registered "k8s.io/kubernetes/pkg/apimachinery/registered"
|
registered "k8s.io/kubernetes/pkg/apimachinery/registered"
|
||||||
unversioned "k8s.io/kubernetes/pkg/client/unversioned"
|
restclient "k8s.io/kubernetes/pkg/client/restclient"
|
||||||
)
|
)
|
||||||
|
|
||||||
type CoreInterface interface {
|
type CoreInterface interface {
|
||||||
|
@ -43,7 +43,7 @@ type CoreInterface interface {
|
||||||
|
|
||||||
// CoreClient is used to interact with features provided by the Core group.
|
// CoreClient is used to interact with features provided by the Core group.
|
||||||
type CoreClient struct {
|
type CoreClient struct {
|
||||||
*unversioned.RESTClient
|
*restclient.RESTClient
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *CoreClient) ComponentStatuses() ComponentStatusInterface {
|
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.
|
// 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
|
config := *c
|
||||||
if err := setConfigDefaults(&config); err != nil {
|
if err := setConfigDefaults(&config); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
client, err := unversioned.RESTClientFor(&config)
|
client, err := restclient.RESTClientFor(&config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -125,7 +125,7 @@ func NewForConfig(c *unversioned.Config) (*CoreClient, error) {
|
||||||
|
|
||||||
// NewForConfigOrDie creates a new CoreClient for the given config and
|
// NewForConfigOrDie creates a new CoreClient for the given config and
|
||||||
// panics if there is an error in the config.
|
// 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)
|
client, err := NewForConfig(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
@ -134,11 +134,11 @@ func NewForConfigOrDie(c *unversioned.Config) *CoreClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
// New creates a new CoreClient for the given RESTClient.
|
// New creates a new CoreClient for the given RESTClient.
|
||||||
func New(c *unversioned.RESTClient) *CoreClient {
|
func New(c *restclient.RESTClient) *CoreClient {
|
||||||
return &CoreClient{c}
|
return &CoreClient{c}
|
||||||
}
|
}
|
||||||
|
|
||||||
func setConfigDefaults(config *unversioned.Config) error {
|
func setConfigDefaults(config *restclient.Config) error {
|
||||||
// if core group is not registered, return an error
|
// if core group is not registered, return an error
|
||||||
g, err := registered.Group("")
|
g, err := registered.Group("")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -146,7 +146,7 @@ func setConfigDefaults(config *unversioned.Config) error {
|
||||||
}
|
}
|
||||||
config.APIPath = "/api"
|
config.APIPath = "/api"
|
||||||
if config.UserAgent == "" {
|
if config.UserAgent == "" {
|
||||||
config.UserAgent = unversioned.DefaultKubernetesUserAgent()
|
config.UserAgent = restclient.DefaultKubernetesUserAgent()
|
||||||
}
|
}
|
||||||
// TODO: Unconditionally set the config.Version, until we fix the config.
|
// TODO: Unconditionally set the config.Version, until we fix the config.
|
||||||
//if config.Version == "" {
|
//if config.Version == "" {
|
||||||
|
|
|
@ -18,8 +18,8 @@ package fake
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/client/testing/core"
|
"k8s.io/kubernetes/pkg/client/testing/core"
|
||||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func (c *FakePods) Bind(binding *api.Binding) error {
|
func (c *FakePods) Bind(binding *api.Binding) error {
|
||||||
|
@ -33,7 +33,7 @@ func (c *FakePods) Bind(binding *api.Binding) error {
|
||||||
return err
|
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 := core.GenericActionImpl{}
|
||||||
action.Verb = "get"
|
action.Verb = "get"
|
||||||
action.Namespace = c.ns
|
action.Namespace = c.ns
|
||||||
|
@ -42,5 +42,5 @@ func (c *FakePods) GetLogs(name string, opts *api.PodLogOptions) *client.Request
|
||||||
action.Value = opts
|
action.Value = opts
|
||||||
|
|
||||||
_, _ = c.Fake.Invokes(action, &api.Pod{})
|
_, _ = c.Fake.Invokes(action, &api.Pod{})
|
||||||
return &client.Request{}
|
return &restclient.Request{}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,10 +17,10 @@ limitations under the License.
|
||||||
package fake
|
package fake
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/client/testing/core"
|
"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))
|
return c.Fake.InvokesProxy(core.NewProxyGetAction("services", c.ns, scheme, name, port, path, params))
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,13 +18,13 @@ package unversioned
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"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.
|
// The PodExpansion interface allows manually adding extra methods to the PodInterface.
|
||||||
type PodExpansion interface {
|
type PodExpansion interface {
|
||||||
Bind(binding *api.Binding) error
|
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).
|
// 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
|
// 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)
|
return c.client.Get().Namespace(c.ns).Name(name).Resource("pods").SubResource("log").VersionedParams(opts, api.ParameterCodec)
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,17 +17,17 @@ limitations under the License.
|
||||||
package unversioned
|
package unversioned
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned"
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/util/net"
|
"k8s.io/kubernetes/pkg/util/net"
|
||||||
)
|
)
|
||||||
|
|
||||||
// The ServiceExpansion interface allows manually adding extra methods to the ServiceInterface.
|
// The ServiceExpansion interface allows manually adding extra methods to the ServiceInterface.
|
||||||
type ServiceExpansion interface {
|
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.
|
// 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().
|
request := c.client.Get().
|
||||||
Prefix("proxy").
|
Prefix("proxy").
|
||||||
Namespace(c.ns).
|
Namespace(c.ns).
|
||||||
|
|
|
@ -19,7 +19,7 @@ package v1
|
||||||
import (
|
import (
|
||||||
api "k8s.io/kubernetes/pkg/api"
|
api "k8s.io/kubernetes/pkg/api"
|
||||||
registered "k8s.io/kubernetes/pkg/apimachinery/registered"
|
registered "k8s.io/kubernetes/pkg/apimachinery/registered"
|
||||||
unversioned "k8s.io/kubernetes/pkg/client/unversioned"
|
restclient "k8s.io/kubernetes/pkg/client/restclient"
|
||||||
)
|
)
|
||||||
|
|
||||||
type CoreInterface interface {
|
type CoreInterface interface {
|
||||||
|
@ -42,7 +42,7 @@ type CoreInterface interface {
|
||||||
|
|
||||||
// CoreClient is used to interact with features provided by the Core group.
|
// CoreClient is used to interact with features provided by the Core group.
|
||||||
type CoreClient struct {
|
type CoreClient struct {
|
||||||
*unversioned.RESTClient
|
*restclient.RESTClient
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *CoreClient) ComponentStatuses() ComponentStatusInterface {
|
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.
|
// 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
|
config := *c
|
||||||
if err := setConfigDefaults(&config); err != nil {
|
if err := setConfigDefaults(&config); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
client, err := unversioned.RESTClientFor(&config)
|
client, err := restclient.RESTClientFor(&config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -120,7 +120,7 @@ func NewForConfig(c *unversioned.Config) (*CoreClient, error) {
|
||||||
|
|
||||||
// NewForConfigOrDie creates a new CoreClient for the given config and
|
// NewForConfigOrDie creates a new CoreClient for the given config and
|
||||||
// panics if there is an error in the config.
|
// 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)
|
client, err := NewForConfig(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
@ -129,11 +129,11 @@ func NewForConfigOrDie(c *unversioned.Config) *CoreClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
// New creates a new CoreClient for the given RESTClient.
|
// New creates a new CoreClient for the given RESTClient.
|
||||||
func New(c *unversioned.RESTClient) *CoreClient {
|
func New(c *restclient.RESTClient) *CoreClient {
|
||||||
return &CoreClient{c}
|
return &CoreClient{c}
|
||||||
}
|
}
|
||||||
|
|
||||||
func setConfigDefaults(config *unversioned.Config) error {
|
func setConfigDefaults(config *restclient.Config) error {
|
||||||
// if core group is not registered, return an error
|
// if core group is not registered, return an error
|
||||||
g, err := registered.Group("")
|
g, err := registered.Group("")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -141,7 +141,7 @@ func setConfigDefaults(config *unversioned.Config) error {
|
||||||
}
|
}
|
||||||
config.APIPath = "/api"
|
config.APIPath = "/api"
|
||||||
if config.UserAgent == "" {
|
if config.UserAgent == "" {
|
||||||
config.UserAgent = unversioned.DefaultKubernetesUserAgent()
|
config.UserAgent = restclient.DefaultKubernetesUserAgent()
|
||||||
}
|
}
|
||||||
// TODO: Unconditionally set the config.Version, until we fix the config.
|
// TODO: Unconditionally set the config.Version, until we fix the config.
|
||||||
//if config.Version == "" {
|
//if config.Version == "" {
|
||||||
|
|
|
@ -18,8 +18,8 @@ package fake
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/client/testing/core"
|
"k8s.io/kubernetes/pkg/client/testing/core"
|
||||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func (c *FakePods) Bind(binding *v1.Binding) error {
|
func (c *FakePods) Bind(binding *v1.Binding) error {
|
||||||
|
@ -33,7 +33,7 @@ func (c *FakePods) Bind(binding *v1.Binding) error {
|
||||||
return err
|
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 := core.GenericActionImpl{}
|
||||||
action.Verb = "get"
|
action.Verb = "get"
|
||||||
action.Namespace = c.ns
|
action.Namespace = c.ns
|
||||||
|
@ -42,5 +42,5 @@ func (c *FakePods) GetLogs(name string, opts *v1.PodLogOptions) *client.Request
|
||||||
action.Value = opts
|
action.Value = opts
|
||||||
|
|
||||||
_, _ = c.Fake.Invokes(action, &v1.Pod{})
|
_, _ = c.Fake.Invokes(action, &v1.Pod{})
|
||||||
return &client.Request{}
|
return &restclient.Request{}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,10 +17,10 @@ limitations under the License.
|
||||||
package fake
|
package fake
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/client/testing/core"
|
"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))
|
return c.Fake.InvokesProxy(core.NewProxyGetAction("services", c.ns, scheme, name, port, path, params))
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,13 +19,13 @@ package v1
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"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.
|
// The PodExpansion interface allows manually adding extra methods to the PodInterface.
|
||||||
type PodExpansion interface {
|
type PodExpansion interface {
|
||||||
Bind(binding *v1.Binding) error
|
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).
|
// 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
|
// 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)
|
return c.client.Get().Namespace(c.ns).Name(name).Resource("pods").SubResource("log").VersionedParams(opts, api.ParameterCodec)
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,17 +17,17 @@ limitations under the License.
|
||||||
package v1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned"
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/util/net"
|
"k8s.io/kubernetes/pkg/util/net"
|
||||||
)
|
)
|
||||||
|
|
||||||
// The ServiceExpansion interface allows manually adding extra methods to the ServiceInterface.
|
// The ServiceExpansion interface allows manually adding extra methods to the ServiceInterface.
|
||||||
type ServiceExpansion interface {
|
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.
|
// 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().
|
request := c.client.Get().
|
||||||
Prefix("proxy").
|
Prefix("proxy").
|
||||||
Namespace(c.ns).
|
Namespace(c.ns).
|
||||||
|
|
|
@ -19,7 +19,7 @@ package unversioned
|
||||||
import (
|
import (
|
||||||
api "k8s.io/kubernetes/pkg/api"
|
api "k8s.io/kubernetes/pkg/api"
|
||||||
registered "k8s.io/kubernetes/pkg/apimachinery/registered"
|
registered "k8s.io/kubernetes/pkg/apimachinery/registered"
|
||||||
unversioned "k8s.io/kubernetes/pkg/client/unversioned"
|
restclient "k8s.io/kubernetes/pkg/client/restclient"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ExtensionsInterface interface {
|
type ExtensionsInterface interface {
|
||||||
|
@ -35,7 +35,7 @@ type ExtensionsInterface interface {
|
||||||
|
|
||||||
// ExtensionsClient is used to interact with features provided by the Extensions group.
|
// ExtensionsClient is used to interact with features provided by the Extensions group.
|
||||||
type ExtensionsClient struct {
|
type ExtensionsClient struct {
|
||||||
*unversioned.RESTClient
|
*restclient.RESTClient
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ExtensionsClient) DaemonSets(namespace string) DaemonSetInterface {
|
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.
|
// 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
|
config := *c
|
||||||
if err := setConfigDefaults(&config); err != nil {
|
if err := setConfigDefaults(&config); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
client, err := unversioned.RESTClientFor(&config)
|
client, err := restclient.RESTClientFor(&config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -85,7 +85,7 @@ func NewForConfig(c *unversioned.Config) (*ExtensionsClient, error) {
|
||||||
|
|
||||||
// NewForConfigOrDie creates a new ExtensionsClient for the given config and
|
// NewForConfigOrDie creates a new ExtensionsClient for the given config and
|
||||||
// panics if there is an error in the config.
|
// 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)
|
client, err := NewForConfig(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
@ -94,11 +94,11 @@ func NewForConfigOrDie(c *unversioned.Config) *ExtensionsClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
// New creates a new ExtensionsClient for the given RESTClient.
|
// New creates a new ExtensionsClient for the given RESTClient.
|
||||||
func New(c *unversioned.RESTClient) *ExtensionsClient {
|
func New(c *restclient.RESTClient) *ExtensionsClient {
|
||||||
return &ExtensionsClient{c}
|
return &ExtensionsClient{c}
|
||||||
}
|
}
|
||||||
|
|
||||||
func setConfigDefaults(config *unversioned.Config) error {
|
func setConfigDefaults(config *restclient.Config) error {
|
||||||
// if extensions group is not registered, return an error
|
// if extensions group is not registered, return an error
|
||||||
g, err := registered.Group("extensions")
|
g, err := registered.Group("extensions")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -106,7 +106,7 @@ func setConfigDefaults(config *unversioned.Config) error {
|
||||||
}
|
}
|
||||||
config.APIPath = "/apis"
|
config.APIPath = "/apis"
|
||||||
if config.UserAgent == "" {
|
if config.UserAgent == "" {
|
||||||
config.UserAgent = unversioned.DefaultKubernetesUserAgent()
|
config.UserAgent = restclient.DefaultKubernetesUserAgent()
|
||||||
}
|
}
|
||||||
// TODO: Unconditionally set the config.Version, until we fix the config.
|
// TODO: Unconditionally set the config.Version, until we fix the config.
|
||||||
//if config.Version == "" {
|
//if config.Version == "" {
|
||||||
|
|
|
@ -19,7 +19,7 @@ package v1beta1
|
||||||
import (
|
import (
|
||||||
api "k8s.io/kubernetes/pkg/api"
|
api "k8s.io/kubernetes/pkg/api"
|
||||||
registered "k8s.io/kubernetes/pkg/apimachinery/registered"
|
registered "k8s.io/kubernetes/pkg/apimachinery/registered"
|
||||||
unversioned "k8s.io/kubernetes/pkg/client/unversioned"
|
restclient "k8s.io/kubernetes/pkg/client/restclient"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ExtensionsInterface interface {
|
type ExtensionsInterface interface {
|
||||||
|
@ -35,7 +35,7 @@ type ExtensionsInterface interface {
|
||||||
|
|
||||||
// ExtensionsClient is used to interact with features provided by the Extensions group.
|
// ExtensionsClient is used to interact with features provided by the Extensions group.
|
||||||
type ExtensionsClient struct {
|
type ExtensionsClient struct {
|
||||||
*unversioned.RESTClient
|
*restclient.RESTClient
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ExtensionsClient) DaemonSets(namespace string) DaemonSetInterface {
|
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.
|
// 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
|
config := *c
|
||||||
if err := setConfigDefaults(&config); err != nil {
|
if err := setConfigDefaults(&config); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
client, err := unversioned.RESTClientFor(&config)
|
client, err := restclient.RESTClientFor(&config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -85,7 +85,7 @@ func NewForConfig(c *unversioned.Config) (*ExtensionsClient, error) {
|
||||||
|
|
||||||
// NewForConfigOrDie creates a new ExtensionsClient for the given config and
|
// NewForConfigOrDie creates a new ExtensionsClient for the given config and
|
||||||
// panics if there is an error in the config.
|
// 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)
|
client, err := NewForConfig(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
@ -94,11 +94,11 @@ func NewForConfigOrDie(c *unversioned.Config) *ExtensionsClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
// New creates a new ExtensionsClient for the given RESTClient.
|
// New creates a new ExtensionsClient for the given RESTClient.
|
||||||
func New(c *unversioned.RESTClient) *ExtensionsClient {
|
func New(c *restclient.RESTClient) *ExtensionsClient {
|
||||||
return &ExtensionsClient{c}
|
return &ExtensionsClient{c}
|
||||||
}
|
}
|
||||||
|
|
||||||
func setConfigDefaults(config *unversioned.Config) error {
|
func setConfigDefaults(config *restclient.Config) error {
|
||||||
// if extensions group is not registered, return an error
|
// if extensions group is not registered, return an error
|
||||||
g, err := registered.Group("extensions")
|
g, err := registered.Group("extensions")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -106,7 +106,7 @@ func setConfigDefaults(config *unversioned.Config) error {
|
||||||
}
|
}
|
||||||
config.APIPath = "/apis"
|
config.APIPath = "/apis"
|
||||||
if config.UserAgent == "" {
|
if config.UserAgent == "" {
|
||||||
config.UserAgent = unversioned.DefaultKubernetesUserAgent()
|
config.UserAgent = restclient.DefaultKubernetesUserAgent()
|
||||||
}
|
}
|
||||||
// TODO: Unconditionally set the config.Version, until we fix the config.
|
// TODO: Unconditionally set the config.Version, until we fix the config.
|
||||||
//if config.Version == "" {
|
//if config.Version == "" {
|
||||||
|
|
|
@ -68,7 +68,7 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Info holds Kubernetes API authorization config. It is intended
|
// 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.
|
// 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
|
// The fields of client.Config with a corresponding field in the Info are set
|
||||||
// with the value from the Info.
|
// with the value from the Info.
|
||||||
func (info Info) MergeWithConfig(c client.Config) (client.Config, error) {
|
func (info Info) MergeWithConfig(c restclient.Config) (restclient.Config, error) {
|
||||||
var config client.Config = c
|
var config restclient.Config = c
|
||||||
config.Username = info.User
|
config.Username = info.User
|
||||||
config.Password = info.Password
|
config.Password = info.Password
|
||||||
config.CAFile = info.CAFile
|
config.CAFile = info.CAFile
|
||||||
|
|
|
@ -20,6 +20,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
||||||
"k8s.io/kubernetes/pkg/apis/autoscaling"
|
"k8s.io/kubernetes/pkg/apis/autoscaling"
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
)
|
)
|
||||||
|
|
||||||
type AutoscalingInterface interface {
|
type AutoscalingInterface interface {
|
||||||
|
@ -28,26 +29,26 @@ type AutoscalingInterface interface {
|
||||||
|
|
||||||
// AutoscalingClient is used to interact with Kubernetes autoscaling features.
|
// AutoscalingClient is used to interact with Kubernetes autoscaling features.
|
||||||
type AutoscalingClient struct {
|
type AutoscalingClient struct {
|
||||||
*RESTClient
|
*restclient.RESTClient
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *AutoscalingClient) HorizontalPodAutoscalers(namespace string) HorizontalPodAutoscalerInterface {
|
func (c *AutoscalingClient) HorizontalPodAutoscalers(namespace string) HorizontalPodAutoscalerInterface {
|
||||||
return newHorizontalPodAutoscalersV1(c, namespace)
|
return newHorizontalPodAutoscalersV1(c, namespace)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewAutoscaling(c *Config) (*AutoscalingClient, error) {
|
func NewAutoscaling(c *restclient.Config) (*AutoscalingClient, error) {
|
||||||
config := *c
|
config := *c
|
||||||
if err := setAutoscalingDefaults(&config); err != nil {
|
if err := setAutoscalingDefaults(&config); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
client, err := RESTClientFor(&config)
|
client, err := restclient.RESTClientFor(&config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return &AutoscalingClient{client}, nil
|
return &AutoscalingClient{client}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewAutoscalingOrDie(c *Config) *AutoscalingClient {
|
func NewAutoscalingOrDie(c *restclient.Config) *AutoscalingClient {
|
||||||
client, err := NewAutoscaling(c)
|
client, err := NewAutoscaling(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
@ -55,7 +56,7 @@ func NewAutoscalingOrDie(c *Config) *AutoscalingClient {
|
||||||
return client
|
return client
|
||||||
}
|
}
|
||||||
|
|
||||||
func setAutoscalingDefaults(config *Config) error {
|
func setAutoscalingDefaults(config *restclient.Config) error {
|
||||||
// if autoscaling group is not registered, return an error
|
// if autoscaling group is not registered, return an error
|
||||||
g, err := registered.Group(autoscaling.GroupName)
|
g, err := registered.Group(autoscaling.GroupName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -63,7 +64,7 @@ func setAutoscalingDefaults(config *Config) error {
|
||||||
}
|
}
|
||||||
config.APIPath = defaultAPIPath
|
config.APIPath = defaultAPIPath
|
||||||
if config.UserAgent == "" {
|
if config.UserAgent == "" {
|
||||||
config.UserAgent = DefaultKubernetesUserAgent()
|
config.UserAgent = restclient.DefaultKubernetesUserAgent()
|
||||||
}
|
}
|
||||||
// TODO: Unconditionally set the config.Version, until we fix the config.
|
// TODO: Unconditionally set the config.Version, until we fix the config.
|
||||||
//if config.Version == "" {
|
//if config.Version == "" {
|
||||||
|
|
|
@ -20,6 +20,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
||||||
"k8s.io/kubernetes/pkg/apis/batch"
|
"k8s.io/kubernetes/pkg/apis/batch"
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
)
|
)
|
||||||
|
|
||||||
type BatchInterface interface {
|
type BatchInterface interface {
|
||||||
|
@ -28,26 +29,26 @@ type BatchInterface interface {
|
||||||
|
|
||||||
// BatchClient is used to interact with Kubernetes batch features.
|
// BatchClient is used to interact with Kubernetes batch features.
|
||||||
type BatchClient struct {
|
type BatchClient struct {
|
||||||
*RESTClient
|
*restclient.RESTClient
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *BatchClient) Jobs(namespace string) JobInterface {
|
func (c *BatchClient) Jobs(namespace string) JobInterface {
|
||||||
return newJobsV1(c, namespace)
|
return newJobsV1(c, namespace)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewBatch(c *Config) (*BatchClient, error) {
|
func NewBatch(c *restclient.Config) (*BatchClient, error) {
|
||||||
config := *c
|
config := *c
|
||||||
if err := setBatchDefaults(&config); err != nil {
|
if err := setBatchDefaults(&config); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
client, err := RESTClientFor(&config)
|
client, err := restclient.RESTClientFor(&config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return &BatchClient{client}, nil
|
return &BatchClient{client}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewBatchOrDie(c *Config) *BatchClient {
|
func NewBatchOrDie(c *restclient.Config) *BatchClient {
|
||||||
client, err := NewBatch(c)
|
client, err := NewBatch(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
@ -55,7 +56,7 @@ func NewBatchOrDie(c *Config) *BatchClient {
|
||||||
return client
|
return client
|
||||||
}
|
}
|
||||||
|
|
||||||
func setBatchDefaults(config *Config) error {
|
func setBatchDefaults(config *restclient.Config) error {
|
||||||
// if batch group is not registered, return an error
|
// if batch group is not registered, return an error
|
||||||
g, err := registered.Group(batch.GroupName)
|
g, err := registered.Group(batch.GroupName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -63,7 +64,7 @@ func setBatchDefaults(config *Config) error {
|
||||||
}
|
}
|
||||||
config.APIPath = defaultAPIPath
|
config.APIPath = defaultAPIPath
|
||||||
if config.UserAgent == "" {
|
if config.UserAgent == "" {
|
||||||
config.UserAgent = DefaultKubernetesUserAgent()
|
config.UserAgent = restclient.DefaultKubernetesUserAgent()
|
||||||
}
|
}
|
||||||
// TODO: Unconditionally set the config.Version, until we fix the config.
|
// TODO: Unconditionally set the config.Version, until we fix the config.
|
||||||
//if config.Version == "" {
|
//if config.Version == "" {
|
||||||
|
|
|
@ -20,6 +20,8 @@ import (
|
||||||
"net"
|
"net"
|
||||||
"net/url"
|
"net/url"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Interface holds the methods for clients of Kubernetes,
|
// 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.
|
// Client is the implementation of a Kubernetes client.
|
||||||
type Client struct {
|
type Client struct {
|
||||||
*RESTClient
|
*restclient.RESTClient
|
||||||
*AutoscalingClient
|
*AutoscalingClient
|
||||||
*BatchClient
|
*BatchClient
|
||||||
*ExtensionsClient
|
*ExtensionsClient
|
||||||
|
|
|
@ -27,6 +27,7 @@ import (
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/version"
|
"k8s.io/kubernetes/pkg/version"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -48,7 +49,7 @@ func TestGetServerVersion(t *testing.T) {
|
||||||
}))
|
}))
|
||||||
// TODO: Uncomment when fix #19254
|
// TODO: Uncomment when fix #19254
|
||||||
// defer server.Close()
|
// defer server.Close()
|
||||||
client := NewOrDie(&Config{Host: server.URL})
|
client := NewOrDie(&restclient.Config{Host: server.URL})
|
||||||
|
|
||||||
got, err := client.Discovery().ServerVersion()
|
got, err := client.Discovery().ServerVersion()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -84,7 +85,7 @@ func TestGetServerGroupsWithV1Server(t *testing.T) {
|
||||||
}))
|
}))
|
||||||
// TODO: Uncomment when fix #19254
|
// TODO: Uncomment when fix #19254
|
||||||
// defer server.Close()
|
// 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
|
// ServerGroups should not return an error even if server returns error at /api and /apis
|
||||||
apiGroupList, err := client.Discovery().ServerGroups()
|
apiGroupList, err := client.Discovery().ServerGroups()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -121,7 +122,7 @@ func TestGetServerResourcesWithV1Server(t *testing.T) {
|
||||||
}))
|
}))
|
||||||
// TODO: Uncomment when fix #19254
|
// TODO: Uncomment when fix #19254
|
||||||
// defer server.Close()
|
// 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.
|
// ServerResources should not return an error even if server returns error at /api/v1.
|
||||||
resourceMap, err := client.Discovery().ServerResources()
|
resourceMap, err := client.Discovery().ServerResources()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -214,7 +215,7 @@ func TestGetServerResources(t *testing.T) {
|
||||||
}))
|
}))
|
||||||
// TODO: Uncomment when fix #19254
|
// TODO: Uncomment when fix #19254
|
||||||
// defer server.Close()
|
// defer server.Close()
|
||||||
client := NewOrDie(&Config{Host: server.URL})
|
client := NewOrDie(&restclient.Config{Host: server.URL})
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
got, err := client.Discovery().ServerResourcesForGroupVersion(test.request)
|
got, err := client.Discovery().ServerResourcesForGroupVersion(test.request)
|
||||||
if test.expectErr {
|
if test.expectErr {
|
||||||
|
@ -277,7 +278,7 @@ func TestGetSwaggerSchema(t *testing.T) {
|
||||||
// TODO: Uncomment when fix #19254
|
// TODO: Uncomment when fix #19254
|
||||||
// defer server.Close()
|
// defer server.Close()
|
||||||
|
|
||||||
client := NewOrDie(&Config{Host: server.URL})
|
client := NewOrDie(&restclient.Config{Host: server.URL})
|
||||||
got, err := client.Discovery().SwaggerSchema(v1.SchemeGroupVersion)
|
got, err := client.Discovery().SwaggerSchema(v1.SchemeGroupVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unexpected encoding error: %v", err)
|
t.Fatalf("unexpected encoding error: %v", err)
|
||||||
|
@ -297,7 +298,7 @@ func TestGetSwaggerSchemaFail(t *testing.T) {
|
||||||
// TODO: Uncomment when fix #19254
|
// TODO: Uncomment when fix #19254
|
||||||
// defer server.Close()
|
// 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"})
|
got, err := client.Discovery().SwaggerSchema(unversioned.GroupVersion{Group: "api.group", Version: "v4"})
|
||||||
if got != nil {
|
if got != nil {
|
||||||
t.Fatalf("unexpected response: %v", got)
|
t.Fatalf("unexpected response: %v", got)
|
||||||
|
|
|
@ -29,7 +29,7 @@ import (
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"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"
|
clientauth "k8s.io/kubernetes/pkg/client/unversioned/auth"
|
||||||
clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
|
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 returns the merged result of all overrides
|
||||||
RawConfig() (clientcmdapi.Config, error)
|
RawConfig() (clientcmdapi.Config, error)
|
||||||
// ClientConfig returns a complete client config
|
// ClientConfig returns a complete client config
|
||||||
ClientConfig() (*client.Config, error)
|
ClientConfig() (*restclient.Config, error)
|
||||||
// Namespace returns the namespace resulting from the merged
|
// Namespace returns the namespace resulting from the merged
|
||||||
// result of all overrides and a boolean indicating if it was
|
// result of all overrides and a boolean indicating if it was
|
||||||
// overridden
|
// overridden
|
||||||
|
@ -85,7 +85,7 @@ func (config *DirectClientConfig) RawConfig() (clientcmdapi.Config, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ClientConfig implements ClientConfig
|
// ClientConfig implements ClientConfig
|
||||||
func (config *DirectClientConfig) ClientConfig() (*client.Config, error) {
|
func (config *DirectClientConfig) ClientConfig() (*restclient.Config, error) {
|
||||||
if err := config.ConfirmUsable(); err != nil {
|
if err := config.ConfirmUsable(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -93,7 +93,7 @@ func (config *DirectClientConfig) ClientConfig() (*client.Config, error) {
|
||||||
configAuthInfo := config.getAuthInfo()
|
configAuthInfo := config.getAuthInfo()
|
||||||
configClusterInfo := config.getCluster()
|
configClusterInfo := config.getCluster()
|
||||||
|
|
||||||
clientConfig := &client.Config{}
|
clientConfig := &restclient.Config{}
|
||||||
clientConfig.Host = configClusterInfo.Server
|
clientConfig.Host = configClusterInfo.Server
|
||||||
if u, err := url.ParseRequestURI(clientConfig.Host); err == nil && u.Opaque == "" && len(u.Path) > 1 {
|
if u, err := url.ParseRequestURI(clientConfig.Host); err == nil && u.Opaque == "" && len(u.Path) > 1 {
|
||||||
u.RawQuery = ""
|
u.RawQuery = ""
|
||||||
|
@ -109,7 +109,7 @@ func (config *DirectClientConfig) ClientConfig() (*client.Config, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// only try to read the auth information if we are secure
|
// only try to read the auth information if we are secure
|
||||||
if client.IsConfigTransportTLS(*clientConfig) {
|
if restclient.IsConfigTransportTLS(*clientConfig) {
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
// mergo is a first write wins for map value and a last writing wins for interface values
|
// 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)
|
// 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)
|
// 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
|
// 3. load the ~/.kubernetes_auth file as a default
|
||||||
func getServerIdentificationPartialConfig(configAuthInfo clientcmdapi.AuthInfo, configClusterInfo clientcmdapi.Cluster) (*client.Config, error) {
|
func getServerIdentificationPartialConfig(configAuthInfo clientcmdapi.AuthInfo, configClusterInfo clientcmdapi.Cluster) (*restclient.Config, error) {
|
||||||
mergedConfig := &client.Config{}
|
mergedConfig := &restclient.Config{}
|
||||||
|
|
||||||
// configClusterInfo holds the information identify the server provided by .kubeconfig
|
// configClusterInfo holds the information identify the server provided by .kubeconfig
|
||||||
configClientConfig := &client.Config{}
|
configClientConfig := &restclient.Config{}
|
||||||
configClientConfig.CAFile = configClusterInfo.CertificateAuthority
|
configClientConfig.CAFile = configClusterInfo.CertificateAuthority
|
||||||
configClientConfig.CAData = configClusterInfo.CertificateAuthorityData
|
configClientConfig.CAData = configClusterInfo.CertificateAuthorityData
|
||||||
configClientConfig.Insecure = configClusterInfo.InsecureSkipTLSVerify
|
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)
|
// 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
|
// 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
|
// 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) {
|
func getUserIdentificationPartialConfig(configAuthInfo clientcmdapi.AuthInfo, fallbackReader io.Reader) (*restclient.Config, error) {
|
||||||
mergedConfig := &client.Config{}
|
mergedConfig := &restclient.Config{}
|
||||||
|
|
||||||
// blindly overwrite existing values based on precedence
|
// blindly overwrite existing values based on precedence
|
||||||
if len(configAuthInfo.Token) > 0 {
|
if len(configAuthInfo.Token) > 0 {
|
||||||
|
@ -182,7 +182,7 @@ func getUserIdentificationPartialConfig(configAuthInfo clientcmdapi.AuthInfo, fa
|
||||||
|
|
||||||
promptedConfig := makeUserIdentificationConfig(*promptedAuthInfo)
|
promptedConfig := makeUserIdentificationConfig(*promptedAuthInfo)
|
||||||
previouslyMergedConfig := mergedConfig
|
previouslyMergedConfig := mergedConfig
|
||||||
mergedConfig = &client.Config{}
|
mergedConfig = &restclient.Config{}
|
||||||
mergo.Merge(mergedConfig, promptedConfig)
|
mergo.Merge(mergedConfig, promptedConfig)
|
||||||
mergo.Merge(mergedConfig, previouslyMergedConfig)
|
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
|
// makeUserIdentificationFieldsConfig returns a client.Config capable of being merged using mergo for only user identification information
|
||||||
func makeUserIdentificationConfig(info clientauth.Info) *client.Config {
|
func makeUserIdentificationConfig(info clientauth.Info) *restclient.Config {
|
||||||
config := &client.Config{}
|
config := &restclient.Config{}
|
||||||
config.Username = info.User
|
config.Username = info.User
|
||||||
config.Password = info.Password
|
config.Password = info.Password
|
||||||
config.CertFile = info.CertFile
|
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
|
// makeUserIdentificationFieldsConfig returns a client.Config capable of being merged using mergo for only server identification information
|
||||||
func makeServerIdentificationConfig(info clientauth.Info) client.Config {
|
func makeServerIdentificationConfig(info clientauth.Info) restclient.Config {
|
||||||
config := client.Config{}
|
config := restclient.Config{}
|
||||||
config.CAFile = info.CAFile
|
config.CAFile = info.CAFile
|
||||||
if info.Insecure != nil {
|
if info.Insecure != nil {
|
||||||
config.Insecure = *info.Insecure
|
config.Insecure = *info.Insecure
|
||||||
|
@ -211,7 +211,7 @@ func makeServerIdentificationConfig(info clientauth.Info) client.Config {
|
||||||
return config
|
return config
|
||||||
}
|
}
|
||||||
|
|
||||||
func canIdentifyUser(config client.Config) bool {
|
func canIdentifyUser(config restclient.Config) bool {
|
||||||
return len(config.Username) > 0 ||
|
return len(config.Username) > 0 ||
|
||||||
(len(config.CertFile) > 0 || len(config.CertData) > 0) ||
|
(len(config.CertFile) > 0 || len(config.CertData) > 0) ||
|
||||||
len(config.BearerToken) > 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")
|
return clientcmdapi.Config{}, fmt.Errorf("inCluster environment config doesn't support multiple clusters")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (inClusterClientConfig) ClientConfig() (*client.Config, error) {
|
func (inClusterClientConfig) ClientConfig() (*restclient.Config, error) {
|
||||||
return client.InClusterConfig()
|
return restclient.InClusterConfig()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (inClusterClientConfig) Namespace() (string, error) {
|
func (inClusterClientConfig) Namespace() (string, error) {
|
||||||
|
@ -358,10 +358,10 @@ func (inClusterClientConfig) Possible() bool {
|
||||||
// components. Warnings should reflect this usage. If neither masterUrl or kubeconfigPath
|
// components. Warnings should reflect this usage. If neither masterUrl or kubeconfigPath
|
||||||
// are passed in we fallback to inClusterConfig. If inClusterConfig fails, we fallback
|
// are passed in we fallback to inClusterConfig. If inClusterConfig fails, we fallback
|
||||||
// to the default config.
|
// to the default config.
|
||||||
func BuildConfigFromFlags(masterUrl, kubeconfigPath string) (*client.Config, error) {
|
func BuildConfigFromFlags(masterUrl, kubeconfigPath string) (*restclient.Config, error) {
|
||||||
if kubeconfigPath == "" && masterUrl == "" {
|
if kubeconfigPath == "" && masterUrl == "" {
|
||||||
glog.Warningf("Neither --kubeconfig nor --master was specified. Using the inClusterConfig. This might not work.")
|
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 {
|
if err == nil {
|
||||||
return kubeconfig, nil
|
return kubeconfig, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ import (
|
||||||
|
|
||||||
"github.com/imdario/mergo"
|
"github.com/imdario/mergo"
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"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"
|
clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -244,7 +244,7 @@ func TestCreateMissingContext(t *testing.T) {
|
||||||
t.Errorf("Unexpected error: %v", err)
|
t.Errorf("Unexpected error: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
expectedConfig := &client.Config{Host: clientConfig.Host}
|
expectedConfig := &restclient.Config{Host: clientConfig.Host}
|
||||||
|
|
||||||
if !reflect.DeepEqual(expectedConfig, clientConfig) {
|
if !reflect.DeepEqual(expectedConfig, clientConfig) {
|
||||||
t.Errorf("Expected %#v, got %#v", expectedConfig, clientConfig)
|
t.Errorf("Expected %#v, got %#v", expectedConfig, clientConfig)
|
||||||
|
|
|
@ -23,7 +23,7 @@ import (
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"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"
|
clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ func (config *DeferredLoadingClientConfig) RawConfig() (clientcmdapi.Config, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// ClientConfig implements ClientConfig
|
// ClientConfig implements ClientConfig
|
||||||
func (config *DeferredLoadingClientConfig) ClientConfig() (*client.Config, error) {
|
func (config *DeferredLoadingClientConfig) ClientConfig() (*restclient.Config, error) {
|
||||||
mergedClientConfig, err := config.createClientConfig()
|
mergedClientConfig, err := config.createClientConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
@ -16,11 +16,6 @@ limitations under the License.
|
||||||
|
|
||||||
package unversioned_test
|
package unversioned_test
|
||||||
|
|
||||||
import (
|
|
||||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
|
||||||
)
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
@ -30,6 +25,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
|
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api/errors"
|
"k8s.io/kubernetes/pkg/api/errors"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/version"
|
"k8s.io/kubernetes/pkg/version"
|
||||||
)
|
)
|
||||||
|
@ -70,7 +71,7 @@ type SwaggerSchemaInterface interface {
|
||||||
// DiscoveryClient implements the functions that discover server-supported API groups,
|
// DiscoveryClient implements the functions that discover server-supported API groups,
|
||||||
// versions and resources.
|
// versions and resources.
|
||||||
type DiscoveryClient struct {
|
type DiscoveryClient struct {
|
||||||
*RESTClient
|
*restclient.RESTClient
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert unversioned.APIVersions to unversioned.APIGroup. APIVersions is used by legacy v1, so
|
// 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
|
return &schema, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func setDiscoveryDefaults(config *Config) error {
|
func setDiscoveryDefaults(config *restclient.Config) error {
|
||||||
config.APIPath = ""
|
config.APIPath = ""
|
||||||
config.GroupVersion = nil
|
config.GroupVersion = nil
|
||||||
config.Codec = runtime.NoopEncoder{api.Codecs.UniversalDecoder()}
|
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
|
// NewDiscoveryClientForConfig creates a new DiscoveryClient for the given config. This client
|
||||||
// can be used to discover supported resources in the API server.
|
// 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
|
config := *c
|
||||||
if err := setDiscoveryDefaults(&config); err != nil {
|
if err := setDiscoveryDefaults(&config); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
client, err := UnversionedRESTClientFor(&config)
|
client, err := restclient.UnversionedRESTClientFor(&config)
|
||||||
return &DiscoveryClient{client}, err
|
return &DiscoveryClient{client}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewDiscoveryClientForConfig creates a new DiscoveryClient for the given config. If
|
// NewDiscoveryClientForConfig creates a new DiscoveryClient for the given config. If
|
||||||
// there is an error, it panics.
|
// there is an error, it panics.
|
||||||
func NewDiscoveryClientForConfigOrDie(c *Config) *DiscoveryClient {
|
func NewDiscoveryClientForConfigOrDie(c *restclient.Config) *DiscoveryClient {
|
||||||
client, err := NewDiscoveryClientForConfig(c)
|
client, err := NewDiscoveryClientForConfig(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
@ -237,6 +238,6 @@ func NewDiscoveryClientForConfigOrDie(c *Config) *DiscoveryClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
// New creates a new DiscoveryClient for the given RESTClient.
|
// New creates a new DiscoveryClient for the given RESTClient.
|
||||||
func NewDiscoveryClient(c *RESTClient) *DiscoveryClient {
|
func NewDiscoveryClient(c *restclient.RESTClient) *DiscoveryClient {
|
||||||
return &DiscoveryClient{c}
|
return &DiscoveryClient{c}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,16 +16,12 @@ limitations under the License.
|
||||||
|
|
||||||
package unversioned_test
|
package unversioned_test
|
||||||
|
|
||||||
import (
|
|
||||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
|
||||||
)
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
|
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestListEndpoints(t *testing.T) {
|
func TestListEndpoints(t *testing.T) {
|
||||||
|
|
|
@ -20,6 +20,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Interface holds the experimental methods for clients of Kubernetes
|
// 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
|
// Features of Extensions group are not supported and may be changed or removed in
|
||||||
// incompatible ways at any time.
|
// incompatible ways at any time.
|
||||||
type ExtensionsClient struct {
|
type ExtensionsClient struct {
|
||||||
*RESTClient
|
*restclient.RESTClient
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ExtensionsClient) PodSecurityPolicies() PodSecurityPolicyInterface {
|
func (c *ExtensionsClient) PodSecurityPolicies() PodSecurityPolicyInterface {
|
||||||
|
@ -85,12 +86,12 @@ func (c *ExtensionsClient) ReplicaSets(namespace string) ReplicaSetInterface {
|
||||||
// provides access to experimental Kubernetes features.
|
// provides access to experimental Kubernetes features.
|
||||||
// Features of Extensions group are not supported and may be changed or removed in
|
// Features of Extensions group are not supported and may be changed or removed in
|
||||||
// incompatible ways at any time.
|
// incompatible ways at any time.
|
||||||
func NewExtensions(c *Config) (*ExtensionsClient, error) {
|
func NewExtensions(c *restclient.Config) (*ExtensionsClient, error) {
|
||||||
config := *c
|
config := *c
|
||||||
if err := setExtensionsDefaults(&config); err != nil {
|
if err := setExtensionsDefaults(&config); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
client, err := RESTClientFor(&config)
|
client, err := restclient.RESTClientFor(&config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -101,7 +102,7 @@ func NewExtensions(c *Config) (*ExtensionsClient, error) {
|
||||||
// panics if there is an error in the config.
|
// panics if there is an error in the config.
|
||||||
// Features of Extensions group are not supported and may be changed or removed in
|
// Features of Extensions group are not supported and may be changed or removed in
|
||||||
// incompatible ways at any time.
|
// incompatible ways at any time.
|
||||||
func NewExtensionsOrDie(c *Config) *ExtensionsClient {
|
func NewExtensionsOrDie(c *restclient.Config) *ExtensionsClient {
|
||||||
client, err := NewExtensions(c)
|
client, err := NewExtensions(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
@ -109,7 +110,7 @@ func NewExtensionsOrDie(c *Config) *ExtensionsClient {
|
||||||
return client
|
return client
|
||||||
}
|
}
|
||||||
|
|
||||||
func setExtensionsDefaults(config *Config) error {
|
func setExtensionsDefaults(config *restclient.Config) error {
|
||||||
// if experimental group is not registered, return an error
|
// if experimental group is not registered, return an error
|
||||||
g, err := registered.Group(extensions.GroupName)
|
g, err := registered.Group(extensions.GroupName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -117,7 +118,7 @@ func setExtensionsDefaults(config *Config) error {
|
||||||
}
|
}
|
||||||
config.APIPath = defaultAPIPath
|
config.APIPath = defaultAPIPath
|
||||||
if config.UserAgent == "" {
|
if config.UserAgent == "" {
|
||||||
config.UserAgent = DefaultKubernetesUserAgent()
|
config.UserAgent = restclient.DefaultKubernetesUserAgent()
|
||||||
}
|
}
|
||||||
// TODO: Unconditionally set the config.Version, until we fix the config.
|
// TODO: Unconditionally set the config.Version, until we fix the config.
|
||||||
//if config.Version == "" {
|
//if config.Version == "" {
|
||||||
|
|
|
@ -24,7 +24,7 @@ import (
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned"
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -49,28 +49,28 @@ type RESTClient struct {
|
||||||
Err error
|
Err error
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *RESTClient) Get() *unversioned.Request {
|
func (c *RESTClient) Get() *restclient.Request {
|
||||||
return c.request("GET")
|
return c.request("GET")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *RESTClient) Put() *unversioned.Request {
|
func (c *RESTClient) Put() *restclient.Request {
|
||||||
return c.request("PUT")
|
return c.request("PUT")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *RESTClient) Patch(_ api.PatchType) *unversioned.Request {
|
func (c *RESTClient) Patch(_ api.PatchType) *restclient.Request {
|
||||||
return c.request("PATCH")
|
return c.request("PATCH")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *RESTClient) Post() *unversioned.Request {
|
func (c *RESTClient) Post() *restclient.Request {
|
||||||
return c.request("POST")
|
return c.request("POST")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *RESTClient) Delete() *unversioned.Request {
|
func (c *RESTClient) Delete() *restclient.Request {
|
||||||
return c.request("DELETE")
|
return c.request("DELETE")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *RESTClient) request(verb string) *unversioned.Request {
|
func (c *RESTClient) request(verb string) *restclient.Request {
|
||||||
return unversioned.NewRequest(c, verb, &url.URL{Host: "localhost"}, "", unversioned.ContentConfig{GroupVersion: testapi.Default.GroupVersion(), Codec: c.Codec}, nil, nil)
|
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) {
|
func (c *RESTClient) Do(req *http.Request) (*http.Response, error) {
|
||||||
|
|
|
@ -17,27 +17,16 @@ limitations under the License.
|
||||||
package unversioned
|
package unversioned
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
|
||||||
"net"
|
|
||||||
"net/http"
|
|
||||||
"net/url"
|
|
||||||
"os"
|
|
||||||
"path"
|
|
||||||
"reflect"
|
"reflect"
|
||||||
gruntime "runtime"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/golang/glog"
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
||||||
"k8s.io/kubernetes/pkg/apis/autoscaling"
|
"k8s.io/kubernetes/pkg/apis/autoscaling"
|
||||||
"k8s.io/kubernetes/pkg/apis/batch"
|
"k8s.io/kubernetes/pkg/apis/batch"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
|
||||||
"k8s.io/kubernetes/pkg/util/sets"
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
"k8s.io/kubernetes/pkg/version"
|
"k8s.io/kubernetes/pkg/version"
|
||||||
)
|
)
|
||||||
|
@ -47,106 +36,16 @@ const (
|
||||||
defaultAPIPath = "/apis"
|
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,
|
// 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
|
// 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
|
// and delete on these objects. An error is returned if the provided configuration
|
||||||
// is not valid.
|
// is not valid.
|
||||||
func New(c *Config) (*Client, error) {
|
func New(c *restclient.Config) (*Client, error) {
|
||||||
config := *c
|
config := *c
|
||||||
if err := SetKubernetesDefaults(&config); err != nil {
|
if err := SetKubernetesDefaults(&config); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
client, err := RESTClientFor(&config)
|
client, err := restclient.RESTClientFor(&config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -190,7 +89,7 @@ func New(c *Config) (*Client, error) {
|
||||||
// MatchesServerVersion queries the server to compares the build version
|
// MatchesServerVersion queries the server to compares the build version
|
||||||
// (git hash) of the client with the server's build version. It returns an error
|
// (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.
|
// 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
|
var err error
|
||||||
if client == nil {
|
if client == nil {
|
||||||
client, err = New(c)
|
client, err = New(c)
|
||||||
|
@ -220,56 +119,6 @@ func ExtractGroupVersions(l *unversioned.APIGroupList) []string {
|
||||||
return groupVersions
|
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
|
// NegotiateVersion queries the server's supported api versions to find
|
||||||
// a version that both client and server support.
|
// a version that both client and server support.
|
||||||
// - If no version is provided, try registered client versions in order of
|
// - 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.
|
// stderr and try client's registered versions in order of preference.
|
||||||
// - If version is config default, and the server does not support it,
|
// - If version is config default, and the server does not support it,
|
||||||
// return an error.
|
// 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
|
var err error
|
||||||
if client == nil {
|
if client == nil {
|
||||||
client, err = New(c)
|
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.
|
// 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)
|
client, err := New(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
@ -357,39 +206,9 @@ func NewOrDie(c *Config) *Client {
|
||||||
return 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().
|
// NewInCluster is a shortcut for calling InClusterConfig() and then New().
|
||||||
func NewInCluster() (*Client, error) {
|
func NewInCluster() (*Client, error) {
|
||||||
cc, err := InClusterConfig()
|
cc, err := restclient.InClusterConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -399,13 +218,10 @@ func NewInCluster() (*Client, error) {
|
||||||
// SetKubernetesDefaults sets default values on the provided client config for accessing the
|
// 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.
|
// 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"
|
// 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 == "" {
|
if config.APIPath == "" {
|
||||||
config.APIPath = legacyAPIPath
|
config.APIPath = legacyAPIPath
|
||||||
}
|
}
|
||||||
if len(config.UserAgent) == 0 {
|
|
||||||
config.UserAgent = DefaultKubernetesUserAgent()
|
|
||||||
}
|
|
||||||
g, err := registered.Group(api.GroupName)
|
g, err := registered.Group(api.GroupName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -416,233 +232,6 @@ func SetKubernetesDefaults(config *Config) error {
|
||||||
if config.Codec == nil {
|
if config.Codec == nil {
|
||||||
config.Codec = api.Codecs.LegacyCodec(*config.GroupVersion)
|
config.Codec = api.Codecs.LegacyCodec(*config.GroupVersion)
|
||||||
}
|
}
|
||||||
if config.QPS == 0.0 {
|
|
||||||
config.QPS = 5.0
|
return restclient.SetKubernetesDefaults(config)
|
||||||
}
|
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ import (
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
uapi "k8s.io/kubernetes/pkg/api/unversioned"
|
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"
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/fake"
|
"k8s.io/kubernetes/pkg/client/unversioned/fake"
|
||||||
)
|
)
|
||||||
|
@ -48,14 +48,14 @@ func TestNegotiateVersion(t *testing.T) {
|
||||||
expectedVersion *uapi.GroupVersion
|
expectedVersion *uapi.GroupVersion
|
||||||
serverVersions []string
|
serverVersions []string
|
||||||
clientVersions []uapi.GroupVersion
|
clientVersions []uapi.GroupVersion
|
||||||
config *unversioned.Config
|
config *restclient.Config
|
||||||
expectErr func(err error) bool
|
expectErr func(err error) bool
|
||||||
sendErr error
|
sendErr error
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "server supports client default",
|
name: "server supports client default",
|
||||||
version: &uapi.GroupVersion{Version: "version1"},
|
version: &uapi.GroupVersion{Version: "version1"},
|
||||||
config: &unversioned.Config{},
|
config: &restclient.Config{},
|
||||||
serverVersions: []string{"version1", testapi.Default.GroupVersion().String()},
|
serverVersions: []string{"version1", testapi.Default.GroupVersion().String()},
|
||||||
clientVersions: []uapi.GroupVersion{{Version: "version1"}, *testapi.Default.GroupVersion()},
|
clientVersions: []uapi.GroupVersion{{Version: "version1"}, *testapi.Default.GroupVersion()},
|
||||||
expectedVersion: &uapi.GroupVersion{Version: "version1"},
|
expectedVersion: &uapi.GroupVersion{Version: "version1"},
|
||||||
|
@ -63,28 +63,28 @@ func TestNegotiateVersion(t *testing.T) {
|
||||||
{
|
{
|
||||||
name: "server falls back to client supported",
|
name: "server falls back to client supported",
|
||||||
version: testapi.Default.GroupVersion(),
|
version: testapi.Default.GroupVersion(),
|
||||||
config: &unversioned.Config{},
|
config: &restclient.Config{},
|
||||||
serverVersions: []string{"version1"},
|
serverVersions: []string{"version1"},
|
||||||
clientVersions: []uapi.GroupVersion{{Version: "version1"}, *testapi.Default.GroupVersion()},
|
clientVersions: []uapi.GroupVersion{{Version: "version1"}, *testapi.Default.GroupVersion()},
|
||||||
expectedVersion: &uapi.GroupVersion{Version: "version1"},
|
expectedVersion: &uapi.GroupVersion{Version: "version1"},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "explicit version supported",
|
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()},
|
serverVersions: []string{"/version1", testapi.Default.GroupVersion().String()},
|
||||||
clientVersions: []uapi.GroupVersion{{Version: "version1"}, *testapi.Default.GroupVersion()},
|
clientVersions: []uapi.GroupVersion{{Version: "version1"}, *testapi.Default.GroupVersion()},
|
||||||
expectedVersion: testapi.Default.GroupVersion(),
|
expectedVersion: testapi.Default.GroupVersion(),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "explicit version not supported",
|
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"},
|
serverVersions: []string{"version1"},
|
||||||
clientVersions: []uapi.GroupVersion{{Version: "version1"}, *testapi.Default.GroupVersion()},
|
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"`) },
|
expectErr: func(err error) bool { return strings.Contains(err.Error(), `server does not support API version "v1"`) },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "connection refused error",
|
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"},
|
serverVersions: []string{"version1"},
|
||||||
clientVersions: []uapi.GroupVersion{{Version: "version1"}, *testapi.Default.GroupVersion()},
|
clientVersions: []uapi.GroupVersion{{Version: "version1"}, *testapi.Default.GroupVersion()},
|
||||||
sendErr: errors.New("connection refused"),
|
sendErr: errors.New("connection refused"),
|
||||||
|
@ -98,13 +98,13 @@ func TestNegotiateVersion(t *testing.T) {
|
||||||
Codec: codec,
|
Codec: codec,
|
||||||
Resp: &http.Response{
|
Resp: &http.Response{
|
||||||
StatusCode: 200,
|
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) {
|
Client: fake.CreateHTTPClient(func(req *http.Request) (*http.Response, error) {
|
||||||
if test.sendErr != nil {
|
if test.sendErr != nil {
|
||||||
return nil, test.sendErr
|
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)
|
c := unversioned.NewOrDie(test.config)
|
||||||
|
|
|
@ -20,80 +20,26 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"path"
|
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"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) {
|
func TestSetKubernetesDefaults(t *testing.T) {
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
Config Config
|
Config restclient.Config
|
||||||
After Config
|
After restclient.Config
|
||||||
Err bool
|
Err bool
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
Config{},
|
restclient.Config{},
|
||||||
Config{
|
restclient.Config{
|
||||||
APIPath: "/api",
|
APIPath: "/api",
|
||||||
ContentConfig: ContentConfig{
|
ContentConfig: restclient.ContentConfig{
|
||||||
GroupVersion: testapi.Default.GroupVersion(),
|
GroupVersion: testapi.Default.GroupVersion(),
|
||||||
Codec: testapi.Default.Codec(),
|
Codec: testapi.Default.Codec(),
|
||||||
},
|
},
|
||||||
|
@ -104,10 +50,10 @@ func TestSetKubernetesDefaults(t *testing.T) {
|
||||||
},
|
},
|
||||||
// Add this test back when we fixed config and SetKubernetesDefaults
|
// Add this test back when we fixed config and SetKubernetesDefaults
|
||||||
// {
|
// {
|
||||||
// Config{
|
// restclient.Config{
|
||||||
// GroupVersion: &unversioned.GroupVersion{Group: "not.a.group", Version: "not_an_api"},
|
// GroupVersion: &unversioned.GroupVersion{Group: "not.a.group", Version: "not_an_api"},
|
||||||
// },
|
// },
|
||||||
// Config{},
|
// restclient.Config{},
|
||||||
// true,
|
// 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) {
|
func TestHelperGetServerAPIVersions(t *testing.T) {
|
||||||
expect := []string{"v1", "v2", "v3"}
|
expect := []string{"v1", "v2", "v3"}
|
||||||
APIVersions := unversioned.APIVersions{Versions: expect}
|
APIVersions := unversioned.APIVersions{Versions: expect}
|
||||||
|
@ -190,7 +126,7 @@ func TestHelperGetServerAPIVersions(t *testing.T) {
|
||||||
}))
|
}))
|
||||||
// TODO: Uncomment when fix #19254
|
// TODO: Uncomment when fix #19254
|
||||||
// defer server.Close()
|
// 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 {
|
if err != nil {
|
||||||
t.Fatalf("unexpected encoding error: %v", err)
|
t.Fatalf("unexpected encoding error: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -210,7 +146,19 @@ func TestSetsCodec(t *testing.T) {
|
||||||
// "invalidVersion": {true, "", nil},
|
// "invalidVersion": {true, "", nil},
|
||||||
}
|
}
|
||||||
for version, expected := range testCases {
|
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 {
|
switch {
|
||||||
case err == nil && expected.Err:
|
case err == nil && expected.Err:
|
||||||
t.Errorf("expected error but was nil")
|
t.Errorf("expected error but was nil")
|
||||||
|
@ -221,60 +169,11 @@ func TestSetsCodec(t *testing.T) {
|
||||||
case err != nil:
|
case err != nil:
|
||||||
continue
|
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)
|
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)
|
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -16,11 +16,6 @@ limitations under the License.
|
||||||
|
|
||||||
package unversioned_test
|
package unversioned_test
|
||||||
|
|
||||||
import (
|
|
||||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
|
||||||
)
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -29,13 +24,15 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
"k8s.io/kubernetes/pkg/apis/autoscaling"
|
"k8s.io/kubernetes/pkg/apis/autoscaling"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
|
"k8s.io/kubernetes/pkg/client/unversioned"
|
||||||
|
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getHorizontalPodAutoscalersResoureName() string {
|
func getHorizontalPodAutoscalersResoureName() string {
|
||||||
return "horizontalpodautoscalers"
|
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 {
|
switch resourceGroup {
|
||||||
case autoscaling.GroupName:
|
case autoscaling.GroupName:
|
||||||
return c.Setup(t).Autoscaling().HorizontalPodAutoscalers(ns)
|
return c.Setup(t).Autoscaling().HorizontalPodAutoscalers(ns)
|
||||||
|
|
|
@ -16,17 +16,13 @@ limitations under the License.
|
||||||
|
|
||||||
package unversioned_test
|
package unversioned_test
|
||||||
|
|
||||||
import (
|
|
||||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
|
||||||
)
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
|
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getIngressResourceName() string {
|
func getIngressResourceName() string {
|
||||||
|
|
|
@ -16,11 +16,6 @@ limitations under the License.
|
||||||
|
|
||||||
package unversioned_test
|
package unversioned_test
|
||||||
|
|
||||||
import (
|
|
||||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
|
||||||
)
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
@ -28,13 +23,15 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
"k8s.io/kubernetes/pkg/apis/batch"
|
"k8s.io/kubernetes/pkg/apis/batch"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
|
"k8s.io/kubernetes/pkg/client/unversioned"
|
||||||
|
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getJobsResourceName() string {
|
func getJobsResourceName() string {
|
||||||
return "jobs"
|
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 {
|
switch resourceGroup {
|
||||||
case batch.GroupName:
|
case batch.GroupName:
|
||||||
return c.Setup(t).Batch().Jobs(ns)
|
return c.Setup(t).Batch().Jobs(ns)
|
||||||
|
|
|
@ -16,11 +16,6 @@ limitations under the License.
|
||||||
|
|
||||||
package unversioned_test
|
package unversioned_test
|
||||||
|
|
||||||
import (
|
|
||||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
|
||||||
)
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -28,6 +23,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/resource"
|
"k8s.io/kubernetes/pkg/api/resource"
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
|
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getLimitRangesResourceName() string {
|
func getLimitRangesResourceName() string {
|
||||||
|
|
|
@ -16,17 +16,13 @@ limitations under the License.
|
||||||
|
|
||||||
package unversioned_test
|
package unversioned_test
|
||||||
|
|
||||||
import (
|
|
||||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
|
||||||
)
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
|
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestNamespaceCreate(t *testing.T) {
|
func TestNamespaceCreate(t *testing.T) {
|
||||||
|
|
|
@ -16,11 +16,6 @@ limitations under the License.
|
||||||
|
|
||||||
package unversioned_test
|
package unversioned_test
|
||||||
|
|
||||||
import (
|
|
||||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
|
||||||
)
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -29,6 +24,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api/resource"
|
"k8s.io/kubernetes/pkg/api/resource"
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
|
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -16,11 +16,6 @@ limitations under the License.
|
||||||
|
|
||||||
package unversioned_test
|
package unversioned_test
|
||||||
|
|
||||||
import (
|
|
||||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
|
||||||
)
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -28,6 +23,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/resource"
|
"k8s.io/kubernetes/pkg/api/resource"
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
|
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getPersistentVolumesResoureName() string {
|
func getPersistentVolumesResoureName() string {
|
||||||
|
|
|
@ -16,11 +16,6 @@ limitations under the License.
|
||||||
|
|
||||||
package unversioned_test
|
package unversioned_test
|
||||||
|
|
||||||
import (
|
|
||||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
|
||||||
)
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -28,6 +23,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/resource"
|
"k8s.io/kubernetes/pkg/api/resource"
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
|
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getPersistentVolumeClaimsResoureName() string {
|
func getPersistentVolumeClaimsResoureName() string {
|
||||||
|
|
|
@ -16,17 +16,13 @@ limitations under the License.
|
||||||
|
|
||||||
package unversioned_test
|
package unversioned_test
|
||||||
|
|
||||||
import (
|
|
||||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
|
||||||
)
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
|
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getPodTemplatesResoureName() string {
|
func getPodTemplatesResoureName() string {
|
||||||
|
|
|
@ -18,6 +18,7 @@ package unversioned
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -36,7 +37,7 @@ type PodInterface interface {
|
||||||
Watch(opts api.ListOptions) (watch.Interface, error)
|
Watch(opts api.ListOptions) (watch.Interface, error)
|
||||||
Bind(binding *api.Binding) error
|
Bind(binding *api.Binding) error
|
||||||
UpdateStatus(pod *api.Pod) (*api.Pod, 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
|
// 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
|
// 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)
|
return c.r.Get().Namespace(c.ns).Name(name).Resource("pods").SubResource("log").VersionedParams(opts, api.ParameterCodec)
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,8 +16,6 @@ limitations under the License.
|
||||||
|
|
||||||
package unversioned_test
|
package unversioned_test
|
||||||
|
|
||||||
import . "k8s.io/kubernetes/pkg/client/unversioned"
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
|
@ -24,7 +24,6 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/remotecommand"
|
"k8s.io/kubernetes/pkg/client/unversioned/remotecommand"
|
||||||
kubeletserver "k8s.io/kubernetes/pkg/kubelet/server"
|
kubeletserver "k8s.io/kubernetes/pkg/kubelet/server"
|
||||||
"k8s.io/kubernetes/pkg/types"
|
"k8s.io/kubernetes/pkg/types"
|
||||||
|
@ -298,7 +298,7 @@ func TestForwardPorts(t *testing.T) {
|
||||||
server := httptest.NewServer(fakePortForwardServer(t, testName, test.serverSends, test.clientSends))
|
server := httptest.NewServer(fakePortForwardServer(t, testName, test.serverSends, test.clientSends))
|
||||||
|
|
||||||
url, _ := url.Parse(server.URL)
|
url, _ := url.Parse(server.URL)
|
||||||
exec, err := remotecommand.NewExecutor(&client.Config{}, "POST", url)
|
exec, err := remotecommand.NewExecutor(&restclient.Config{}, "POST", url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -374,7 +374,7 @@ func TestForwardPortsReturnsErrorWhenAllBindsFailed(t *testing.T) {
|
||||||
// defer server.Close()
|
// defer server.Close()
|
||||||
|
|
||||||
url, _ := url.Parse(server.URL)
|
url, _ := url.Parse(server.URL)
|
||||||
exec, err := remotecommand.NewExecutor(&client.Config{}, "POST", url)
|
exec, err := remotecommand.NewExecutor(&restclient.Config{}, "POST", url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,8 +24,8 @@ import (
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
|
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/client/transport"
|
"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"
|
||||||
"k8s.io/kubernetes/pkg/util/httpstream/spdy"
|
"k8s.io/kubernetes/pkg/util/httpstream/spdy"
|
||||||
)
|
)
|
||||||
|
@ -59,14 +59,14 @@ type streamExecutor struct {
|
||||||
// multiplexed bidirectional streams. The current implementation uses SPDY,
|
// multiplexed bidirectional streams. The current implementation uses SPDY,
|
||||||
// but this could be replaced with HTTP/2 once it's available, or something else.
|
// 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.
|
// TODO: the common code between this and portforward could be abstracted.
|
||||||
func NewExecutor(config *client.Config, method string, url *url.URL) (StreamExecutor, error) {
|
func NewExecutor(config *restclient.Config, method string, url *url.URL) (StreamExecutor, error) {
|
||||||
tlsConfig, err := client.TLSConfigFor(config)
|
tlsConfig, err := restclient.TLSConfigFor(config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
upgradeRoundTripper := spdy.NewRoundTripper(tlsConfig)
|
upgradeRoundTripper := spdy.NewRoundTripper(tlsConfig)
|
||||||
wrapper, err := client.HTTPWrappersForConfig(config, upgradeRoundTripper)
|
wrapper, err := restclient.HTTPWrappersForConfig(config, upgradeRoundTripper)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ import (
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"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"
|
||||||
"k8s.io/kubernetes/pkg/util/httpstream/spdy"
|
"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))
|
server := httptest.NewServer(fakeExecServer(t, i, testCase.Stdin, testCase.Stdout, testCase.Stderr, testCase.Error, testCase.Tty, testCase.MessageCount))
|
||||||
|
|
||||||
url, _ := url.ParseRequestURI(server.URL)
|
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 := c.Post().Resource("testing")
|
||||||
req.SetHeader(httpstream.HeaderProtocolVersion, StreamProtocolV2Name)
|
req.SetHeader(httpstream.HeaderProtocolVersion, StreamProtocolV2Name)
|
||||||
req.Param("command", "ls")
|
req.Param("command", "ls")
|
||||||
req.Param("command", "/")
|
req.Param("command", "/")
|
||||||
conf := &client.Config{
|
conf := &restclient.Config{
|
||||||
Host: server.URL,
|
Host: server.URL,
|
||||||
}
|
}
|
||||||
e, err := NewExecutor(conf, "POST", req.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))
|
server := httptest.NewServer(fakeExecServer(t, i, testCase.Stdin, testCase.Stdout, testCase.Stderr, testCase.Error, testCase.Tty, 1))
|
||||||
|
|
||||||
url, _ := url.ParseRequestURI(server.URL)
|
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 := c.Post().Resource("testing")
|
||||||
|
|
||||||
conf := &client.Config{
|
conf := &restclient.Config{
|
||||||
Host: server.URL,
|
Host: server.URL,
|
||||||
}
|
}
|
||||||
e, err := NewExecutor(conf, "POST", req.URL())
|
e, err := NewExecutor(conf, "POST", req.URL())
|
||||||
|
|
|
@ -16,17 +16,13 @@ limitations under the License.
|
||||||
|
|
||||||
package unversioned_test
|
package unversioned_test
|
||||||
|
|
||||||
import (
|
|
||||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
|
||||||
)
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
|
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getReplicaSetResourceName() string {
|
func getReplicaSetResourceName() string {
|
||||||
|
|
|
@ -16,16 +16,12 @@ limitations under the License.
|
||||||
|
|
||||||
package unversioned_test
|
package unversioned_test
|
||||||
|
|
||||||
import (
|
|
||||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
|
||||||
)
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
|
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getRCResourceName() string {
|
func getRCResourceName() string {
|
||||||
|
|
|
@ -16,11 +16,6 @@ limitations under the License.
|
||||||
|
|
||||||
package unversioned_test
|
package unversioned_test
|
||||||
|
|
||||||
import (
|
|
||||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
|
||||||
)
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -28,6 +23,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/resource"
|
"k8s.io/kubernetes/pkg/api/resource"
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
|
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getResourceQuotasResoureName() string {
|
func getResourceQuotasResoureName() string {
|
||||||
|
|
|
@ -18,6 +18,7 @@ package unversioned
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/util/net"
|
"k8s.io/kubernetes/pkg/util/net"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
)
|
)
|
||||||
|
@ -36,7 +37,7 @@ type ServiceInterface interface {
|
||||||
UpdateStatus(srv *api.Service) (*api.Service, error)
|
UpdateStatus(srv *api.Service) (*api.Service, error)
|
||||||
Delete(name string) error
|
Delete(name string) error
|
||||||
Watch(opts api.ListOptions) (watch.Interface, 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
|
// 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.
|
// 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().
|
request := c.r.Get().
|
||||||
Namespace(c.ns).
|
Namespace(c.ns).
|
||||||
Resource("services").
|
Resource("services").
|
||||||
|
|
|
@ -16,11 +16,6 @@ limitations under the License.
|
||||||
|
|
||||||
package unversioned_test
|
package unversioned_test
|
||||||
|
|
||||||
import (
|
|
||||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
|
||||||
)
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/url"
|
"net/url"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -28,6 +23,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
|
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ package testclient
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"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/labels"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
)
|
)
|
||||||
|
@ -104,7 +104,7 @@ func (c *FakePods) UpdateStatus(pod *api.Pod) (*api.Pod, error) {
|
||||||
return obj.(*api.Pod), err
|
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 := GenericActionImpl{}
|
||||||
action.Verb = "get"
|
action.Verb = "get"
|
||||||
action.Namespace = c.Namespace
|
action.Namespace = c.Namespace
|
||||||
|
@ -113,5 +113,5 @@ func (c *FakePods) GetLogs(name string, opts *api.PodLogOptions) *client.Request
|
||||||
action.Value = opts
|
action.Value = opts
|
||||||
|
|
||||||
_, _ = c.Fake.Invokes(action, &api.Pod{})
|
_, _ = c.Fake.Invokes(action, &api.Pod{})
|
||||||
return &client.Request{}
|
return &restclient.Request{}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@ package testclient
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"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))
|
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))
|
return c.Fake.InvokesProxy(NewProxyGetAction("services", c.Namespace, scheme, name, port, path, params))
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api/errors"
|
"k8s.io/kubernetes/pkg/api/errors"
|
||||||
"k8s.io/kubernetes/pkg/api/meta"
|
"k8s.io/kubernetes/pkg/api/meta"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"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/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util/yaml"
|
"k8s.io/kubernetes/pkg/util/yaml"
|
||||||
"k8s.io/kubernetes/pkg/watch"
|
"k8s.io/kubernetes/pkg/watch"
|
||||||
|
@ -311,6 +311,6 @@ func (r *SimpleProxyReactor) Handles(action Action) bool {
|
||||||
return true
|
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)
|
return r.Reaction(action)
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
client "k8s.io/kubernetes/pkg/client/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/fields"
|
"k8s.io/kubernetes/pkg/fields"
|
||||||
"k8s.io/kubernetes/pkg/labels"
|
"k8s.io/kubernetes/pkg/labels"
|
||||||
|
@ -81,27 +82,27 @@ func (c *Client) Setup(t *testing.T) *Client {
|
||||||
}
|
}
|
||||||
c.server = httptest.NewServer(c.handler)
|
c.server = httptest.NewServer(c.handler)
|
||||||
if c.Client == nil {
|
if c.Client == nil {
|
||||||
c.Client = client.NewOrDie(&client.Config{
|
c.Client = client.NewOrDie(&restclient.Config{
|
||||||
Host: c.server.URL,
|
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.
|
// TODO: caesarxuchao: hacky way to specify version of Experimental client.
|
||||||
// We will fix this by supporting multiple group versions in Config
|
// 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,
|
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,
|
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,
|
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{}
|
c.QueryValidator = map[string]func(string, string) bool{}
|
||||||
return c
|
return c
|
||||||
|
|
|
@ -26,6 +26,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/api/v1"
|
"k8s.io/kubernetes/pkg/api/v1"
|
||||||
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
client "k8s.io/kubernetes/pkg/client/unversioned"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/version"
|
"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 indicates whether or not this Reactor deals with a given action
|
||||||
Handles(action Action) bool
|
Handles(action Action) bool
|
||||||
// React handles a watch action and returns results. It may choose to delegate by indicated handled=false
|
// 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,
|
// 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,
|
// 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
|
// 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
|
// AddReactor appends a reactor to the end of the chain
|
||||||
func (c *Fake) AddReactor(verb, resource string, reaction ReactionFunc) {
|
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).
|
// 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()
|
c.Lock()
|
||||||
defer c.Unlock()
|
defer c.Unlock()
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,6 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/testapi"
|
"k8s.io/kubernetes/pkg/api/testapi"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
. "k8s.io/kubernetes/pkg/client/unversioned"
|
|
||||||
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
"k8s.io/kubernetes/pkg/client/unversioned/testclient/simple"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/client/cache"
|
"k8s.io/kubernetes/pkg/client/cache"
|
||||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
||||||
"k8s.io/kubernetes/pkg/client/record"
|
"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/runtime"
|
||||||
"k8s.io/kubernetes/pkg/securitycontext"
|
"k8s.io/kubernetes/pkg/securitycontext"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
|
@ -193,7 +193,7 @@ func TestCreatePods(t *testing.T) {
|
||||||
testServer := httptest.NewServer(&fakeHandler)
|
testServer := httptest.NewServer(&fakeHandler)
|
||||||
// TODO: Uncomment when fix #19254
|
// TODO: Uncomment when fix #19254
|
||||||
// defer testServer.Close()
|
// 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{
|
podControl := RealPodControl{
|
||||||
KubeClient: clientset,
|
KubeClient: clientset,
|
||||||
|
|
|
@ -27,7 +27,7 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
"k8s.io/kubernetes/pkg/client/cache"
|
"k8s.io/kubernetes/pkg/client/cache"
|
||||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
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/controller"
|
||||||
"k8s.io/kubernetes/pkg/securitycontext"
|
"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) {
|
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 := NewDaemonSetsController(clientset, controller.NoResyncPeriodFunc)
|
||||||
manager.podStoreSynced = alwaysReady
|
manager.podStoreSynced = alwaysReady
|
||||||
podControl := &controller.FakePodControl{}
|
podControl := &controller.FakePodControl{}
|
||||||
|
|
|
@ -29,7 +29,7 @@ import (
|
||||||
_ "k8s.io/kubernetes/pkg/apimachinery/registered"
|
_ "k8s.io/kubernetes/pkg/apimachinery/registered"
|
||||||
"k8s.io/kubernetes/pkg/client/cache"
|
"k8s.io/kubernetes/pkg/client/cache"
|
||||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
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/controller"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util/intstr"
|
"k8s.io/kubernetes/pkg/util/intstr"
|
||||||
|
@ -105,7 +105,7 @@ func TestSyncEndpointsItemsPreserveNoSelector(t *testing.T) {
|
||||||
}})
|
}})
|
||||||
// TODO: Uncomment when fix #19254
|
// TODO: Uncomment when fix #19254
|
||||||
// defer testServer.Close()
|
// 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 := NewEndpointController(client, controller.NoResyncPeriodFunc)
|
||||||
endpoints.serviceStore.Store.Add(&api.Service{
|
endpoints.serviceStore.Store.Add(&api.Service{
|
||||||
ObjectMeta: api.ObjectMeta{Name: "foo", Namespace: ns},
|
ObjectMeta: api.ObjectMeta{Name: "foo", Namespace: ns},
|
||||||
|
@ -138,7 +138,7 @@ func TestCheckLeftoverEndpoints(t *testing.T) {
|
||||||
}})
|
}})
|
||||||
// TODO: Uncomment when fix #19254
|
// TODO: Uncomment when fix #19254
|
||||||
// defer testServer.Close()
|
// 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 := NewEndpointController(client, controller.NoResyncPeriodFunc)
|
||||||
endpoints.checkLeftoverEndpoints()
|
endpoints.checkLeftoverEndpoints()
|
||||||
|
|
||||||
|
@ -167,7 +167,7 @@ func TestSyncEndpointsProtocolTCP(t *testing.T) {
|
||||||
}})
|
}})
|
||||||
// TODO: Uncomment when fix #19254
|
// TODO: Uncomment when fix #19254
|
||||||
// defer testServer.Close()
|
// 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 := NewEndpointController(client, controller.NoResyncPeriodFunc)
|
||||||
addPods(endpoints.podStore.Store, ns, 1, 1, 0)
|
addPods(endpoints.podStore.Store, ns, 1, 1, 0)
|
||||||
endpoints.serviceStore.Store.Add(&api.Service{
|
endpoints.serviceStore.Store.Add(&api.Service{
|
||||||
|
@ -209,7 +209,7 @@ func TestSyncEndpointsProtocolUDP(t *testing.T) {
|
||||||
}})
|
}})
|
||||||
// TODO: Uncomment when fix #19254
|
// TODO: Uncomment when fix #19254
|
||||||
// defer testServer.Close()
|
// 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 := NewEndpointController(client, controller.NoResyncPeriodFunc)
|
||||||
addPods(endpoints.podStore.Store, ns, 1, 1, 0)
|
addPods(endpoints.podStore.Store, ns, 1, 1, 0)
|
||||||
endpoints.serviceStore.Store.Add(&api.Service{
|
endpoints.serviceStore.Store.Add(&api.Service{
|
||||||
|
@ -248,7 +248,7 @@ func TestSyncEndpointsItemsEmptySelectorSelectsAll(t *testing.T) {
|
||||||
}})
|
}})
|
||||||
// TODO: Uncomment when fix #19254
|
// TODO: Uncomment when fix #19254
|
||||||
// defer testServer.Close()
|
// 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 := NewEndpointController(client, controller.NoResyncPeriodFunc)
|
||||||
addPods(endpoints.podStore.Store, ns, 1, 1, 0)
|
addPods(endpoints.podStore.Store, ns, 1, 1, 0)
|
||||||
endpoints.serviceStore.Store.Add(&api.Service{
|
endpoints.serviceStore.Store.Add(&api.Service{
|
||||||
|
@ -286,7 +286,7 @@ func TestSyncEndpointsItemsEmptySelectorSelectsAllNotReady(t *testing.T) {
|
||||||
}})
|
}})
|
||||||
// TODO: Uncomment when fix #19254
|
// TODO: Uncomment when fix #19254
|
||||||
// defer testServer.Close()
|
// 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 := NewEndpointController(client, controller.NoResyncPeriodFunc)
|
||||||
addPods(endpoints.podStore.Store, ns, 0, 1, 1)
|
addPods(endpoints.podStore.Store, ns, 0, 1, 1)
|
||||||
endpoints.serviceStore.Store.Add(&api.Service{
|
endpoints.serviceStore.Store.Add(&api.Service{
|
||||||
|
@ -324,7 +324,7 @@ func TestSyncEndpointsItemsEmptySelectorSelectsAllMixed(t *testing.T) {
|
||||||
}})
|
}})
|
||||||
// TODO: Uncomment when fix #19254
|
// TODO: Uncomment when fix #19254
|
||||||
// defer testServer.Close()
|
// 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 := NewEndpointController(client, controller.NoResyncPeriodFunc)
|
||||||
addPods(endpoints.podStore.Store, ns, 1, 1, 1)
|
addPods(endpoints.podStore.Store, ns, 1, 1, 1)
|
||||||
endpoints.serviceStore.Store.Add(&api.Service{
|
endpoints.serviceStore.Store.Add(&api.Service{
|
||||||
|
@ -366,7 +366,7 @@ func TestSyncEndpointsItemsPreexisting(t *testing.T) {
|
||||||
}})
|
}})
|
||||||
// TODO: Uncomment when fix #19254
|
// TODO: Uncomment when fix #19254
|
||||||
// defer testServer.Close()
|
// 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 := NewEndpointController(client, controller.NoResyncPeriodFunc)
|
||||||
addPods(endpoints.podStore.Store, ns, 1, 1, 0)
|
addPods(endpoints.podStore.Store, ns, 1, 1, 0)
|
||||||
endpoints.serviceStore.Store.Add(&api.Service{
|
endpoints.serviceStore.Store.Add(&api.Service{
|
||||||
|
@ -407,7 +407,7 @@ func TestSyncEndpointsItemsPreexistingIdentical(t *testing.T) {
|
||||||
}})
|
}})
|
||||||
// TODO: Uncomment when fix #19254
|
// TODO: Uncomment when fix #19254
|
||||||
// defer testServer.Close()
|
// 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 := NewEndpointController(client, controller.NoResyncPeriodFunc)
|
||||||
addPods(endpoints.podStore.Store, api.NamespaceDefault, 1, 1, 0)
|
addPods(endpoints.podStore.Store, api.NamespaceDefault, 1, 1, 0)
|
||||||
endpoints.serviceStore.Store.Add(&api.Service{
|
endpoints.serviceStore.Store.Add(&api.Service{
|
||||||
|
@ -427,7 +427,7 @@ func TestSyncEndpointsItems(t *testing.T) {
|
||||||
serverResponse{http.StatusOK, &api.Endpoints{}})
|
serverResponse{http.StatusOK, &api.Endpoints{}})
|
||||||
// TODO: Uncomment when fix #19254
|
// TODO: Uncomment when fix #19254
|
||||||
// defer testServer.Close()
|
// 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 := NewEndpointController(client, controller.NoResyncPeriodFunc)
|
||||||
addPods(endpoints.podStore.Store, ns, 3, 2, 0)
|
addPods(endpoints.podStore.Store, ns, 3, 2, 0)
|
||||||
addPods(endpoints.podStore.Store, "blah", 5, 2, 0) // make sure these aren't found!
|
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{}})
|
serverResponse{http.StatusOK, &api.Endpoints{}})
|
||||||
// TODO: Uncomment when fix #19254
|
// TODO: Uncomment when fix #19254
|
||||||
// defer testServer.Close()
|
// 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 := NewEndpointController(client, controller.NoResyncPeriodFunc)
|
||||||
addPods(endpoints.podStore.Store, ns, 3, 2, 0)
|
addPods(endpoints.podStore.Store, ns, 3, 2, 0)
|
||||||
serviceLabels := map[string]string{"foo": "bar"}
|
serviceLabels := map[string]string{"foo": "bar"}
|
||||||
|
@ -531,7 +531,7 @@ func TestSyncEndpointsItemsPreexistingLabelsChange(t *testing.T) {
|
||||||
}})
|
}})
|
||||||
// TODO: Uncomment when fix #19254
|
// TODO: Uncomment when fix #19254
|
||||||
// defer testServer.Close()
|
// 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 := NewEndpointController(client, controller.NoResyncPeriodFunc)
|
||||||
addPods(endpoints.podStore.Store, ns, 1, 1, 0)
|
addPods(endpoints.podStore.Store, ns, 1, 1, 0)
|
||||||
serviceLabels := map[string]string{"baz": "blah"}
|
serviceLabels := map[string]string{"baz": "blah"}
|
||||||
|
|
|
@ -27,8 +27,8 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
||||||
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
|
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/client/testing/core"
|
"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/client/unversioned/testclient"
|
||||||
"k8s.io/kubernetes/pkg/controller"
|
"k8s.io/kubernetes/pkg/controller"
|
||||||
"k8s.io/kubernetes/pkg/util/rand"
|
"k8s.io/kubernetes/pkg/util/rand"
|
||||||
|
@ -207,7 +207,7 @@ func TestControllerSyncJob(t *testing.T) {
|
||||||
|
|
||||||
for name, tc := range testCases {
|
for name, tc := range testCases {
|
||||||
// job manager setup
|
// 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)
|
manager := NewJobController(clientset, controller.NoResyncPeriodFunc)
|
||||||
fakePodControl := controller.FakePodControl{Err: tc.podControllerError}
|
fakePodControl := controller.FakePodControl{Err: tc.podControllerError}
|
||||||
manager.podControl = &fakePodControl
|
manager.podControl = &fakePodControl
|
||||||
|
@ -302,7 +302,7 @@ func TestSyncJobPastDeadline(t *testing.T) {
|
||||||
|
|
||||||
for name, tc := range testCases {
|
for name, tc := range testCases {
|
||||||
// job manager setup
|
// 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)
|
manager := NewJobController(clientset, controller.NoResyncPeriodFunc)
|
||||||
fakePodControl := controller.FakePodControl{}
|
fakePodControl := controller.FakePodControl{}
|
||||||
manager.podControl = &fakePodControl
|
manager.podControl = &fakePodControl
|
||||||
|
@ -372,7 +372,7 @@ func getCondition(job *extensions.Job, condition extensions.JobConditionType) bo
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSyncPastDeadlineJobFinished(t *testing.T) {
|
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)
|
manager := NewJobController(clientset, controller.NoResyncPeriodFunc)
|
||||||
fakePodControl := controller.FakePodControl{}
|
fakePodControl := controller.FakePodControl{}
|
||||||
manager.podControl = &fakePodControl
|
manager.podControl = &fakePodControl
|
||||||
|
@ -406,7 +406,7 @@ func TestSyncPastDeadlineJobFinished(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSyncJobComplete(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)
|
manager := NewJobController(clientset, controller.NoResyncPeriodFunc)
|
||||||
fakePodControl := controller.FakePodControl{}
|
fakePodControl := controller.FakePodControl{}
|
||||||
manager.podControl = &fakePodControl
|
manager.podControl = &fakePodControl
|
||||||
|
@ -431,7 +431,7 @@ func TestSyncJobComplete(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSyncJobDeleted(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)
|
manager := NewJobController(clientset, controller.NoResyncPeriodFunc)
|
||||||
fakePodControl := controller.FakePodControl{}
|
fakePodControl := controller.FakePodControl{}
|
||||||
manager.podControl = &fakePodControl
|
manager.podControl = &fakePodControl
|
||||||
|
@ -451,7 +451,7 @@ func TestSyncJobDeleted(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSyncJobUpdateRequeue(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)
|
manager := NewJobController(clientset, controller.NoResyncPeriodFunc)
|
||||||
fakePodControl := controller.FakePodControl{}
|
fakePodControl := controller.FakePodControl{}
|
||||||
manager.podControl = &fakePodControl
|
manager.podControl = &fakePodControl
|
||||||
|
@ -472,7 +472,7 @@ func TestSyncJobUpdateRequeue(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestJobPodLookup(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 := NewJobController(clientset, controller.NoResyncPeriodFunc)
|
||||||
manager.podStoreSynced = alwaysReady
|
manager.podStoreSynced = alwaysReady
|
||||||
testCases := []struct {
|
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
|
// TestSyncJobExpectations tests that a pod cannot sneak in between counting active pods
|
||||||
// and checking expectations.
|
// and checking expectations.
|
||||||
func TestSyncJobExpectations(t *testing.T) {
|
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)
|
manager := NewJobController(clientset, controller.NoResyncPeriodFunc)
|
||||||
fakePodControl := controller.FakePodControl{}
|
fakePodControl := controller.FakePodControl{}
|
||||||
manager.podControl = &fakePodControl
|
manager.podControl = &fakePodControl
|
||||||
|
|
|
@ -32,7 +32,6 @@ import (
|
||||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
||||||
"k8s.io/kubernetes/pkg/client/record"
|
"k8s.io/kubernetes/pkg/client/record"
|
||||||
unversionedcore "k8s.io/kubernetes/pkg/client/typed/generated/core/unversioned"
|
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/cloudprovider"
|
||||||
"k8s.io/kubernetes/pkg/controller"
|
"k8s.io/kubernetes/pkg/controller"
|
||||||
"k8s.io/kubernetes/pkg/controller/framework"
|
"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
|
// returns true if the provided node still has pods scheduled to it, or an error if
|
||||||
// the server could not be contacted.
|
// the server could not be contacted.
|
||||||
func (nc *NodeController) hasPods(nodeName string) (bool, error) {
|
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}
|
options := api.ListOptions{FieldSelector: selector}
|
||||||
pods, err := nc.kubeClient.Core().Pods(api.NamespaceAll).List(options)
|
pods, err := nc.kubeClient.Core().Pods(api.NamespaceAll).List(options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -762,7 +761,7 @@ func (nc *NodeController) cancelPodEviction(nodeName string) bool {
|
||||||
// if any pods were deleted.
|
// if any pods were deleted.
|
||||||
func (nc *NodeController) deletePods(nodeName string) (bool, error) {
|
func (nc *NodeController) deletePods(nodeName string) (bool, error) {
|
||||||
remaining := false
|
remaining := false
|
||||||
selector := fields.OneTermEqualSelector(client.PodHost, nodeName)
|
selector := fields.OneTermEqualSelector(api.PodHostField, nodeName)
|
||||||
options := api.ListOptions{FieldSelector: selector}
|
options := api.ListOptions{FieldSelector: selector}
|
||||||
pods, err := nc.kubeClient.Core().Pods(api.NamespaceAll).List(options)
|
pods, err := nc.kubeClient.Core().Pods(api.NamespaceAll).List(options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -802,7 +801,7 @@ func (nc *NodeController) deletePods(nodeName string) (bool, error) {
|
||||||
// return true if success
|
// return true if success
|
||||||
func (nc *NodeController) markAllPodsNotReady(nodeName string) error {
|
func (nc *NodeController) markAllPodsNotReady(nodeName string) error {
|
||||||
glog.V(2).Infof("Update ready status of pods on node [%v]", nodeName)
|
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)
|
pods, err := nc.kubeClient.Core().Pods(api.NamespaceAll).List(opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -843,7 +842,7 @@ func (nc *NodeController) terminatePods(nodeName string, since time.Time) (bool,
|
||||||
// have we deleted all pods
|
// have we deleted all pods
|
||||||
complete := true
|
complete := true
|
||||||
|
|
||||||
selector := fields.OneTermEqualSelector(client.PodHost, nodeName)
|
selector := fields.OneTermEqualSelector(api.PodHostField, nodeName)
|
||||||
options := api.ListOptions{FieldSelector: selector}
|
options := api.ListOptions{FieldSelector: selector}
|
||||||
pods, err := nc.kubeClient.Core().Pods(api.NamespaceAll).List(options)
|
pods, err := nc.kubeClient.Core().Pods(api.NamespaceAll).List(options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -28,8 +28,8 @@ import (
|
||||||
_ "k8s.io/kubernetes/pkg/apimachinery/registered"
|
_ "k8s.io/kubernetes/pkg/apimachinery/registered"
|
||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
|
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/client/testing/core"
|
"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/client/unversioned/testclient"
|
||||||
"k8s.io/kubernetes/pkg/controller/podautoscaler/metrics"
|
"k8s.io/kubernetes/pkg/controller/podautoscaler/metrics"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
|
@ -188,7 +188,7 @@ func (tc *testCase) prepareTestClient(t *testing.T) *fake.Clientset {
|
||||||
return true, obj, nil
|
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()
|
timestamp := time.Now()
|
||||||
metrics := heapster.MetricResultList{}
|
metrics := heapster.MetricResultList{}
|
||||||
for _, level := range tc.reportedLevels {
|
for _, level := range tc.reportedLevels {
|
||||||
|
|
|
@ -27,8 +27,8 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/api/resource"
|
"k8s.io/kubernetes/pkg/api/resource"
|
||||||
_ "k8s.io/kubernetes/pkg/apimachinery/registered"
|
_ "k8s.io/kubernetes/pkg/apimachinery/registered"
|
||||||
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
|
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/client/testing/core"
|
"k8s.io/kubernetes/pkg/client/testing/core"
|
||||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
|
|
||||||
heapster "k8s.io/heapster/api/v1/types"
|
heapster "k8s.io/heapster/api/v1/types"
|
||||||
|
@ -94,7 +94,7 @@ func (tc *testCase) prepareTestClient(t *testing.T) *fake.Clientset {
|
||||||
return true, obj, nil
|
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{}
|
metrics := heapster.MetricResultList{}
|
||||||
var latestTimestamp time.Time
|
var latestTimestamp time.Time
|
||||||
for _, reportedMetricPoints := range tc.reportedMetricsPoints {
|
for _, reportedMetricPoints := range tc.reportedMetricsPoints {
|
||||||
|
|
|
@ -32,8 +32,8 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/client/cache"
|
"k8s.io/kubernetes/pkg/client/cache"
|
||||||
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
||||||
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
|
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
|
||||||
|
"k8s.io/kubernetes/pkg/client/restclient"
|
||||||
"k8s.io/kubernetes/pkg/client/testing/core"
|
"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/client/unversioned/testclient"
|
||||||
"k8s.io/kubernetes/pkg/controller"
|
"k8s.io/kubernetes/pkg/controller"
|
||||||
"k8s.io/kubernetes/pkg/runtime"
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
|
@ -137,7 +137,7 @@ type serverResponse struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSyncReplicaSetDoesNothing(t *testing.T) {
|
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{}
|
fakePodControl := controller.FakePodControl{}
|
||||||
manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, BurstReplicas, 0)
|
manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, BurstReplicas, 0)
|
||||||
manager.podStoreSynced = alwaysReady
|
manager.podStoreSynced = alwaysReady
|
||||||
|
@ -154,7 +154,7 @@ func TestSyncReplicaSetDoesNothing(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSyncReplicaSetDeletes(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{}
|
fakePodControl := controller.FakePodControl{}
|
||||||
manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, BurstReplicas, 0)
|
manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, BurstReplicas, 0)
|
||||||
manager.podStoreSynced = alwaysReady
|
manager.podStoreSynced = alwaysReady
|
||||||
|
@ -171,7 +171,7 @@ func TestSyncReplicaSetDeletes(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDeleteFinalStateUnknown(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{}
|
fakePodControl := controller.FakePodControl{}
|
||||||
manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, BurstReplicas, 0)
|
manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, BurstReplicas, 0)
|
||||||
manager.podStoreSynced = alwaysReady
|
manager.podStoreSynced = alwaysReady
|
||||||
|
@ -205,7 +205,7 @@ func TestDeleteFinalStateUnknown(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSyncReplicaSetCreates(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 := NewReplicaSetController(client, controller.NoResyncPeriodFunc, BurstReplicas, 0)
|
||||||
manager.podStoreSynced = alwaysReady
|
manager.podStoreSynced = alwaysReady
|
||||||
|
|
||||||
|
@ -228,7 +228,7 @@ func TestStatusUpdatesWithoutReplicasChange(t *testing.T) {
|
||||||
}
|
}
|
||||||
testServer := httptest.NewServer(&fakeHandler)
|
testServer := httptest.NewServer(&fakeHandler)
|
||||||
defer testServer.Close()
|
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 := NewReplicaSetController(client, controller.NoResyncPeriodFunc, BurstReplicas, 0)
|
||||||
manager.podStoreSynced = alwaysReady
|
manager.podStoreSynced = alwaysReady
|
||||||
|
|
||||||
|
@ -271,7 +271,7 @@ func TestControllerUpdateReplicas(t *testing.T) {
|
||||||
testServer := httptest.NewServer(&fakeHandler)
|
testServer := httptest.NewServer(&fakeHandler)
|
||||||
defer testServer.Close()
|
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 := NewReplicaSetController(client, controller.NoResyncPeriodFunc, BurstReplicas, 0)
|
||||||
manager.podStoreSynced = alwaysReady
|
manager.podStoreSynced = alwaysReady
|
||||||
|
|
||||||
|
@ -310,7 +310,7 @@ func TestSyncReplicaSetDormancy(t *testing.T) {
|
||||||
}
|
}
|
||||||
testServer := httptest.NewServer(&fakeHandler)
|
testServer := httptest.NewServer(&fakeHandler)
|
||||||
defer testServer.Close()
|
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{}
|
fakePodControl := controller.FakePodControl{}
|
||||||
manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, BurstReplicas, 0)
|
manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, BurstReplicas, 0)
|
||||||
|
@ -360,7 +360,7 @@ func TestSyncReplicaSetDormancy(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPodControllerLookup(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
|
manager.podStoreSynced = alwaysReady
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
inRSs []*extensions.ReplicaSet
|
inRSs []*extensions.ReplicaSet
|
||||||
|
@ -574,7 +574,7 @@ func TestControllerUpdateRequeue(t *testing.T) {
|
||||||
testServer := httptest.NewServer(&fakeHandler)
|
testServer := httptest.NewServer(&fakeHandler)
|
||||||
defer testServer.Close()
|
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 := NewReplicaSetController(client, controller.NoResyncPeriodFunc, BurstReplicas, 0)
|
||||||
manager.podStoreSynced = alwaysReady
|
manager.podStoreSynced = alwaysReady
|
||||||
|
|
||||||
|
@ -653,7 +653,7 @@ func TestControllerUpdateStatusWithFailure(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func doTestControllerBurstReplicas(t *testing.T, burstReplicas, numReplicas int) {
|
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{}
|
fakePodControl := controller.FakePodControl{}
|
||||||
manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, burstReplicas, 0)
|
manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, burstReplicas, 0)
|
||||||
manager.podStoreSynced = alwaysReady
|
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
|
// TestRSSyncExpectations tests that a pod cannot sneak in between counting active pods
|
||||||
// and checking expectations.
|
// and checking expectations.
|
||||||
func TestRSSyncExpectations(t *testing.T) {
|
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{}
|
fakePodControl := controller.FakePodControl{}
|
||||||
manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, 2, 0)
|
manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, 2, 0)
|
||||||
manager.podStoreSynced = alwaysReady
|
manager.podStoreSynced = alwaysReady
|
||||||
|
@ -801,7 +801,7 @@ func TestRSSyncExpectations(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDeleteControllerAndExpectations(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 := NewReplicaSetController(client, controller.NoResyncPeriodFunc, 10, 0)
|
||||||
manager.podStoreSynced = alwaysReady
|
manager.podStoreSynced = alwaysReady
|
||||||
|
|
||||||
|
@ -843,7 +843,7 @@ func TestDeleteControllerAndExpectations(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRSManagerNotReady(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{}
|
fakePodControl := controller.FakePodControl{}
|
||||||
manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, 2, 0)
|
manager := NewReplicaSetController(client, controller.NoResyncPeriodFunc, 2, 0)
|
||||||
manager.podControl = &fakePodControl
|
manager.podControl = &fakePodControl
|
||||||
|
@ -880,7 +880,7 @@ func shuffle(controllers []*extensions.ReplicaSet) []*extensions.ReplicaSet {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestOverlappingRSs(t *testing.T) {
|
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"}
|
labelMap := map[string]string{"foo": "bar"}
|
||||||
|
|
||||||
for i := 0; i < 5; i++ {
|
for i := 0; i < 5; i++ {
|
||||||
|
@ -912,7 +912,7 @@ func TestOverlappingRSs(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDeletionTimestamp(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"}
|
labelMap := map[string]string{"foo": "bar"}
|
||||||
manager := NewReplicaSetController(c, controller.NoResyncPeriodFunc, 10, 0)
|
manager := NewReplicaSetController(c, controller.NoResyncPeriodFunc, 10, 0)
|
||||||
manager.podStoreSynced = alwaysReady
|
manager.podStoreSynced = alwaysReady
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue