mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-04 09:49:50 +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 {
|
type ReplicationController struct {
|
||||||
JSONBase `json:",inline" yaml:",inline"`
|
JSONBase `json:",inline" yaml:",inline"`
|
||||||
DesiredState ReplicationControllerState `json:"desiredState,omitempty" yaml:"desiredState,omitempty"`
|
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"`
|
Labels map[string]string `json:"labels,omitempty" yaml:"labels,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -339,6 +339,7 @@ func (*ReplicationControllerList) IsAnAPIObject() {}
|
|||||||
type ReplicationController struct {
|
type ReplicationController struct {
|
||||||
JSONBase `json:",inline" yaml:",inline"`
|
JSONBase `json:",inline" yaml:",inline"`
|
||||||
DesiredState ReplicationControllerState `json:"desiredState,omitempty" yaml:"desiredState,omitempty"`
|
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"`
|
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 {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
rs.fillCurrentState(controller)
|
||||||
return controller, err
|
return controller, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,6 +105,7 @@ func (rs *REST) List(selector labels.Selector) (runtime.Object, error) {
|
|||||||
filtered := []api.ReplicationController{}
|
filtered := []api.ReplicationController{}
|
||||||
for _, controller := range controllers.Items {
|
for _, controller := range controllers.Items {
|
||||||
if selector.Matches(labels.Set(controller.Labels)) {
|
if selector.Matches(labels.Set(controller.Labels)) {
|
||||||
|
rs.fillCurrentState(&controller)
|
||||||
filtered = append(filtered, 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) {
|
return watch.Filter(incoming, func(e watch.Event) (watch.Event, bool) {
|
||||||
repController := e.Object.(*api.ReplicationController)
|
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
|
}), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,3 +170,15 @@ func (rs *REST) waitForController(ctrl *api.ReplicationController) (runtime.Obje
|
|||||||
}
|
}
|
||||||
return ctrl, nil
|
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