From d4b32a837107e4d14b3a71ea54918c48b3bf71d7 Mon Sep 17 00:00:00 2001 From: Wojciech Tyczynski Date: Wed, 6 May 2015 09:05:58 +0200 Subject: [PATCH 1/2] Support both manual and generate conversions --- pkg/conversion/converter.go | 73 +++++++++++++++++++++++--------- pkg/conversion/converter_test.go | 22 ++++++++++ pkg/conversion/generator.go | 72 +++++++++++++++++++++++++------ pkg/conversion/scheme.go | 7 ++- 4 files changed, 139 insertions(+), 35 deletions(-) diff --git a/pkg/conversion/converter.go b/pkg/conversion/converter.go index 9e3a6385d5d..9f3cdc3a94f 100644 --- a/pkg/conversion/converter.go +++ b/pkg/conversion/converter.go @@ -40,7 +40,8 @@ type DebugLogger interface { type Converter struct { // Map from the conversion pair to a function which can // do the conversion. - conversionFuncs map[typePair]reflect.Value + conversionFuncs map[typePair]reflect.Value + generatedConversionFuncs map[typePair]reflect.Value // This is a map from a source field type and name, to a list of destination // field type and name. @@ -72,11 +73,12 @@ type Converter struct { // NewConverter creates a new Converter object. func NewConverter() *Converter { c := &Converter{ - conversionFuncs: map[typePair]reflect.Value{}, - defaultingFuncs: map[reflect.Type]reflect.Value{}, - nameFunc: func(t reflect.Type) string { return t.Name() }, - structFieldDests: map[typeNamePair][]typeNamePair{}, - structFieldSources: map[typeNamePair][]typeNamePair{}, + conversionFuncs: map[typePair]reflect.Value{}, + generatedConversionFuncs: map[typePair]reflect.Value{}, + defaultingFuncs: map[reflect.Type]reflect.Value{}, + nameFunc: func(t reflect.Type) string { return t.Name() }, + structFieldDests: map[typeNamePair][]typeNamePair{}, + structFieldSources: map[typeNamePair][]typeNamePair{}, inputFieldMappingFuncs: map[reflect.Type]FieldMappingFunc{}, inputDefaultFlags: map[reflect.Type]FieldMatchingFlags{}, @@ -238,20 +240,8 @@ func (s *scope) error(message string, args ...interface{}) error { return fmt.Errorf(where+message, args...) } -// RegisterConversionFunc registers a conversion func with the -// Converter. conversionFunc must take three parameters: a pointer to the input -// type, a pointer to the output type, and a conversion.Scope (which should be -// used if recursive conversion calls are desired). It must return an error. -// -// Example: -// c.RegisteConversionFunc( -// func(in *Pod, out *v1beta1.Pod, s Scope) error { -// // conversion logic... -// return nil -// }) -func (c *Converter) RegisterConversionFunc(conversionFunc interface{}) error { - fv := reflect.ValueOf(conversionFunc) - ft := fv.Type() +// Verifies whether a conversion function has a correct signature. +func verifyConversionFunctionSignature(ft reflect.Type) error { if ft.Kind() != reflect.Func { return fmt.Errorf("expected func, got: %v", ft) } @@ -278,10 +268,47 @@ func (c *Converter) RegisterConversionFunc(conversionFunc interface{}) error { if ft.Out(0) != errorType { return fmt.Errorf("expected error return, got: %v", ft) } + return nil +} + +// RegisterConversionFunc registers a conversion func with the +// Converter. conversionFunc must take three parameters: a pointer to the input +// type, a pointer to the output type, and a conversion.Scope (which should be +// used if recursive conversion calls are desired). It must return an error. +// +// Example: +// c.RegisteConversionFunc( +// func(in *Pod, out *v1beta1.Pod, s Scope) error { +// // conversion logic... +// return nil +// }) +func (c *Converter) RegisterConversionFunc(conversionFunc interface{}) error { + fv := reflect.ValueOf(conversionFunc) + ft := fv.Type() + if err := verifyConversionFunctionSignature(ft); err != nil { + return err + } c.conversionFuncs[typePair{ft.In(0).Elem(), ft.In(1).Elem()}] = fv return nil } +// Similar to RegisterConversionFunc, but registers conversion function that were +// automatically generated. +func (c *Converter) RegisterGeneratedConversionFunc(conversionFunc interface{}) error { + fv := reflect.ValueOf(conversionFunc) + ft := fv.Type() + if err := verifyConversionFunctionSignature(ft); err != nil { + return err + } + c.generatedConversionFuncs[typePair{ft.In(0).Elem(), ft.In(1).Elem()}] = fv + return nil +} + +func (c *Converter) HasConversionFunc(inType, outType reflect.Type) bool { + _, found := c.conversionFuncs[typePair{inType, outType}] + return found +} + // SetStructFieldCopy registers a correspondence. Whenever a struct field is encountered // which has a type and name matching srcFieldType and srcFieldName, it wil be copied // into the field in the destination struct matching destFieldType & Name, if such a @@ -469,6 +496,12 @@ func (c *Converter) convert(sv, dv reflect.Value, scope *scope) error { } return c.callCustom(sv, dv, fv, scope) } + if fv, ok := c.generatedConversionFuncs[typePair{st, dt}]; ok { + if c.Debug != nil { + c.Debug.Logf("Calling custom conversion of '%v' to '%v'", st, dt) + } + return c.callCustom(sv, dv, fv, scope) + } return c.defaultConvert(sv, dv, scope) } diff --git a/pkg/conversion/converter_test.go b/pkg/conversion/converter_test.go index 0907c98ad20..6ba1bac9cc8 100644 --- a/pkg/conversion/converter_test.go +++ b/pkg/conversion/converter_test.go @@ -187,6 +187,28 @@ func TestConverter_CallsRegisteredFunctions(t *testing.T) { } } +func TestConverter_GeneratedConversionOverriden(t *testing.T) { + type A struct{} + type B struct{} + c := NewConverter() + if err := c.RegisterConversionFunc(func(in *A, out *B, s Scope) error { + return nil + }); err != nil { + t.Fatalf("unexpected error %v", err) + } + if err := c.RegisterGeneratedConversionFunc(func(in *A, out *B, s Scope) error { + return fmt.Errorf("generated function should be overriden") + }); err != nil { + t.Fatalf("unexpected error %v", err) + } + + a := A{} + b := B{} + if err := c.Convert(&a, &b, 0, nil); err != nil { + t.Errorf("%v", err) + } +} + func TestConverter_MapsStringArrays(t *testing.T) { type A struct { Foo string diff --git a/pkg/conversion/generator.go b/pkg/conversion/generator.go index cc810e2b0e1..02c869b51d0 100644 --- a/pkg/conversion/generator.go +++ b/pkg/conversion/generator.go @@ -64,6 +64,8 @@ func (g *generator) GenerateConversionsForType(version string, reflection reflec } func (g *generator) generateConversionsBetween(inType, outType reflect.Type) error { + existingConversion := g.scheme.Converter().HasConversionFunc(inType, outType) && g.scheme.Converter().HasConversionFunc(outType, inType) + // Avoid processing the same type multiple times. if value, found := g.convertibles[inType]; found { if value != outType { @@ -79,19 +81,50 @@ func (g *generator) generateConversionsBetween(inType, outType reflect.Type) err if inType.Kind() != outType.Kind() { return fmt.Errorf("cannot convert types of different kinds: %v %v", inType, outType) } + // We should be able to generate conversions both sides. switch inType.Kind() { case reflect.Map: - return g.generateConversionsForMap(inType, outType) - case reflect.Ptr: - return g.generateConversionsBetween(inType.Elem(), outType.Elem()) - case reflect.Slice: - return g.generateConversionsForSlice(inType, outType) - case reflect.Interface: - // TODO(wojtek-t): Currently we rely on default conversion functions for interfaces. - // Add support for reflect.Interface. + inErr := g.generateConversionsForMap(inType, outType) + outErr := g.generateConversionsForMap(outType, inType) + if !existingConversion && (inErr != nil || outErr != nil) { + return inErr + } + // We don't add it to g.convertibles - maps should be handled correctly + // inside appropriate conversion functions. return nil + case reflect.Ptr: + inErr := g.generateConversionsBetween(inType.Elem(), outType.Elem()) + outErr := g.generateConversionsBetween(outType.Elem(), inType.Elem()) + if !existingConversion && (inErr != nil || outErr != nil) { + return inErr + } + // We don't add it to g.convertibles - maps should be handled correctly + // inside appropriate conversion functions. + return nil + case reflect.Slice: + inErr := g.generateConversionsForSlice(inType, outType) + outErr := g.generateConversionsForSlice(outType, inType) + if !existingConversion && (inErr != nil || outErr != nil) { + return inErr + } + // We don't add it to g.convertibles - slices should be handled correctly + // inside appropriate conversion functions. + return nil + case reflect.Interface: + // TODO(wojtek-t): Currently we don't support converting interfaces. + return fmt.Errorf("interfaces are not supported") case reflect.Struct: - return g.generateConversionsForStruct(inType, outType) + inErr := g.generateConversionsForStruct(inType, outType) + outErr := g.generateConversionsForStruct(outType, inType) + if !existingConversion && (inErr != nil || outErr != nil) { + return inErr + } + if !existingConversion { + if _, found := g.convertibles[outType]; !found { + g.convertibles[inType] = outType + } + } + return nil default: // All simple types should be handled correctly with default conversion. return nil @@ -119,8 +152,6 @@ func (g *generator) generateConversionsForMap(inType, outType reflect.Type) erro if err := g.generateConversionsBetween(inValue, outValue); err != nil { return err } - // We don't add it to g.convertibles - maps should be handled correctly - // inside appropriate conversion functions. return nil } @@ -130,8 +161,6 @@ func (g *generator) generateConversionsForSlice(inType, outType reflect.Type) er if err := g.generateConversionsBetween(inElem, outElem); err != nil { return err } - // We don't add it to g.convertibles - slices should be handled correctly - // inside appropriate conversion functions. return nil } @@ -151,7 +180,6 @@ func (g *generator) generateConversionsForStruct(inType, outType reflect.Type) e } } } - g.convertibles[inType] = outType return nil } @@ -477,6 +505,22 @@ func (g *generator) writeConversionForStruct(w io.Writer, inType, outType reflec inField := inType.Field(i) outField, _ := outType.FieldByName(inField.Name) + if g.scheme.Converter().HasConversionFunc(inField.Type, outField.Type) { + // Use the conversion method that is already defined. + assignFormat := "if err := s.Convert(&in.%s, &out.%s, 0); err != nil {\n" + assignStmt := fmt.Sprintf(assignFormat, inField.Name, outField.Name) + if err := writeLine(w, indent, assignStmt); err != nil { + return err + } + if err := writeLine(w, indent+1, "return err\n"); err != nil { + return err + } + if err := writeLine(w, indent, "}\n"); err != nil { + return err + } + continue + } + switch inField.Type.Kind() { case reflect.Map, reflect.Ptr, reflect.Slice, reflect.Interface, reflect.Struct: // Don't copy these via assignment/conversion! diff --git a/pkg/conversion/scheme.go b/pkg/conversion/scheme.go index f842f103104..39ecae81733 100644 --- a/pkg/conversion/scheme.go +++ b/pkg/conversion/scheme.go @@ -259,7 +259,12 @@ func (s *Scheme) AddConversionFuncs(conversionFuncs ...interface{}) error { // Similar to AddConversionFuncs, but registers conversion functions that were // automatically generated. func (s *Scheme) AddGeneratedConversionFuncs(conversionFuncs ...interface{}) error { - return s.AddConversionFuncs(conversionFuncs...) + for _, f := range conversionFuncs { + if err := s.converter.RegisterGeneratedConversionFunc(f); err != nil { + return err + } + } + return nil } // AddStructFieldConversion allows you to specify a mechanical copy for a moved From 458fec6c9921b0b50030343820b4b64b1a7990d4 Mon Sep 17 00:00:00 2001 From: Wojciech Tyczynski Date: Wed, 6 May 2015 12:04:05 +0200 Subject: [PATCH 2/2] Generate conversion functions for v1beta3 --- pkg/api/v1beta3/conversion.go | 818 +++++++++++++++++++--------------- 1 file changed, 468 insertions(+), 350 deletions(-) diff --git a/pkg/api/v1beta3/conversion.go b/pkg/api/v1beta3/conversion.go index 6953b1dd4cb..43da6094774 100644 --- a/pkg/api/v1beta3/conversion.go +++ b/pkg/api/v1beta3/conversion.go @@ -68,6 +68,38 @@ func convert_api_Binding_To_v1beta3_Binding(in *newer.Binding, out *Binding, s c return nil } +func convert_api_Capabilities_To_v1beta3_Capabilities(in *newer.Capabilities, out *Capabilities, s conversion.Scope) error { + if in.Add != nil { + out.Add = make([]CapabilityType, len(in.Add)) + for i := range in.Add { + out.Add[i] = CapabilityType(in.Add[i]) + } + } + if in.Drop != nil { + out.Drop = make([]CapabilityType, len(in.Drop)) + for i := range in.Drop { + out.Drop[i] = CapabilityType(in.Drop[i]) + } + } + return nil +} + +func convert_v1beta3_Capabilities_To_api_Capabilities(in *Capabilities, out *newer.Capabilities, s conversion.Scope) error { + if in.Add != nil { + out.Add = make([]newer.CapabilityType, len(in.Add)) + for i := range in.Add { + out.Add[i] = newer.CapabilityType(in.Add[i]) + } + } + if in.Drop != nil { + out.Drop = make([]newer.CapabilityType, len(in.Drop)) + for i := range in.Drop { + out.Drop[i] = newer.CapabilityType(in.Drop[i]) + } + } + return nil +} + func convert_v1beta3_ComponentCondition_To_api_ComponentCondition(in *ComponentCondition, out *newer.ComponentCondition, s conversion.Scope) error { out.Type = newer.ComponentConditionType(in.Type) out.Status = newer.ConditionStatus(in.Status) @@ -900,6 +932,32 @@ func convert_api_LimitRangeSpec_To_v1beta3_LimitRangeSpec(in *newer.LimitRangeSp return nil } +func convert_v1beta3_List_To_api_List(in *List, out *newer.List, s conversion.Scope) error { + if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { + return err + } + if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil { + return err + } + if err := s.Convert(&in.Items, &out.Items, 0); err != nil { + return err + } + return nil +} + +func convert_api_List_To_v1beta3_List(in *newer.List, out *List, s conversion.Scope) error { + if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { + return err + } + if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil { + return err + } + if err := s.Convert(&in.Items, &out.Items, 0); err != nil { + return err + } + return nil +} + func convert_v1beta3_ListMeta_To_api_ListMeta(in *ListMeta, out *newer.ListMeta, s conversion.Scope) error { out.SelfLink = in.SelfLink out.ResourceVersion = in.ResourceVersion @@ -1644,6 +1702,38 @@ func convert_api_PersistentVolumeStatus_To_v1beta3_PersistentVolumeStatus(in *ne return nil } +func convert_v1beta3_Pod_To_api_Pod(in *Pod, out *newer.Pod, s conversion.Scope) error { + if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { + return err + } + if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { + return err + } + if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil { + return err + } + if err := s.Convert(&in.Status, &out.Status, 0); err != nil { + return err + } + return nil +} + +func convert_api_Pod_To_v1beta3_Pod(in *newer.Pod, out *Pod, s conversion.Scope) error { + if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { + return err + } + if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { + return err + } + if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil { + return err + } + if err := s.Convert(&in.Status, &out.Status, 0); err != nil { + return err + } + return nil +} + func convert_v1beta3_PodCondition_To_api_PodCondition(in *PodCondition, out *newer.PodCondition, s conversion.Scope) error { out.Type = newer.PodConditionType(in.Type) out.Status = newer.ConditionStatus(in.Status) @@ -1692,6 +1782,42 @@ func convert_api_PodExecOptions_To_v1beta3_PodExecOptions(in *newer.PodExecOptio return nil } +func convert_v1beta3_PodList_To_api_PodList(in *PodList, out *newer.PodList, s conversion.Scope) error { + if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { + return err + } + if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil { + return err + } + if in.Items != nil { + out.Items = make([]newer.Pod, len(in.Items)) + for i := range in.Items { + if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil { + return err + } + } + } + return nil +} + +func convert_api_PodList_To_v1beta3_PodList(in *newer.PodList, out *PodList, s conversion.Scope) error { + if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { + return err + } + if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil { + return err + } + if in.Items != nil { + out.Items = make([]Pod, len(in.Items)) + for i := range in.Items { + if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil { + return err + } + } + } + return nil +} + func convert_v1beta3_PodLogOptions_To_api_PodLogOptions(in *PodLogOptions, out *newer.PodLogOptions, s conversion.Scope) error { if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { return err @@ -1726,6 +1852,74 @@ func convert_api_PodProxyOptions_To_v1beta3_PodProxyOptions(in *newer.PodProxyOp return nil } +func convert_v1beta3_PodSpec_To_api_PodSpec(in *PodSpec, out *newer.PodSpec, s conversion.Scope) error { + if in.Volumes != nil { + out.Volumes = make([]newer.Volume, len(in.Volumes)) + for i := range in.Volumes { + if err := s.Convert(&in.Volumes[i], &out.Volumes[i], 0); err != nil { + return err + } + } + } + if in.Containers != nil { + out.Containers = make([]newer.Container, len(in.Containers)) + for i := range in.Containers { + if err := s.Convert(&in.Containers[i], &out.Containers[i], 0); err != nil { + return err + } + } + } + out.RestartPolicy = newer.RestartPolicy(in.RestartPolicy) + if in.TerminationGracePeriodSeconds != nil { + out.TerminationGracePeriodSeconds = new(int64) + *out.TerminationGracePeriodSeconds = *in.TerminationGracePeriodSeconds + } + out.DNSPolicy = newer.DNSPolicy(in.DNSPolicy) + if in.NodeSelector != nil { + out.NodeSelector = make(map[string]string) + for key, val := range in.NodeSelector { + out.NodeSelector[key] = val + } + } + out.Host = in.Host + out.HostNetwork = in.HostNetwork + return nil +} + +func convert_api_PodSpec_To_v1beta3_PodSpec(in *newer.PodSpec, out *PodSpec, s conversion.Scope) error { + if in.Volumes != nil { + out.Volumes = make([]Volume, len(in.Volumes)) + for i := range in.Volumes { + if err := s.Convert(&in.Volumes[i], &out.Volumes[i], 0); err != nil { + return err + } + } + } + if in.Containers != nil { + out.Containers = make([]Container, len(in.Containers)) + for i := range in.Containers { + if err := s.Convert(&in.Containers[i], &out.Containers[i], 0); err != nil { + return err + } + } + } + out.RestartPolicy = RestartPolicy(in.RestartPolicy) + if in.TerminationGracePeriodSeconds != nil { + out.TerminationGracePeriodSeconds = new(int64) + *out.TerminationGracePeriodSeconds = *in.TerminationGracePeriodSeconds + } + out.DNSPolicy = DNSPolicy(in.DNSPolicy) + if in.NodeSelector != nil { + out.NodeSelector = make(map[string]string) + for key, val := range in.NodeSelector { + out.NodeSelector[key] = val + } + } + out.Host = in.Host + out.HostNetwork = in.HostNetwork + return nil +} + func convert_v1beta3_PodStatus_To_api_PodStatus(in *PodStatus, out *newer.PodStatus, s conversion.Scope) error { out.Phase = newer.PodPhase(in.Phase) if in.Conditions != nil { @@ -1800,6 +1994,88 @@ func convert_api_PodStatusResult_To_v1beta3_PodStatusResult(in *newer.PodStatusR return nil } +func convert_v1beta3_PodTemplate_To_api_PodTemplate(in *PodTemplate, out *newer.PodTemplate, s conversion.Scope) error { + if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { + return err + } + if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { + return err + } + if err := s.Convert(&in.Template, &out.Template, 0); err != nil { + return err + } + return nil +} + +func convert_api_PodTemplate_To_v1beta3_PodTemplate(in *newer.PodTemplate, out *PodTemplate, s conversion.Scope) error { + if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { + return err + } + if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { + return err + } + if err := s.Convert(&in.Template, &out.Template, 0); err != nil { + return err + } + return nil +} + +func convert_v1beta3_PodTemplateList_To_api_PodTemplateList(in *PodTemplateList, out *newer.PodTemplateList, s conversion.Scope) error { + if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { + return err + } + if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil { + return err + } + if in.Items != nil { + out.Items = make([]newer.PodTemplate, len(in.Items)) + for i := range in.Items { + if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil { + return err + } + } + } + return nil +} + +func convert_api_PodTemplateList_To_v1beta3_PodTemplateList(in *newer.PodTemplateList, out *PodTemplateList, s conversion.Scope) error { + if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { + return err + } + if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil { + return err + } + if in.Items != nil { + out.Items = make([]PodTemplate, len(in.Items)) + for i := range in.Items { + if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil { + return err + } + } + } + return nil +} + +func convert_v1beta3_PodTemplateSpec_To_api_PodTemplateSpec(in *PodTemplateSpec, out *newer.PodTemplateSpec, s conversion.Scope) error { + if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { + return err + } + if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil { + return err + } + return nil +} + +func convert_api_PodTemplateSpec_To_v1beta3_PodTemplateSpec(in *newer.PodTemplateSpec, out *PodTemplateSpec, s conversion.Scope) error { + if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { + return err + } + if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil { + return err + } + return nil +} + func convert_v1beta3_Probe_To_api_Probe(in *Probe, out *newer.Probe, s conversion.Scope) error { if err := s.Convert(&in.Handler, &out.Handler, 0); err != nil { return err @@ -1818,6 +2094,118 @@ func convert_api_Probe_To_v1beta3_Probe(in *newer.Probe, out *Probe, s conversio return nil } +func convert_v1beta3_ReplicationController_To_api_ReplicationController(in *ReplicationController, out *newer.ReplicationController, s conversion.Scope) error { + if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { + return err + } + if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { + return err + } + if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil { + return err + } + if err := s.Convert(&in.Status, &out.Status, 0); err != nil { + return err + } + return nil +} + +func convert_api_ReplicationController_To_v1beta3_ReplicationController(in *newer.ReplicationController, out *ReplicationController, s conversion.Scope) error { + if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { + return err + } + if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { + return err + } + if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil { + return err + } + if err := s.Convert(&in.Status, &out.Status, 0); err != nil { + return err + } + return nil +} + +func convert_v1beta3_ReplicationControllerList_To_api_ReplicationControllerList(in *ReplicationControllerList, out *newer.ReplicationControllerList, s conversion.Scope) error { + if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { + return err + } + if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil { + return err + } + if in.Items != nil { + out.Items = make([]newer.ReplicationController, len(in.Items)) + for i := range in.Items { + if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil { + return err + } + } + } + return nil +} + +func convert_api_ReplicationControllerList_To_v1beta3_ReplicationControllerList(in *newer.ReplicationControllerList, out *ReplicationControllerList, s conversion.Scope) error { + if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { + return err + } + if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil { + return err + } + if in.Items != nil { + out.Items = make([]ReplicationController, len(in.Items)) + for i := range in.Items { + if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil { + return err + } + } + } + return nil +} + +func convert_v1beta3_ReplicationControllerSpec_To_api_ReplicationControllerSpec(in *ReplicationControllerSpec, out *newer.ReplicationControllerSpec, s conversion.Scope) error { + out.Replicas = in.Replicas + if in.Selector != nil { + out.Selector = make(map[string]string) + for key, val := range in.Selector { + out.Selector[key] = val + } + } + if err := s.Convert(&in.TemplateRef, &out.TemplateRef, 0); err != nil { + return err + } + if err := s.Convert(&in.Template, &out.Template, 0); err != nil { + return err + } + return nil +} + +func convert_api_ReplicationControllerSpec_To_v1beta3_ReplicationControllerSpec(in *newer.ReplicationControllerSpec, out *ReplicationControllerSpec, s conversion.Scope) error { + out.Replicas = in.Replicas + if in.Selector != nil { + out.Selector = make(map[string]string) + for key, val := range in.Selector { + out.Selector[key] = val + } + } + if err := s.Convert(&in.TemplateRef, &out.TemplateRef, 0); err != nil { + return err + } + if err := s.Convert(&in.Template, &out.Template, 0); err != nil { + return err + } + return nil +} + +func convert_v1beta3_ReplicationControllerStatus_To_api_ReplicationControllerStatus(in *ReplicationControllerStatus, out *newer.ReplicationControllerStatus, s conversion.Scope) error { + out.Replicas = in.Replicas + return nil +} + +func convert_api_ReplicationControllerStatus_To_v1beta3_ReplicationControllerStatus(in *newer.ReplicationControllerStatus, out *ReplicationControllerStatus, s conversion.Scope) error { + out.Replicas = in.Replicas + return nil +} + func convert_v1beta3_ResourceQuota_To_api_ResourceQuota(in *ResourceQuota, out *newer.ResourceQuota, s conversion.Scope) error { if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { return err @@ -2010,6 +2398,22 @@ func convert_api_ResourceRequirements_To_v1beta3_ResourceRequirements(in *newer. return nil } +func convert_api_SELinuxOptions_To_v1beta3_SELinuxOptions(in *newer.SELinuxOptions, out *SELinuxOptions, s conversion.Scope) error { + out.User = in.User + out.Role = in.Role + out.Type = in.Type + out.Level = in.Level + return nil +} + +func convert_v1beta3_SELinuxOptions_To_api_SELinuxOptions(in *SELinuxOptions, out *newer.SELinuxOptions, s conversion.Scope) error { + out.User = in.User + out.Role = in.Role + out.Type = in.Type + out.Level = in.Level + return nil +} + func convert_v1beta3_Secret_To_api_Secret(in *Secret, out *newer.Secret, s conversion.Scope) error { if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { return err @@ -2098,6 +2502,42 @@ func convert_api_SecretVolumeSource_To_v1beta3_SecretVolumeSource(in *newer.Secr return nil } +func convert_api_SecurityContext_To_v1beta3_SecurityContext(in *newer.SecurityContext, out *SecurityContext, s conversion.Scope) error { + if err := s.Convert(&in.Capabilities, &out.Capabilities, 0); err != nil { + return err + } + if in.Privileged != nil { + out.Privileged = new(bool) + *out.Privileged = *in.Privileged + } + if err := s.Convert(&in.SELinuxOptions, &out.SELinuxOptions, 0); err != nil { + return err + } + if in.RunAsUser != nil { + out.RunAsUser = new(int64) + *out.RunAsUser = *in.RunAsUser + } + return nil +} + +func convert_v1beta3_SecurityContext_To_api_SecurityContext(in *SecurityContext, out *newer.SecurityContext, s conversion.Scope) error { + if err := s.Convert(&in.Capabilities, &out.Capabilities, 0); err != nil { + return err + } + if in.Privileged != nil { + out.Privileged = new(bool) + *out.Privileged = *in.Privileged + } + if err := s.Convert(&in.SELinuxOptions, &out.SELinuxOptions, 0); err != nil { + return err + } + if in.RunAsUser != nil { + out.RunAsUser = new(int64) + *out.RunAsUser = *in.RunAsUser + } + return nil +} + func convert_v1beta3_SerializedReference_To_api_SerializedReference(in *SerializedReference, out *newer.SerializedReference, s conversion.Scope) error { if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { return err @@ -2476,6 +2916,7 @@ func init() { err := newer.Scheme.AddGeneratedConversionFuncs( convert_api_AWSElasticBlockStoreVolumeSource_To_v1beta3_AWSElasticBlockStoreVolumeSource, convert_api_Binding_To_v1beta3_Binding, + convert_api_Capabilities_To_v1beta3_Capabilities, convert_api_ComponentCondition_To_v1beta3_ComponentCondition, convert_api_ComponentStatusList_To_v1beta3_ComponentStatusList, convert_api_ComponentStatus_To_v1beta3_ComponentStatus, @@ -2511,6 +2952,7 @@ func init() { convert_api_LimitRangeSpec_To_v1beta3_LimitRangeSpec, convert_api_LimitRange_To_v1beta3_LimitRange, convert_api_ListMeta_To_v1beta3_ListMeta, + convert_api_List_To_v1beta3_List, convert_api_NFSVolumeSource_To_v1beta3_NFSVolumeSource, convert_api_NamespaceList_To_v1beta3_NamespaceList, convert_api_NamespaceSpec_To_v1beta3_NamespaceSpec, @@ -2538,19 +2980,31 @@ func init() { convert_api_PersistentVolume_To_v1beta3_PersistentVolume, convert_api_PodCondition_To_v1beta3_PodCondition, convert_api_PodExecOptions_To_v1beta3_PodExecOptions, + convert_api_PodList_To_v1beta3_PodList, convert_api_PodLogOptions_To_v1beta3_PodLogOptions, convert_api_PodProxyOptions_To_v1beta3_PodProxyOptions, + convert_api_PodSpec_To_v1beta3_PodSpec, convert_api_PodStatusResult_To_v1beta3_PodStatusResult, convert_api_PodStatus_To_v1beta3_PodStatus, + convert_api_PodTemplateList_To_v1beta3_PodTemplateList, + convert_api_PodTemplateSpec_To_v1beta3_PodTemplateSpec, + convert_api_PodTemplate_To_v1beta3_PodTemplate, + convert_api_Pod_To_v1beta3_Pod, convert_api_Probe_To_v1beta3_Probe, + convert_api_ReplicationControllerList_To_v1beta3_ReplicationControllerList, + convert_api_ReplicationControllerSpec_To_v1beta3_ReplicationControllerSpec, + convert_api_ReplicationControllerStatus_To_v1beta3_ReplicationControllerStatus, + convert_api_ReplicationController_To_v1beta3_ReplicationController, convert_api_ResourceQuotaList_To_v1beta3_ResourceQuotaList, convert_api_ResourceQuotaSpec_To_v1beta3_ResourceQuotaSpec, convert_api_ResourceQuotaStatus_To_v1beta3_ResourceQuotaStatus, convert_api_ResourceQuota_To_v1beta3_ResourceQuota, convert_api_ResourceRequirements_To_v1beta3_ResourceRequirements, + convert_api_SELinuxOptions_To_v1beta3_SELinuxOptions, convert_api_SecretList_To_v1beta3_SecretList, convert_api_SecretVolumeSource_To_v1beta3_SecretVolumeSource, convert_api_Secret_To_v1beta3_Secret, + convert_api_SecurityContext_To_v1beta3_SecurityContext, convert_api_SerializedReference_To_v1beta3_SerializedReference, convert_api_ServiceList_To_v1beta3_ServiceList, convert_api_ServicePort_To_v1beta3_ServicePort, @@ -2567,6 +3021,7 @@ func init() { convert_api_Volume_To_v1beta3_Volume, convert_v1beta3_AWSElasticBlockStoreVolumeSource_To_api_AWSElasticBlockStoreVolumeSource, convert_v1beta3_Binding_To_api_Binding, + convert_v1beta3_Capabilities_To_api_Capabilities, convert_v1beta3_ComponentCondition_To_api_ComponentCondition, convert_v1beta3_ComponentStatusList_To_api_ComponentStatusList, convert_v1beta3_ComponentStatus_To_api_ComponentStatus, @@ -2602,6 +3057,7 @@ func init() { convert_v1beta3_LimitRangeSpec_To_api_LimitRangeSpec, convert_v1beta3_LimitRange_To_api_LimitRange, convert_v1beta3_ListMeta_To_api_ListMeta, + convert_v1beta3_List_To_api_List, convert_v1beta3_NFSVolumeSource_To_api_NFSVolumeSource, convert_v1beta3_NamespaceList_To_api_NamespaceList, convert_v1beta3_NamespaceSpec_To_api_NamespaceSpec, @@ -2629,19 +3085,31 @@ func init() { convert_v1beta3_PersistentVolume_To_api_PersistentVolume, convert_v1beta3_PodCondition_To_api_PodCondition, convert_v1beta3_PodExecOptions_To_api_PodExecOptions, + convert_v1beta3_PodList_To_api_PodList, convert_v1beta3_PodLogOptions_To_api_PodLogOptions, convert_v1beta3_PodProxyOptions_To_api_PodProxyOptions, + convert_v1beta3_PodSpec_To_api_PodSpec, convert_v1beta3_PodStatusResult_To_api_PodStatusResult, convert_v1beta3_PodStatus_To_api_PodStatus, + convert_v1beta3_PodTemplateList_To_api_PodTemplateList, + convert_v1beta3_PodTemplateSpec_To_api_PodTemplateSpec, + convert_v1beta3_PodTemplate_To_api_PodTemplate, + convert_v1beta3_Pod_To_api_Pod, convert_v1beta3_Probe_To_api_Probe, + convert_v1beta3_ReplicationControllerList_To_api_ReplicationControllerList, + convert_v1beta3_ReplicationControllerSpec_To_api_ReplicationControllerSpec, + convert_v1beta3_ReplicationControllerStatus_To_api_ReplicationControllerStatus, + convert_v1beta3_ReplicationController_To_api_ReplicationController, convert_v1beta3_ResourceQuotaList_To_api_ResourceQuotaList, convert_v1beta3_ResourceQuotaSpec_To_api_ResourceQuotaSpec, convert_v1beta3_ResourceQuotaStatus_To_api_ResourceQuotaStatus, convert_v1beta3_ResourceQuota_To_api_ResourceQuota, convert_v1beta3_ResourceRequirements_To_api_ResourceRequirements, + convert_v1beta3_SELinuxOptions_To_api_SELinuxOptions, convert_v1beta3_SecretList_To_api_SecretList, convert_v1beta3_SecretVolumeSource_To_api_SecretVolumeSource, convert_v1beta3_Secret_To_api_Secret, + convert_v1beta3_SecurityContext_To_api_SecurityContext, convert_v1beta3_SerializedReference_To_api_SerializedReference, convert_v1beta3_ServiceList_To_api_ServiceList, convert_v1beta3_ServicePort_To_api_ServicePort, @@ -2660,26 +3128,6 @@ func init() { // Add non-generated conversion functions newer.Scheme.AddConversionFuncs( - convert_v1beta3_Pod_To_api_Pod, - convert_api_Pod_To_v1beta3_Pod, - convert_v1beta3_ReplicationController_To_api_ReplicationController, - convert_api_ReplicationController_To_v1beta3_ReplicationController, - convert_v1beta3_ReplicationControllerList_To_api_ReplicationControllerList, - convert_api_ReplicationControllerList_To_v1beta3_ReplicationControllerList, - convert_v1beta3_PodList_To_api_PodList, - convert_api_PodList_To_v1beta3_PodList, - convert_v1beta3_PodTemplate_To_api_PodTemplate, - convert_api_PodTemplate_To_v1beta3_PodTemplate, - convert_v1beta3_PodTemplateList_To_api_PodTemplateList, - convert_api_PodTemplateList_To_v1beta3_PodTemplateList, - convert_v1beta3_PodSpec_To_api_PodSpec, - convert_api_PodSpec_To_v1beta3_PodSpec, - convert_v1beta3_PodTemplateSpec_To_api_PodTemplateSpec, - convert_api_PodTemplateSpec_To_v1beta3_PodTemplateSpec, - convert_v1beta3_ReplicationControllerSpec_To_api_ReplicationControllerSpec, - convert_api_ReplicationControllerSpec_To_v1beta3_ReplicationControllerSpec, - convert_v1beta3_ReplicationControllerStatus_To_api_ReplicationControllerStatus, - convert_api_ReplicationControllerStatus_To_v1beta3_ReplicationControllerStatus, convert_v1beta3_Container_To_api_Container, convert_api_Container_To_v1beta3_Container, ) @@ -2779,336 +3227,6 @@ func init() { } } -func convert_v1beta3_Pod_To_api_Pod(in *Pod, out *newer.Pod, s conversion.Scope) error { - if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { - return err - } - if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { - return err - } - if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil { - return err - } - if err := s.Convert(&in.Status, &out.Status, 0); err != nil { - return err - } - return nil -} - -func convert_api_Pod_To_v1beta3_Pod(in *newer.Pod, out *Pod, s conversion.Scope) error { - if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { - return err - } - if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { - return err - } - if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil { - return err - } - if err := s.Convert(&in.Status, &out.Status, 0); err != nil { - return err - } - return nil -} - -func convert_v1beta3_ReplicationController_To_api_ReplicationController(in *ReplicationController, out *newer.ReplicationController, s conversion.Scope) error { - if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { - return err - } - if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { - return err - } - if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil { - return err - } - if err := s.Convert(&in.Status, &out.Status, 0); err != nil { - return err - } - return nil -} - -func convert_api_ReplicationController_To_v1beta3_ReplicationController(in *newer.ReplicationController, out *ReplicationController, s conversion.Scope) error { - if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { - return err - } - if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { - return err - } - if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil { - return err - } - if err := s.Convert(&in.Status, &out.Status, 0); err != nil { - return err - } - return nil -} - -func convert_v1beta3_ReplicationControllerList_To_api_ReplicationControllerList(in *ReplicationControllerList, out *newer.ReplicationControllerList, s conversion.Scope) error { - if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { - return err - } - if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil { - return err - } - if in.Items != nil { - out.Items = make([]newer.ReplicationController, len(in.Items)) - for i := range in.Items { - if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil { - return err - } - } - } - return nil -} - -func convert_api_ReplicationControllerList_To_v1beta3_ReplicationControllerList(in *newer.ReplicationControllerList, out *ReplicationControllerList, s conversion.Scope) error { - if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { - return err - } - if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil { - return err - } - if in.Items != nil { - out.Items = make([]ReplicationController, len(in.Items)) - for i := range in.Items { - if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil { - return err - } - } - } - return nil -} - -func convert_v1beta3_PodList_To_api_PodList(in *PodList, out *newer.PodList, s conversion.Scope) error { - if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { - return err - } - if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil { - return err - } - if in.Items != nil { - out.Items = make([]newer.Pod, len(in.Items)) - for i := range in.Items { - if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil { - return err - } - } - } - return nil -} - -func convert_api_PodList_To_v1beta3_PodList(in *newer.PodList, out *PodList, s conversion.Scope) error { - if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { - return err - } - if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil { - return err - } - if in.Items != nil { - out.Items = make([]Pod, len(in.Items)) - for i := range in.Items { - if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil { - return err - } - } - } - return nil -} - -func convert_v1beta3_PodTemplate_To_api_PodTemplate(in *PodTemplate, out *newer.PodTemplate, s conversion.Scope) error { - if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { - return err - } - if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { - return err - } - if err := s.Convert(&in.Template, &out.Template, 0); err != nil { - return err - } - return nil -} - -func convert_api_PodTemplate_To_v1beta3_PodTemplate(in *newer.PodTemplate, out *PodTemplate, s conversion.Scope) error { - if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { - return err - } - if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { - return err - } - if err := s.Convert(&in.Template, &out.Template, 0); err != nil { - return err - } - return nil -} - -func convert_v1beta3_PodTemplateList_To_api_PodTemplateList(in *PodTemplateList, out *newer.PodTemplateList, s conversion.Scope) error { - if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { - return err - } - if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil { - return err - } - if in.Items != nil { - out.Items = make([]newer.PodTemplate, len(in.Items)) - for i := range in.Items { - if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil { - return err - } - } - } - return nil -} - -func convert_api_PodTemplateList_To_v1beta3_PodTemplateList(in *newer.PodTemplateList, out *PodTemplateList, s conversion.Scope) error { - if err := s.Convert(&in.TypeMeta, &out.TypeMeta, 0); err != nil { - return err - } - if err := s.Convert(&in.ListMeta, &out.ListMeta, 0); err != nil { - return err - } - if in.Items != nil { - out.Items = make([]PodTemplate, len(in.Items)) - for i := range in.Items { - if err := s.Convert(&in.Items[i], &out.Items[i], 0); err != nil { - return err - } - } - } - return nil -} - -func convert_v1beta3_PodSpec_To_api_PodSpec(in *PodSpec, out *newer.PodSpec, s conversion.Scope) error { - if in.Volumes != nil { - out.Volumes = make([]newer.Volume, len(in.Volumes)) - for i := range in.Volumes { - if err := s.Convert(&in.Volumes[i], &out.Volumes[i], 0); err != nil { - return err - } - } - } - if in.Containers != nil { - out.Containers = make([]newer.Container, len(in.Containers)) - for i := range in.Containers { - if err := s.Convert(&in.Containers[i], &out.Containers[i], 0); err != nil { - return err - } - } - } - out.RestartPolicy = newer.RestartPolicy(in.RestartPolicy) - if in.TerminationGracePeriodSeconds != nil { - out.TerminationGracePeriodSeconds = new(int64) - *out.TerminationGracePeriodSeconds = *in.TerminationGracePeriodSeconds - } - out.DNSPolicy = newer.DNSPolicy(in.DNSPolicy) - if in.NodeSelector != nil { - out.NodeSelector = make(map[string]string) - for key, val := range in.NodeSelector { - out.NodeSelector[key] = val - } - } - out.Host = in.Host - out.HostNetwork = in.HostNetwork - return nil -} - -func convert_api_PodSpec_To_v1beta3_PodSpec(in *newer.PodSpec, out *PodSpec, s conversion.Scope) error { - if in.Volumes != nil { - out.Volumes = make([]Volume, len(in.Volumes)) - for i := range in.Volumes { - if err := s.Convert(&in.Volumes[i], &out.Volumes[i], 0); err != nil { - return err - } - } - } - if in.Containers != nil { - out.Containers = make([]Container, len(in.Containers)) - for i := range in.Containers { - if err := s.Convert(&in.Containers[i], &out.Containers[i], 0); err != nil { - return err - } - } - } - out.RestartPolicy = RestartPolicy(in.RestartPolicy) - if in.TerminationGracePeriodSeconds != nil { - out.TerminationGracePeriodSeconds = new(int64) - *out.TerminationGracePeriodSeconds = *in.TerminationGracePeriodSeconds - } - out.DNSPolicy = DNSPolicy(in.DNSPolicy) - if in.NodeSelector != nil { - out.NodeSelector = make(map[string]string) - for key, val := range in.NodeSelector { - out.NodeSelector[key] = val - } - } - out.Host = in.Host - out.HostNetwork = in.HostNetwork - return nil -} - -func convert_v1beta3_PodTemplateSpec_To_api_PodTemplateSpec(in *PodTemplateSpec, out *newer.PodTemplateSpec, s conversion.Scope) error { - if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { - return err - } - if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil { - return err - } - return nil -} - -func convert_api_PodTemplateSpec_To_v1beta3_PodTemplateSpec(in *newer.PodTemplateSpec, out *PodTemplateSpec, s conversion.Scope) error { - if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { - return err - } - if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil { - return err - } - return nil -} - -func convert_v1beta3_ReplicationControllerSpec_To_api_ReplicationControllerSpec(in *ReplicationControllerSpec, out *newer.ReplicationControllerSpec, s conversion.Scope) error { - out.Replicas = in.Replicas - if in.Selector != nil { - out.Selector = make(map[string]string) - for key, val := range in.Selector { - out.Selector[key] = val - } - } - if err := s.Convert(&in.TemplateRef, &out.TemplateRef, 0); err != nil { - return err - } - if err := s.Convert(&in.Template, &out.Template, 0); err != nil { - return err - } - return nil -} - -func convert_api_ReplicationControllerSpec_To_v1beta3_ReplicationControllerSpec(in *newer.ReplicationControllerSpec, out *ReplicationControllerSpec, s conversion.Scope) error { - out.Replicas = in.Replicas - if in.Selector != nil { - out.Selector = make(map[string]string) - for key, val := range in.Selector { - out.Selector[key] = val - } - } - if err := s.Convert(&in.TemplateRef, &out.TemplateRef, 0); err != nil { - return err - } - if err := s.Convert(&in.Template, &out.Template, 0); err != nil { - return err - } - return nil -} - -func convert_v1beta3_ReplicationControllerStatus_To_api_ReplicationControllerStatus(in *ReplicationControllerStatus, out *newer.ReplicationControllerStatus, s conversion.Scope) error { - out.Replicas = in.Replicas - return nil -} - -func convert_api_ReplicationControllerStatus_To_v1beta3_ReplicationControllerStatus(in *newer.ReplicationControllerStatus, out *ReplicationControllerStatus, s conversion.Scope) error { - out.Replicas = in.Replicas - return nil -} - func convert_v1beta3_Container_To_api_Container(in *Container, out *newer.Container, s conversion.Scope) error { out.Name = in.Name out.Image = in.Image