Commit b83a3170 authored by deads2k's avatar deads2k

switch controller manager to generated clientset

parent adda69c7
...@@ -44,6 +44,7 @@ var ( ...@@ -44,6 +44,7 @@ var (
"rbac/", "rbac/",
"storage/", "storage/",
"apps/", "apps/",
"policy/",
}, "group/versions that client-gen will generate clients for. At most one version per group is allowed. Specified in the format \"group1/version1,group2/version2...\". Default to \"api/,extensions/,autoscaling/,batch/,rbac/\"") }, "group/versions that client-gen will generate clients for. At most one version per group is allowed. Specified in the format \"group1/version1,group2/version2...\". Default to \"api/,extensions/,autoscaling/,batch/,rbac/\"")
includedTypesOverrides = flag.StringSlice("included-types-overrides", []string{}, "list of group/version/type for which client should be generated. By default, client is generated for all types which have genclient=true in types.go. This overrides that. For each groupVersion in this list, only the types mentioned here will be included. The default check of genclient=true will be used for other group versions.") includedTypesOverrides = flag.StringSlice("included-types-overrides", []string{}, "list of group/version/type for which client should be generated. By default, client is generated for all types which have genclient=true in types.go. This overrides that. For each groupVersion in this list, only the types mentioned here will be included. The default check of genclient=true will be used for other group versions.")
basePath = flag.String("input-base", "k8s.io/kubernetes/pkg/apis", "base path to look for the api group. Default to \"k8s.io/kubernetes/pkg/apis\"") basePath = flag.String("input-base", "k8s.io/kubernetes/pkg/apis", "base path to look for the api group. Default to \"k8s.io/kubernetes/pkg/apis\"")
......
...@@ -50,7 +50,6 @@ type PodDisruptionBudgetStatus struct { ...@@ -50,7 +50,6 @@ type PodDisruptionBudgetStatus struct {
} }
// +genclient=true // +genclient=true
// +noMethods=true
// PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods // PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods
type PodDisruptionBudget struct { type PodDisruptionBudget struct {
......
...@@ -58,8 +58,8 @@ import ( ...@@ -58,8 +58,8 @@ 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/apis/componentconfig" "k8s.io/kubernetes/pkg/apis/componentconfig"
coreclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned"
"k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/client/record"
client "k8s.io/kubernetes/pkg/client/unversioned"
"k8s.io/kubernetes/pkg/util/runtime" "k8s.io/kubernetes/pkg/util/runtime"
"k8s.io/kubernetes/pkg/util/wait" "k8s.io/kubernetes/pkg/util/wait"
...@@ -85,8 +85,8 @@ func NewLeaderElector(lec LeaderElectionConfig) (*LeaderElector, error) { ...@@ -85,8 +85,8 @@ func NewLeaderElector(lec LeaderElectionConfig) (*LeaderElector, error) {
if lec.RenewDeadline <= time.Duration(JitterFactor*float64(lec.RetryPeriod)) { if lec.RenewDeadline <= time.Duration(JitterFactor*float64(lec.RetryPeriod)) {
return nil, fmt.Errorf("renewDeadline must be greater than retryPeriod*JitterFactor") return nil, fmt.Errorf("renewDeadline must be greater than retryPeriod*JitterFactor")
} }
if lec.Client == nil { if lec.EndpointsClient == nil {
return nil, fmt.Errorf("Client must not be nil.") return nil, fmt.Errorf("EndpointsClient must not be nil.")
} }
if lec.EventRecorder == nil { if lec.EventRecorder == nil {
return nil, fmt.Errorf("EventRecorder must not be nil.") return nil, fmt.Errorf("EventRecorder must not be nil.")
...@@ -103,8 +103,8 @@ type LeaderElectionConfig struct { ...@@ -103,8 +103,8 @@ type LeaderElectionConfig struct {
// Identity is a unique identifier of the leader elector. // Identity is a unique identifier of the leader elector.
Identity string Identity string
Client client.Interface EndpointsClient coreclientset.EndpointsGetter
EventRecorder record.EventRecorder EventRecorder record.EventRecorder
// LeaseDuration is the duration that non-leader candidates will // LeaseDuration is the duration that non-leader candidates will
// wait to force acquire leadership. This is measured against time of // wait to force acquire leadership. This is measured against time of
...@@ -246,7 +246,7 @@ func (le *LeaderElector) tryAcquireOrRenew() bool { ...@@ -246,7 +246,7 @@ func (le *LeaderElector) tryAcquireOrRenew() bool {
AcquireTime: now, AcquireTime: now,
} }
e, err := le.config.Client.Endpoints(le.config.EndpointsMeta.Namespace).Get(le.config.EndpointsMeta.Name) e, err := le.config.EndpointsClient.Endpoints(le.config.EndpointsMeta.Namespace).Get(le.config.EndpointsMeta.Name)
if err != nil { if err != nil {
if !errors.IsNotFound(err) { if !errors.IsNotFound(err) {
glog.Errorf("error retrieving endpoint: %v", err) glog.Errorf("error retrieving endpoint: %v", err)
...@@ -257,7 +257,7 @@ func (le *LeaderElector) tryAcquireOrRenew() bool { ...@@ -257,7 +257,7 @@ func (le *LeaderElector) tryAcquireOrRenew() bool {
if err != nil { if err != nil {
return false return false
} }
_, err = le.config.Client.Endpoints(le.config.EndpointsMeta.Namespace).Create(&api.Endpoints{ _, err = le.config.EndpointsClient.Endpoints(le.config.EndpointsMeta.Namespace).Create(&api.Endpoints{
ObjectMeta: api.ObjectMeta{ ObjectMeta: api.ObjectMeta{
Name: le.config.EndpointsMeta.Name, Name: le.config.EndpointsMeta.Name,
Namespace: le.config.EndpointsMeta.Namespace, Namespace: le.config.EndpointsMeta.Namespace,
...@@ -312,7 +312,7 @@ func (le *LeaderElector) tryAcquireOrRenew() bool { ...@@ -312,7 +312,7 @@ func (le *LeaderElector) tryAcquireOrRenew() bool {
} }
e.Annotations[LeaderElectionRecordAnnotationKey] = string(leaderElectionRecordBytes) e.Annotations[LeaderElectionRecordAnnotationKey] = string(leaderElectionRecordBytes)
_, err = le.config.Client.Endpoints(le.config.EndpointsMeta.Namespace).Update(e) _, err = le.config.EndpointsClient.Endpoints(le.config.EndpointsMeta.Namespace).Update(e)
if err != nil { if err != nil {
glog.Errorf("err: %v", err) glog.Errorf("err: %v", err)
return false return false
......
...@@ -29,8 +29,9 @@ import ( ...@@ -29,8 +29,9 @@ 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"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
"k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/client/record"
"k8s.io/kubernetes/pkg/client/unversioned/testclient" testcore "k8s.io/kubernetes/pkg/client/testing/core"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
) )
...@@ -43,7 +44,7 @@ func TestTryAcquireOrRenew(t *testing.T) { ...@@ -43,7 +44,7 @@ func TestTryAcquireOrRenew(t *testing.T) {
observedTime time.Time observedTime time.Time
reactors []struct { reactors []struct {
verb string verb string
reaction testclient.ReactionFunc reaction testcore.ReactionFunc
} }
expectSuccess bool expectSuccess bool
...@@ -54,18 +55,18 @@ func TestTryAcquireOrRenew(t *testing.T) { ...@@ -54,18 +55,18 @@ func TestTryAcquireOrRenew(t *testing.T) {
{ {
reactors: []struct { reactors: []struct {
verb string verb string
reaction testclient.ReactionFunc reaction testcore.ReactionFunc
}{ }{
{ {
verb: "get", verb: "get",
reaction: func(action testclient.Action) (handled bool, ret runtime.Object, err error) { reaction: func(action testcore.Action) (handled bool, ret runtime.Object, err error) {
return true, nil, errors.NewNotFound(api.Resource(action.(testclient.GetAction).GetResource()), action.(testclient.GetAction).GetName()) return true, nil, errors.NewNotFound(action.(testcore.GetAction).GetResource().GroupResource(), action.(testcore.GetAction).GetName())
}, },
}, },
{ {
verb: "create", verb: "create",
reaction: func(action testclient.Action) (handled bool, ret runtime.Object, err error) { reaction: func(action testcore.Action) (handled bool, ret runtime.Object, err error) {
return true, action.(testclient.CreateAction).GetObject().(*api.Endpoints), nil return true, action.(testcore.CreateAction).GetObject().(*api.Endpoints), nil
}, },
}, },
}, },
...@@ -76,23 +77,23 @@ func TestTryAcquireOrRenew(t *testing.T) { ...@@ -76,23 +77,23 @@ func TestTryAcquireOrRenew(t *testing.T) {
{ {
reactors: []struct { reactors: []struct {
verb string verb string
reaction testclient.ReactionFunc reaction testcore.ReactionFunc
}{ }{
{ {
verb: "get", verb: "get",
reaction: func(action testclient.Action) (handled bool, ret runtime.Object, err error) { reaction: func(action testcore.Action) (handled bool, ret runtime.Object, err error) {
return true, &api.Endpoints{ return true, &api.Endpoints{
ObjectMeta: api.ObjectMeta{ ObjectMeta: api.ObjectMeta{
Namespace: action.GetNamespace(), Namespace: action.GetNamespace(),
Name: action.(testclient.GetAction).GetName(), Name: action.(testcore.GetAction).GetName(),
}, },
}, nil }, nil
}, },
}, },
{ {
verb: "update", verb: "update",
reaction: func(action testclient.Action) (handled bool, ret runtime.Object, err error) { reaction: func(action testcore.Action) (handled bool, ret runtime.Object, err error) {
return true, action.(testclient.CreateAction).GetObject().(*api.Endpoints), nil return true, action.(testcore.CreateAction).GetObject().(*api.Endpoints), nil
}, },
}, },
}, },
...@@ -105,15 +106,15 @@ func TestTryAcquireOrRenew(t *testing.T) { ...@@ -105,15 +106,15 @@ func TestTryAcquireOrRenew(t *testing.T) {
{ {
reactors: []struct { reactors: []struct {
verb string verb string
reaction testclient.ReactionFunc reaction testcore.ReactionFunc
}{ }{
{ {
verb: "get", verb: "get",
reaction: func(action testclient.Action) (handled bool, ret runtime.Object, err error) { reaction: func(action testcore.Action) (handled bool, ret runtime.Object, err error) {
return true, &api.Endpoints{ return true, &api.Endpoints{
ObjectMeta: api.ObjectMeta{ ObjectMeta: api.ObjectMeta{
Namespace: action.GetNamespace(), Namespace: action.GetNamespace(),
Name: action.(testclient.GetAction).GetName(), Name: action.(testcore.GetAction).GetName(),
Annotations: map[string]string{ Annotations: map[string]string{
LeaderElectionRecordAnnotationKey: `{"holderIdentity":"bing"}`, LeaderElectionRecordAnnotationKey: `{"holderIdentity":"bing"}`,
}, },
...@@ -123,8 +124,8 @@ func TestTryAcquireOrRenew(t *testing.T) { ...@@ -123,8 +124,8 @@ func TestTryAcquireOrRenew(t *testing.T) {
}, },
{ {
verb: "update", verb: "update",
reaction: func(action testclient.Action) (handled bool, ret runtime.Object, err error) { reaction: func(action testcore.Action) (handled bool, ret runtime.Object, err error) {
return true, action.(testclient.CreateAction).GetObject().(*api.Endpoints), nil return true, action.(testcore.CreateAction).GetObject().(*api.Endpoints), nil
}, },
}, },
}, },
...@@ -139,15 +140,15 @@ func TestTryAcquireOrRenew(t *testing.T) { ...@@ -139,15 +140,15 @@ func TestTryAcquireOrRenew(t *testing.T) {
{ {
reactors: []struct { reactors: []struct {
verb string verb string
reaction testclient.ReactionFunc reaction testcore.ReactionFunc
}{ }{
{ {
verb: "get", verb: "get",
reaction: func(action testclient.Action) (handled bool, ret runtime.Object, err error) { reaction: func(action testcore.Action) (handled bool, ret runtime.Object, err error) {
return true, &api.Endpoints{ return true, &api.Endpoints{
ObjectMeta: api.ObjectMeta{ ObjectMeta: api.ObjectMeta{
Namespace: action.GetNamespace(), Namespace: action.GetNamespace(),
Name: action.(testclient.GetAction).GetName(), Name: action.(testcore.GetAction).GetName(),
Annotations: map[string]string{ Annotations: map[string]string{
LeaderElectionRecordAnnotationKey: `{"holderIdentity":"bing"}`, LeaderElectionRecordAnnotationKey: `{"holderIdentity":"bing"}`,
}, },
...@@ -165,15 +166,15 @@ func TestTryAcquireOrRenew(t *testing.T) { ...@@ -165,15 +166,15 @@ func TestTryAcquireOrRenew(t *testing.T) {
{ {
reactors: []struct { reactors: []struct {
verb string verb string
reaction testclient.ReactionFunc reaction testcore.ReactionFunc
}{ }{
{ {
verb: "get", verb: "get",
reaction: func(action testclient.Action) (handled bool, ret runtime.Object, err error) { reaction: func(action testcore.Action) (handled bool, ret runtime.Object, err error) {
return true, &api.Endpoints{ return true, &api.Endpoints{
ObjectMeta: api.ObjectMeta{ ObjectMeta: api.ObjectMeta{
Namespace: action.GetNamespace(), Namespace: action.GetNamespace(),
Name: action.(testclient.GetAction).GetName(), Name: action.(testcore.GetAction).GetName(),
Annotations: map[string]string{ Annotations: map[string]string{
LeaderElectionRecordAnnotationKey: `{"holderIdentity":"baz"}`, LeaderElectionRecordAnnotationKey: `{"holderIdentity":"baz"}`,
}, },
...@@ -183,8 +184,8 @@ func TestTryAcquireOrRenew(t *testing.T) { ...@@ -183,8 +184,8 @@ func TestTryAcquireOrRenew(t *testing.T) {
}, },
{ {
verb: "update", verb: "update",
reaction: func(action testclient.Action) (handled bool, ret runtime.Object, err error) { reaction: func(action testcore.Action) (handled bool, ret runtime.Object, err error) {
return true, action.(testclient.CreateAction).GetObject().(*api.Endpoints), nil return true, action.(testcore.CreateAction).GetObject().(*api.Endpoints), nil
}, },
}, },
}, },
...@@ -214,11 +215,11 @@ func TestTryAcquireOrRenew(t *testing.T) { ...@@ -214,11 +215,11 @@ func TestTryAcquireOrRenew(t *testing.T) {
}, },
}, },
} }
c := &testclient.Fake{} c := &fake.Clientset{}
for _, reactor := range test.reactors { for _, reactor := range test.reactors {
c.AddReactor(reactor.verb, "endpoints", reactor.reaction) c.AddReactor(reactor.verb, "endpoints", reactor.reaction)
} }
c.AddReactor("*", "*", func(action testclient.Action) (bool, runtime.Object, error) { c.AddReactor("*", "*", func(action testcore.Action) (bool, runtime.Object, error) {
t.Errorf("[%v] unreachable action. testclient called too many times: %+v", i, action) t.Errorf("[%v] unreachable action. testclient called too many times: %+v", i, action)
return true, nil, fmt.Errorf("uncreachable action") return true, nil, fmt.Errorf("uncreachable action")
}) })
...@@ -228,7 +229,7 @@ func TestTryAcquireOrRenew(t *testing.T) { ...@@ -228,7 +229,7 @@ func TestTryAcquireOrRenew(t *testing.T) {
observedRecord: test.observedRecord, observedRecord: test.observedRecord,
observedTime: test.observedTime, observedTime: test.observedTime,
} }
le.config.Client = c le.config.EndpointsClient = c.Core()
if test.expectSuccess != le.tryAcquireOrRenew() { if test.expectSuccess != le.tryAcquireOrRenew() {
t.Errorf("[%v]unexpected result of tryAcquireOrRenew: [succeded=%v]", i, !test.expectSuccess) t.Errorf("[%v]unexpected result of tryAcquireOrRenew: [succeded=%v]", i, !test.expectSuccess)
......
...@@ -25,8 +25,10 @@ import ( ...@@ -25,8 +25,10 @@ import (
"k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/apis/extensions"
"k8s.io/kubernetes/pkg/apis/policy" "k8s.io/kubernetes/pkg/apis/policy"
"k8s.io/kubernetes/pkg/client/cache" "k8s.io/kubernetes/pkg/client/cache"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
unversionedcore "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned"
policyclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/policy/unversioned"
"k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/client/record"
client "k8s.io/kubernetes/pkg/client/unversioned"
"k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/controller"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/types"
...@@ -43,7 +45,7 @@ const statusUpdateRetries = 2 ...@@ -43,7 +45,7 @@ const statusUpdateRetries = 2
type updater func(*policy.PodDisruptionBudget) error type updater func(*policy.PodDisruptionBudget) error
type DisruptionController struct { type DisruptionController struct {
kubeClient *client.Client kubeClient internalclientset.Interface
pdbStore cache.Store pdbStore cache.Store
pdbController *cache.Controller pdbController *cache.Controller
...@@ -83,7 +85,7 @@ type controllerAndScale struct { ...@@ -83,7 +85,7 @@ type controllerAndScale struct {
// controllers and their scale. // controllers and their scale.
type podControllerFinder func(*api.Pod) ([]controllerAndScale, error) type podControllerFinder func(*api.Pod) ([]controllerAndScale, error)
func NewDisruptionController(podInformer cache.SharedIndexInformer, kubeClient *client.Client) *DisruptionController { func NewDisruptionController(podInformer cache.SharedIndexInformer, kubeClient internalclientset.Interface) *DisruptionController {
dc := &DisruptionController{ dc := &DisruptionController{
kubeClient: kubeClient, kubeClient: kubeClient,
podController: podInformer.GetController(), podController: podInformer.GetController(),
...@@ -124,10 +126,10 @@ func NewDisruptionController(podInformer cache.SharedIndexInformer, kubeClient * ...@@ -124,10 +126,10 @@ func NewDisruptionController(podInformer cache.SharedIndexInformer, kubeClient *
dc.rcIndexer, dc.rcController = cache.NewIndexerInformer( dc.rcIndexer, dc.rcController = cache.NewIndexerInformer(
&cache.ListWatch{ &cache.ListWatch{
ListFunc: func(options api.ListOptions) (runtime.Object, error) { ListFunc: func(options api.ListOptions) (runtime.Object, error) {
return dc.kubeClient.ReplicationControllers(api.NamespaceAll).List(options) return dc.kubeClient.Core().ReplicationControllers(api.NamespaceAll).List(options)
}, },
WatchFunc: func(options api.ListOptions) (watch.Interface, error) { WatchFunc: func(options api.ListOptions) (watch.Interface, error) {
return dc.kubeClient.ReplicationControllers(api.NamespaceAll).Watch(options) return dc.kubeClient.Core().ReplicationControllers(api.NamespaceAll).Watch(options)
}, },
}, },
&api.ReplicationController{}, &api.ReplicationController{},
...@@ -256,7 +258,7 @@ func (dc *DisruptionController) Run(stopCh <-chan struct{}) { ...@@ -256,7 +258,7 @@ func (dc *DisruptionController) Run(stopCh <-chan struct{}) {
glog.V(0).Infof("Starting disruption controller") glog.V(0).Infof("Starting disruption controller")
if dc.kubeClient != nil { if dc.kubeClient != nil {
glog.V(0).Infof("Sending events to api server.") glog.V(0).Infof("Sending events to api server.")
dc.broadcaster.StartRecordingToSink(dc.kubeClient.Events("")) dc.broadcaster.StartRecordingToSink(&unversionedcore.EventSinkImpl{Interface: dc.kubeClient.Core().Events("")})
} else { } else {
glog.V(0).Infof("No api server defined - no events will be sent to API server.") glog.V(0).Infof("No api server defined - no events will be sent to API server.")
} }
...@@ -589,7 +591,7 @@ func (dc *DisruptionController) updatePdbSpec(pdb *policy.PodDisruptionBudget, c ...@@ -589,7 +591,7 @@ func (dc *DisruptionController) updatePdbSpec(pdb *policy.PodDisruptionBudget, c
// refresh tries to re-GET the given PDB. If there are any errors, it just // refresh tries to re-GET the given PDB. If there are any errors, it just
// returns the old PDB. Intended to be used in a retry loop where it runs a // returns the old PDB. Intended to be used in a retry loop where it runs a
// bounded number of times. // bounded number of times.
func refresh(pdbClient client.PodDisruptionBudgetInterface, pdb *policy.PodDisruptionBudget) *policy.PodDisruptionBudget { func refresh(pdbClient policyclientset.PodDisruptionBudgetInterface, pdb *policy.PodDisruptionBudget) *policy.PodDisruptionBudget {
newPdb, err := pdbClient.Get(pdb.Name) newPdb, err := pdbClient.Get(pdb.Name)
if err == nil { if err == nil {
return newPdb return newPdb
......
...@@ -70,7 +70,7 @@ var ( ...@@ -70,7 +70,7 @@ var (
) )
// NewEndpointController returns a new *EndpointController. // NewEndpointController returns a new *EndpointController.
func NewEndpointController(podInformer cache.SharedIndexInformer, client *clientset.Clientset) *EndpointController { func NewEndpointController(podInformer cache.SharedIndexInformer, client clientset.Interface) *EndpointController {
if client != nil && client.Core().GetRESTClient().GetRateLimiter() != nil { if client != nil && client.Core().GetRESTClient().GetRateLimiter() != nil {
metrics.RegisterMetricAndTrackRateLimiterUsage("endpoint_controller", client.Core().GetRESTClient().GetRateLimiter()) metrics.RegisterMetricAndTrackRateLimiterUsage("endpoint_controller", client.Core().GetRESTClient().GetRateLimiter())
} }
...@@ -123,7 +123,7 @@ func NewEndpointControllerFromClient(client *clientset.Clientset, resyncPeriod c ...@@ -123,7 +123,7 @@ func NewEndpointControllerFromClient(client *clientset.Clientset, resyncPeriod c
// EndpointController manages selector-based service endpoints. // EndpointController manages selector-based service endpoints.
type EndpointController struct { type EndpointController struct {
client *clientset.Clientset client clientset.Interface
serviceStore cache.StoreToServiceLister serviceStore cache.StoreToServiceLister
podStore cache.StoreToPodLister podStore cache.StoreToPodLister
...@@ -347,7 +347,7 @@ func (e *EndpointController) syncService(key string) error { ...@@ -347,7 +347,7 @@ func (e *EndpointController) syncService(key string) error {
// Don't retry, as the key isn't going to magically become understandable. // Don't retry, as the key isn't going to magically become understandable.
return nil return nil
} }
err = e.client.Endpoints(namespace).Delete(name, nil) err = e.client.Core().Endpoints(namespace).Delete(name, nil)
if err != nil && !errors.IsNotFound(err) { if err != nil && !errors.IsNotFound(err) {
return err return err
} }
...@@ -450,7 +450,7 @@ func (e *EndpointController) syncService(key string) error { ...@@ -450,7 +450,7 @@ func (e *EndpointController) syncService(key string) error {
subsets = endpoints.RepackSubsets(subsets) subsets = endpoints.RepackSubsets(subsets)
// See if there's actually an update here. // See if there's actually an update here.
currentEndpoints, err := e.client.Endpoints(service.Namespace).Get(service.Name) currentEndpoints, err := e.client.Core().Endpoints(service.Namespace).Get(service.Name)
if err != nil { if err != nil {
if errors.IsNotFound(err) { if errors.IsNotFound(err) {
currentEndpoints = &api.Endpoints{ currentEndpoints = &api.Endpoints{
...@@ -496,10 +496,10 @@ func (e *EndpointController) syncService(key string) error { ...@@ -496,10 +496,10 @@ func (e *EndpointController) syncService(key string) error {
createEndpoints := len(currentEndpoints.ResourceVersion) == 0 createEndpoints := len(currentEndpoints.ResourceVersion) == 0
if createEndpoints { if createEndpoints {
// No previous endpoints, create them // No previous endpoints, create them
_, err = e.client.Endpoints(service.Namespace).Create(newEndpoints) _, err = e.client.Core().Endpoints(service.Namespace).Create(newEndpoints)
} else { } else {
// Pre-existing // Pre-existing
_, err = e.client.Endpoints(service.Namespace).Update(newEndpoints) _, err = e.client.Core().Endpoints(service.Namespace).Update(newEndpoints)
} }
if err != nil { if err != nil {
if createEndpoints && errors.IsForbidden(err) { if createEndpoints && errors.IsForbidden(err) {
...@@ -521,7 +521,7 @@ func (e *EndpointController) syncService(key string) error { ...@@ -521,7 +521,7 @@ func (e *EndpointController) syncService(key string) error {
// some stragglers could have been left behind if the endpoint controller // some stragglers could have been left behind if the endpoint controller
// reboots). // reboots).
func (e *EndpointController) checkLeftoverEndpoints() { func (e *EndpointController) checkLeftoverEndpoints() {
list, err := e.client.Endpoints(api.NamespaceAll).List(api.ListOptions{}) list, err := e.client.Core().Endpoints(api.NamespaceAll).List(api.ListOptions{})
if err != nil { if err != nil {
utilruntime.HandleError(fmt.Errorf("Unable to list endpoints (%v); orphaned endpoints will not be cleaned up. (They're pretty harmless, but you can restart this component if you want another attempt made.)", err)) utilruntime.HandleError(fmt.Errorf("Unable to list endpoints (%v); orphaned endpoints will not be cleaned up. (They're pretty harmless, but you can restart this component if you want another attempt made.)", err))
return return
......
...@@ -23,8 +23,8 @@ import ( ...@@ -23,8 +23,8 @@ 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/apis/apps" "k8s.io/kubernetes/pkg/apis/apps"
"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/runtime" "k8s.io/kubernetes/pkg/runtime"
"github.com/golang/glog" "github.com/golang/glog"
...@@ -159,7 +159,7 @@ type petClient interface { ...@@ -159,7 +159,7 @@ type petClient interface {
// apiServerPetClient is a petset aware Kubernetes client. // apiServerPetClient is a petset aware Kubernetes client.
type apiServerPetClient struct { type apiServerPetClient struct {
c *client.Client c internalclientset.Interface
recorder record.EventRecorder recorder record.EventRecorder
petHealthChecker petHealthChecker
} }
...@@ -167,7 +167,7 @@ type apiServerPetClient struct { ...@@ -167,7 +167,7 @@ type apiServerPetClient struct {
// Get gets the pet in the pcb from the apiserver. // Get gets the pet in the pcb from the apiserver.
func (p *apiServerPetClient) Get(pet *pcb) (*pcb, bool, error) { func (p *apiServerPetClient) Get(pet *pcb) (*pcb, bool, error) {
ns := pet.parent.Namespace ns := pet.parent.Namespace
pod, err := podClient(p.c, ns).Get(pet.pod.Name) pod, err := p.c.Core().Pods(ns).Get(pet.pod.Name)
if errors.IsNotFound(err) { if errors.IsNotFound(err) {
return nil, false, nil return nil, false, nil
} }
...@@ -181,7 +181,7 @@ func (p *apiServerPetClient) Get(pet *pcb) (*pcb, bool, error) { ...@@ -181,7 +181,7 @@ func (p *apiServerPetClient) Get(pet *pcb) (*pcb, bool, error) {
// Delete deletes the pet in the pcb from the apiserver. // Delete deletes the pet in the pcb from the apiserver.
func (p *apiServerPetClient) Delete(pet *pcb) error { func (p *apiServerPetClient) Delete(pet *pcb) error {
err := podClient(p.c, pet.parent.Namespace).Delete(pet.pod.Name, nil) err := p.c.Core().Pods(pet.parent.Namespace).Delete(pet.pod.Name, nil)
if errors.IsNotFound(err) { if errors.IsNotFound(err) {
err = nil err = nil
} }
...@@ -191,7 +191,7 @@ func (p *apiServerPetClient) Delete(pet *pcb) error { ...@@ -191,7 +191,7 @@ func (p *apiServerPetClient) Delete(pet *pcb) error {
// Create creates the pet in the pcb. // Create creates the pet in the pcb.
func (p *apiServerPetClient) Create(pet *pcb) error { func (p *apiServerPetClient) Create(pet *pcb) error {
_, err := podClient(p.c, pet.parent.Namespace).Create(pet.pod) _, err := p.c.Core().Pods(pet.parent.Namespace).Create(pet.pod)
p.event(pet.parent, "Create", fmt.Sprintf("pet: %v", pet.pod.Name), err) p.event(pet.parent, "Create", fmt.Sprintf("pet: %v", pet.pod.Name), err)
return err return err
} }
...@@ -200,7 +200,7 @@ func (p *apiServerPetClient) Create(pet *pcb) error { ...@@ -200,7 +200,7 @@ func (p *apiServerPetClient) Create(pet *pcb) error {
// If the pod object of a pet which to be updated has been changed in server side, we // If the pod object of a pet which to be updated has been changed in server side, we
// will get the actual value and set pet identity before retries. // will get the actual value and set pet identity before retries.
func (p *apiServerPetClient) Update(pet *pcb, expectedPet *pcb) (updateErr error) { func (p *apiServerPetClient) Update(pet *pcb, expectedPet *pcb) (updateErr error) {
pc := podClient(p.c, pet.parent.Namespace) pc := p.c.Core().Pods(pet.parent.Namespace)
for i := 0; ; i++ { for i := 0; ; i++ {
updatePod, needsUpdate, err := copyPetID(pet, expectedPet) updatePod, needsUpdate, err := copyPetID(pet, expectedPet)
...@@ -227,12 +227,12 @@ func (p *apiServerPetClient) DeletePVCs(pet *pcb) error { ...@@ -227,12 +227,12 @@ func (p *apiServerPetClient) DeletePVCs(pet *pcb) error {
} }
func (p *apiServerPetClient) getPVC(pvcName, pvcNamespace string) (*api.PersistentVolumeClaim, error) { func (p *apiServerPetClient) getPVC(pvcName, pvcNamespace string) (*api.PersistentVolumeClaim, error) {
pvc, err := claimClient(p.c, pvcNamespace).Get(pvcName) pvc, err := p.c.Core().PersistentVolumeClaims(pvcNamespace).Get(pvcName)
return pvc, err return pvc, err
} }
func (p *apiServerPetClient) createPVC(pvc *api.PersistentVolumeClaim) error { func (p *apiServerPetClient) createPVC(pvc *api.PersistentVolumeClaim) error {
_, err := claimClient(p.c, pvc.Namespace).Create(pvc) _, err := p.c.Core().PersistentVolumeClaims(pvc.Namespace).Create(pvc)
return err return err
} }
......
...@@ -26,8 +26,10 @@ import ( ...@@ -26,8 +26,10 @@ import (
"k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/apis/apps" "k8s.io/kubernetes/pkg/apis/apps"
"k8s.io/kubernetes/pkg/client/cache" "k8s.io/kubernetes/pkg/client/cache"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
unversionedcore "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned"
"k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/client/record"
client "k8s.io/kubernetes/pkg/client/unversioned"
"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/errors" "k8s.io/kubernetes/pkg/util/errors"
...@@ -50,7 +52,7 @@ const ( ...@@ -50,7 +52,7 @@ const (
// PetSetController controls petsets. // PetSetController controls petsets.
type PetSetController struct { type PetSetController struct {
kubeClient *client.Client kubeClient internalclientset.Interface
// newSyncer returns an interface capable of syncing a single pet. // newSyncer returns an interface capable of syncing a single pet.
// Abstracted out for testing. // Abstracted out for testing.
...@@ -81,10 +83,10 @@ type PetSetController struct { ...@@ -81,10 +83,10 @@ type PetSetController struct {
} }
// NewPetSetController creates a new petset controller. // NewPetSetController creates a new petset controller.
func NewPetSetController(podInformer cache.SharedIndexInformer, kubeClient *client.Client, resyncPeriod time.Duration) *PetSetController { func NewPetSetController(podInformer cache.SharedIndexInformer, kubeClient internalclientset.Interface, resyncPeriod time.Duration) *PetSetController {
eventBroadcaster := record.NewBroadcaster() eventBroadcaster := record.NewBroadcaster()
eventBroadcaster.StartLogging(glog.Infof) eventBroadcaster.StartLogging(glog.Infof)
eventBroadcaster.StartRecordingToSink(kubeClient.Events("")) eventBroadcaster.StartRecordingToSink(&unversionedcore.EventSinkImpl{Interface: kubeClient.Core().Events("")})
recorder := eventBroadcaster.NewRecorder(api.EventSource{Component: "petset"}) recorder := eventBroadcaster.NewRecorder(api.EventSource{Component: "petset"})
pc := &apiServerPetClient{kubeClient, recorder, &defaultPetHealthChecker{}} pc := &apiServerPetClient{kubeClient, recorder, &defaultPetHealthChecker{}}
...@@ -309,7 +311,7 @@ func (psc *PetSetController) Sync(key string) error { ...@@ -309,7 +311,7 @@ func (psc *PetSetController) Sync(key string) error {
} }
numPets, syncErr := psc.syncPetSet(&ps, petList) numPets, syncErr := psc.syncPetSet(&ps, petList)
if updateErr := updatePetCount(psc.kubeClient, ps, numPets); updateErr != nil { if updateErr := updatePetCount(psc.kubeClient.Apps(), ps, numPets); updateErr != nil {
glog.Infof("Failed to update replica count for petset %v/%v; requeuing; error: %v", ps.Namespace, ps.Name, updateErr) glog.Infof("Failed to update replica count for petset %v/%v; requeuing; error: %v", ps.Namespace, ps.Name, updateErr)
return errors.NewAggregate([]error{syncErr, updateErr}) return errors.NewAggregate([]error{syncErr, updateErr})
} }
......
...@@ -23,7 +23,7 @@ import ( ...@@ -23,7 +23,7 @@ import (
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/apis/apps" "k8s.io/kubernetes/pkg/apis/apps"
"k8s.io/kubernetes/pkg/client/cache" "k8s.io/kubernetes/pkg/client/cache"
client "k8s.io/kubernetes/pkg/client/unversioned" appsclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/apps/unversioned"
"k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/controller"
"github.com/golang/glog" "github.com/golang/glog"
...@@ -44,37 +44,26 @@ func (o overlappingPetSets) Less(i, j int) bool { ...@@ -44,37 +44,26 @@ func (o overlappingPetSets) Less(i, j int) bool {
} }
// updatePetCount attempts to update the Status.Replicas of the given PetSet, with a single GET/PUT retry. // updatePetCount attempts to update the Status.Replicas of the given PetSet, with a single GET/PUT retry.
func updatePetCount(kubeClient *client.Client, ps apps.PetSet, numPets int) (updateErr error) { func updatePetCount(psClient appsclientset.PetSetsGetter, ps apps.PetSet, numPets int) (updateErr error) {
if ps.Status.Replicas == numPets || kubeClient == nil { if ps.Status.Replicas == numPets || psClient == nil {
return nil return nil
} }
psClient := kubeClient.Apps().PetSets(ps.Namespace)
var getErr error var getErr error
for i, ps := 0, &ps; ; i++ { for i, ps := 0, &ps; ; i++ {
glog.V(4).Infof(fmt.Sprintf("Updating replica count for PetSet: %s/%s, ", ps.Namespace, ps.Name) + glog.V(4).Infof(fmt.Sprintf("Updating replica count for PetSet: %s/%s, ", ps.Namespace, ps.Name) +
fmt.Sprintf("replicas %d->%d (need %d), ", ps.Status.Replicas, numPets, ps.Spec.Replicas)) fmt.Sprintf("replicas %d->%d (need %d), ", ps.Status.Replicas, numPets, ps.Spec.Replicas))
ps.Status = apps.PetSetStatus{Replicas: numPets} ps.Status = apps.PetSetStatus{Replicas: numPets}
_, updateErr = psClient.UpdateStatus(ps) _, updateErr = psClient.PetSets(ps.Namespace).UpdateStatus(ps)
if updateErr == nil || i >= statusUpdateRetries { if updateErr == nil || i >= statusUpdateRetries {
return updateErr return updateErr
} }
if ps, getErr = psClient.Get(ps.Name); getErr != nil { if ps, getErr = psClient.PetSets(ps.Namespace).Get(ps.Name); getErr != nil {
return getErr return getErr
} }
} }
} }
// claimClient returns the pvcClient for the given kubeClient/ns.
func claimClient(kubeClient *client.Client, ns string) client.PersistentVolumeClaimInterface {
return kubeClient.PersistentVolumeClaims(ns)
}
// podClient returns the given podClient for the given kubeClient/ns.
func podClient(kubeClient *client.Client, ns string) client.PodInterface {
return kubeClient.Pods(ns)
}
// unhealthyPetTracker tracks unhealthy pets for petsets. // unhealthyPetTracker tracks unhealthy pets for petsets.
type unhealthyPetTracker struct { type unhealthyPetTracker struct {
pc petClient pc petClient
......
...@@ -27,6 +27,7 @@ import ( ...@@ -27,6 +27,7 @@ import (
"strconv" "strconv"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
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"
client "k8s.io/kubernetes/pkg/client/unversioned" client "k8s.io/kubernetes/pkg/client/unversioned"
...@@ -89,6 +90,10 @@ func Run(s *options.SchedulerServer) error { ...@@ -89,6 +90,10 @@ func Run(s *options.SchedulerServer) error {
if err != nil { if err != nil {
glog.Fatalf("Invalid API configuration: %v", err) glog.Fatalf("Invalid API configuration: %v", err)
} }
kubeClientset, err := clientset.NewForConfig(kubeconfig)
if err != nil {
glog.Fatalf("Invalid API configuration: %v", err)
}
go func() { go func() {
mux := http.NewServeMux() mux := http.NewServeMux()
...@@ -144,12 +149,12 @@ func Run(s *options.SchedulerServer) error { ...@@ -144,12 +149,12 @@ func Run(s *options.SchedulerServer) error {
Namespace: "kube-system", Namespace: "kube-system",
Name: "kube-scheduler", Name: "kube-scheduler",
}, },
Client: kubeClient, EndpointsClient: kubeClientset.Core(),
Identity: id, Identity: id,
EventRecorder: config.Recorder, EventRecorder: config.Recorder,
LeaseDuration: s.LeaderElection.LeaseDuration.Duration, LeaseDuration: s.LeaderElection.LeaseDuration.Duration,
RenewDeadline: s.LeaderElection.RenewDeadline.Duration, RenewDeadline: s.LeaderElection.RenewDeadline.Duration,
RetryPeriod: s.LeaderElection.RetryPeriod.Duration, RetryPeriod: s.LeaderElection.RetryPeriod.Duration,
Callbacks: leaderelection.LeaderCallbacks{ Callbacks: leaderelection.LeaderCallbacks{
OnStartedLeading: run, OnStartedLeading: run,
OnStoppedLeading: func() { OnStoppedLeading: func() {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment