From fd07de6ed6012cd64235b774e454a8468a34dfae Mon Sep 17 00:00:00 2001 From: Tim Hockin Date: Tue, 19 May 2015 23:23:16 -0700 Subject: [PATCH] Change v1 API to default RC replicas to 1 --- pkg/api/v1/conversion.go | 68 ++++++++++++++++++++++++++++ pkg/api/v1/conversion_generated.go | 66 --------------------------- pkg/api/v1/defaults.go | 4 ++ pkg/api/v1/defaults_test.go | 73 ++++++++++++++++++++++++++++++ pkg/api/v1/types.go | 2 +- 5 files changed, 146 insertions(+), 67 deletions(-) diff --git a/pkg/api/v1/conversion.go b/pkg/api/v1/conversion.go index bd066e7f784..bde80f7790e 100644 --- a/pkg/api/v1/conversion.go +++ b/pkg/api/v1/conversion.go @@ -25,9 +25,12 @@ import ( ) func addConversionFuncs() { + // Add non-generated conversion functions err := api.Scheme.AddConversionFuncs( convert_api_StatusDetails_To_v1_StatusDetails, convert_v1_StatusDetails_To_api_StatusDetails, + convert_v1_ReplicationControllerSpec_To_api_ReplicationControllerSpec, + convert_api_ReplicationControllerSpec_To_v1_ReplicationControllerSpec, ) if err != nil { // If one of the conversion functions is malformed, detect it immediately. @@ -175,3 +178,68 @@ func convert_api_StatusCause_To_v1_StatusCause(in *api.StatusCause, out *StatusC out.Field = in.Field return nil } + +func convert_api_ReplicationControllerSpec_To_v1_ReplicationControllerSpec(in *api.ReplicationControllerSpec, out *ReplicationControllerSpec, s conversion.Scope) error { + if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { + defaulting.(func(*api.ReplicationControllerSpec))(in) + } + out.Replicas = new(int) + *out.Replicas = in.Replicas + if in.Selector != nil { + out.Selector = make(map[string]string) + for key, val := range in.Selector { + out.Selector[key] = val + } + } else { + out.Selector = nil + } + if in.TemplateRef != nil { + out.TemplateRef = new(ObjectReference) + if err := convert_api_ObjectReference_To_v1_ObjectReference(in.TemplateRef, out.TemplateRef, s); err != nil { + return err + } + } else { + out.TemplateRef = nil + } + if in.Template != nil { + out.Template = new(PodTemplateSpec) + if err := convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(in.Template, out.Template, s); err != nil { + return err + } + } else { + out.Template = nil + } + return nil +} + +func convert_v1_ReplicationControllerSpec_To_api_ReplicationControllerSpec(in *ReplicationControllerSpec, out *api.ReplicationControllerSpec, s conversion.Scope) error { + if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { + defaulting.(func(*ReplicationControllerSpec))(in) + } + out.Replicas = *in.Replicas + if in.Selector != nil { + out.Selector = make(map[string]string) + for key, val := range in.Selector { + out.Selector[key] = val + } + } else { + out.Selector = nil + } + if in.TemplateRef != nil { + out.TemplateRef = new(api.ObjectReference) + if err := convert_v1_ObjectReference_To_api_ObjectReference(in.TemplateRef, out.TemplateRef, s); err != nil { + return err + } + } else { + out.TemplateRef = nil + } + if in.Template != nil { + out.Template = new(api.PodTemplateSpec) + if err := convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(in.Template, out.Template, s); err != nil { + return err + } + } else { + out.Template = nil + } + return nil +} diff --git a/pkg/api/v1/conversion_generated.go b/pkg/api/v1/conversion_generated.go index 2d44cdf893b..bade3a33c4b 100644 --- a/pkg/api/v1/conversion_generated.go +++ b/pkg/api/v1/conversion_generated.go @@ -1663,38 +1663,6 @@ func convert_api_ReplicationControllerList_To_v1_ReplicationControllerList(in *a return nil } -func convert_api_ReplicationControllerSpec_To_v1_ReplicationControllerSpec(in *api.ReplicationControllerSpec, out *ReplicationControllerSpec, s conversion.Scope) error { - if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { - defaulting.(func(*api.ReplicationControllerSpec))(in) - } - out.Replicas = in.Replicas - if in.Selector != nil { - out.Selector = make(map[string]string) - for key, val := range in.Selector { - out.Selector[key] = val - } - } else { - out.Selector = nil - } - if in.TemplateRef != nil { - out.TemplateRef = new(ObjectReference) - if err := convert_api_ObjectReference_To_v1_ObjectReference(in.TemplateRef, out.TemplateRef, s); err != nil { - return err - } - } else { - out.TemplateRef = nil - } - if in.Template != nil { - out.Template = new(PodTemplateSpec) - if err := convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(in.Template, out.Template, s); err != nil { - return err - } - } else { - out.Template = nil - } - return nil -} - func convert_api_ReplicationControllerStatus_To_v1_ReplicationControllerStatus(in *api.ReplicationControllerStatus, out *ReplicationControllerStatus, s conversion.Scope) error { if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { defaulting.(func(*api.ReplicationControllerStatus))(in) @@ -3876,38 +3844,6 @@ func convert_v1_ReplicationControllerList_To_api_ReplicationControllerList(in *R return nil } -func convert_v1_ReplicationControllerSpec_To_api_ReplicationControllerSpec(in *ReplicationControllerSpec, out *api.ReplicationControllerSpec, s conversion.Scope) error { - if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { - defaulting.(func(*ReplicationControllerSpec))(in) - } - out.Replicas = in.Replicas - if in.Selector != nil { - out.Selector = make(map[string]string) - for key, val := range in.Selector { - out.Selector[key] = val - } - } else { - out.Selector = nil - } - if in.TemplateRef != nil { - out.TemplateRef = new(api.ObjectReference) - if err := convert_v1_ObjectReference_To_api_ObjectReference(in.TemplateRef, out.TemplateRef, s); err != nil { - return err - } - } else { - out.TemplateRef = nil - } - if in.Template != nil { - out.Template = new(api.PodTemplateSpec) - if err := convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(in.Template, out.Template, s); err != nil { - return err - } - } else { - out.Template = nil - } - return nil -} - func convert_v1_ReplicationControllerStatus_To_api_ReplicationControllerStatus(in *ReplicationControllerStatus, out *api.ReplicationControllerStatus, s conversion.Scope) error { if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { defaulting.(func(*ReplicationControllerStatus))(in) @@ -4535,7 +4471,6 @@ func init() { convert_api_Probe_To_v1_Probe, convert_api_RangeAllocation_To_v1_RangeAllocation, convert_api_ReplicationControllerList_To_v1_ReplicationControllerList, - convert_api_ReplicationControllerSpec_To_v1_ReplicationControllerSpec, convert_api_ReplicationControllerStatus_To_v1_ReplicationControllerStatus, convert_api_ReplicationController_To_v1_ReplicationController, convert_api_ResourceQuotaList_To_v1_ResourceQuotaList, @@ -4644,7 +4579,6 @@ func init() { convert_v1_Probe_To_api_Probe, convert_v1_RangeAllocation_To_api_RangeAllocation, convert_v1_ReplicationControllerList_To_api_ReplicationControllerList, - convert_v1_ReplicationControllerSpec_To_api_ReplicationControllerSpec, convert_v1_ReplicationControllerStatus_To_api_ReplicationControllerStatus, convert_v1_ReplicationController_To_api_ReplicationController, convert_v1_ResourceQuotaList_To_api_ResourceQuotaList, diff --git a/pkg/api/v1/defaults.go b/pkg/api/v1/defaults.go index 728c73b6602..d7814b04453 100644 --- a/pkg/api/v1/defaults.go +++ b/pkg/api/v1/defaults.go @@ -39,6 +39,10 @@ func addDefaultingFuncs() { obj.Labels = labels } } + if obj.Spec.Replicas == nil { + obj.Spec.Replicas = new(int) + *obj.Spec.Replicas = 1 + } }, func(obj *Volume) { if util.AllPtrFieldsNil(&obj.VolumeSource) { diff --git a/pkg/api/v1/defaults_test.go b/pkg/api/v1/defaults_test.go index 83ba8714a4e..17078e31ce4 100644 --- a/pkg/api/v1/defaults_test.go +++ b/pkg/api/v1/defaults_test.go @@ -155,6 +155,79 @@ func TestSetDefaultReplicationController(t *testing.T) { } } +func newInt(val int) *int { + p := new(int) + *p = val + return p +} + +func TestSetDefaultReplicationControllerReplicas(t *testing.T) { + tests := []struct { + rc versioned.ReplicationController + expectReplicas int + }{ + { + rc: versioned.ReplicationController{ + Spec: versioned.ReplicationControllerSpec{ + Template: &versioned.PodTemplateSpec{ + ObjectMeta: versioned.ObjectMeta{ + Labels: map[string]string{ + "foo": "bar", + }, + }, + }, + }, + }, + expectReplicas: 1, + }, + { + rc: versioned.ReplicationController{ + Spec: versioned.ReplicationControllerSpec{ + Replicas: newInt(0), + Template: &versioned.PodTemplateSpec{ + ObjectMeta: versioned.ObjectMeta{ + Labels: map[string]string{ + "foo": "bar", + }, + }, + }, + }, + }, + expectReplicas: 0, + }, + { + rc: versioned.ReplicationController{ + Spec: versioned.ReplicationControllerSpec{ + Replicas: newInt(3), + Template: &versioned.PodTemplateSpec{ + ObjectMeta: versioned.ObjectMeta{ + Labels: map[string]string{ + "foo": "bar", + }, + }, + }, + }, + }, + expectReplicas: 3, + }, + } + + for _, test := range tests { + rc := &test.rc + obj2 := roundTrip(t, runtime.Object(rc)) + rc2, ok := obj2.(*versioned.ReplicationController) + if !ok { + t.Errorf("unexpected object: %v", rc2) + t.FailNow() + } + if rc2.Spec.Replicas == nil { + t.Errorf("unexpected nil Replicas") + } else if test.expectReplicas != *rc2.Spec.Replicas { + t.Errorf("expected: %d replicas, got: %d", test.expectReplicas, *rc2.Spec.Replicas) + } + } +} + func TestSetDefaultService(t *testing.T) { svc := &versioned.Service{} obj2 := roundTrip(t, runtime.Object(svc)) diff --git a/pkg/api/v1/types.go b/pkg/api/v1/types.go index 498c10ada37..2fb2a5bc270 100644 --- a/pkg/api/v1/types.go +++ b/pkg/api/v1/types.go @@ -909,7 +909,7 @@ type PodTemplateList struct { // ReplicationControllerSpec is the specification of a replication controller. type ReplicationControllerSpec struct { // Replicas is the number of desired replicas. - Replicas int `json:"replicas,omitempty" description:"number of replicas desired"` + Replicas *int `json:"replicas,omitempty" description:"number of replicas desired; defaults to 1"` // Selector is a label query over pods that should match the Replicas count. // If Selector is empty, it is defaulted to the labels present on the Pod template.