Add current state to replica controller.

This commit is contained in:
Brendan Burns 2014-09-09 15:45:31 -07:00
parent 4ba4762827
commit e7625c8d91
2 changed files with 52 additions and 3 deletions

View File

@ -92,7 +92,7 @@ func (rs *REST) Get(id string) (runtime.Object, error) {
if err != nil {
return nil, err
}
rs.fillCurrentState(&controller)
rs.fillCurrentState(controller)
return controller, err
}
@ -149,7 +149,11 @@ func (rs *REST) Watch(label, field labels.Selector, resourceVersion uint64) (wat
}
return watch.Filter(incoming, func(e watch.Event) (watch.Event, bool) {
repController := e.Object.(*api.ReplicationController)
return e, label.Matches(labels.Set(repController.Labels))
match := label.Matches(labels.Set(repController.Labels))
if match {
rs.fillCurrentState(repController)
}
return e, match
}), nil
}
@ -168,9 +172,13 @@ func (rs *REST) waitForController(ctrl *api.ReplicationController) (runtime.Obje
}
func (rs *REST) fillCurrentState(ctrl *api.ReplicationController) error {
list, err := rs.podLister.ListPods(ctrl.DesiredState.ReplicaSelector)
if rs.podLister == nil {
return nil
}
list, err := rs.podLister.ListPods(labels.Set(ctrl.DesiredState.ReplicaSelector).AsSelector())
if err != nil {
return err
}
ctrl.CurrentState.Replicas = len(list.Items)
return nil
}

View File

@ -316,3 +316,44 @@ func TestControllerStorageValidatesUpdate(t *testing.T) {
}
}
}
type fakePodLister struct {
e error
l api.PodList
s labels.Selector
}
func (f *fakePodLister) ListPods(s labels.Selector) (*api.PodList, error) {
f.s = s
return &f.l, f.e
}
func TestFillCurrentState(t *testing.T) {
fakeLister := fakePodLister{
l: api.PodList{
Items: []api.Pod{
{JSONBase: api.JSONBase{ID: "foo"}},
{JSONBase: api.JSONBase{ID: "bar"}},
},
},
}
mockRegistry := registrytest.ControllerRegistry{}
storage := REST{
registry: &mockRegistry,
podLister: &fakeLister,
}
controller := api.ReplicationController{
DesiredState: api.ReplicationControllerState{
ReplicaSelector: map[string]string{
"foo": "bar",
},
},
}
storage.fillCurrentState(&controller)
if controller.CurrentState.Replicas != 2 {
t.Errorf("expected 2, got: %d", controller.CurrentState.Replicas)
}
if !reflect.DeepEqual(fakeLister.s, labels.Set(controller.DesiredState.ReplicaSelector).AsSelector()) {
t.Errorf("unexpected output: %#v %#v", labels.Set(controller.DesiredState.ReplicaSelector).AsSelector(), fakeLister.s)
}
}