mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-30 23:15:14 +00:00
Merge pull request #1248 from brendandburns/replicas
Make replica controllers return current state.
This commit is contained in:
commit
48913672d9
@ -326,6 +326,7 @@ func (*ReplicationControllerList) IsAnAPIObject() {}
|
||||
type ReplicationController struct {
|
||||
JSONBase `json:",inline" yaml:",inline"`
|
||||
DesiredState ReplicationControllerState `json:"desiredState,omitempty" yaml:"desiredState,omitempty"`
|
||||
CurrentState ReplicationControllerState `json:"currentState,omitempty" yaml:"currentState,omitempty"`
|
||||
Labels map[string]string `json:"labels,omitempty" yaml:"labels,omitempty"`
|
||||
}
|
||||
|
||||
|
@ -339,6 +339,7 @@ func (*ReplicationControllerList) IsAnAPIObject() {}
|
||||
type ReplicationController struct {
|
||||
JSONBase `json:",inline" yaml:",inline"`
|
||||
DesiredState ReplicationControllerState `json:"desiredState,omitempty" yaml:"desiredState,omitempty"`
|
||||
CurrentState ReplicationControllerState `json:"currentState,omitempty" yaml:"currentState,omitempty"`
|
||||
Labels map[string]string `json:"labels,omitempty" yaml:"labels,omitempty"`
|
||||
}
|
||||
|
||||
|
@ -92,6 +92,7 @@ func (rs *REST) Get(id string) (runtime.Object, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
rs.fillCurrentState(controller)
|
||||
return controller, err
|
||||
}
|
||||
|
||||
@ -104,6 +105,7 @@ func (rs *REST) List(selector labels.Selector) (runtime.Object, error) {
|
||||
filtered := []api.ReplicationController{}
|
||||
for _, controller := range controllers.Items {
|
||||
if selector.Matches(labels.Set(controller.Labels)) {
|
||||
rs.fillCurrentState(&controller)
|
||||
filtered = append(filtered, controller)
|
||||
}
|
||||
}
|
||||
@ -147,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
|
||||
}
|
||||
|
||||
@ -164,3 +170,15 @@ func (rs *REST) waitForController(ctrl *api.ReplicationController) (runtime.Obje
|
||||
}
|
||||
return ctrl, nil
|
||||
}
|
||||
|
||||
func (rs *REST) fillCurrentState(ctrl *api.ReplicationController) error {
|
||||
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
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user