From 74c7914f7e64c4381be379c0e91adae5f436c04b Mon Sep 17 00:00:00 2001 From: Clayton Coleman Date: Thu, 6 Nov 2014 21:07:24 -0500 Subject: [PATCH] Conversion functions to support PodTemplateSpec --- pkg/api/conversion.go | 29 +++++++++++++ pkg/api/v1beta1/conversion.go | 80 ++++++++++++++++++++++++++++++++--- pkg/api/v1beta2/conversion.go | 80 ++++++++++++++++++++++++++++++++--- 3 files changed, 177 insertions(+), 12 deletions(-) diff --git a/pkg/api/conversion.go b/pkg/api/conversion.go index a43bd8f0554..401c1d53c43 100644 --- a/pkg/api/conversion.go +++ b/pkg/api/conversion.go @@ -45,6 +45,8 @@ func init() { out.UUID = in.UID return nil }, + + // ContainerManifestList func(in *ContainerManifestList, out *BoundPods, s conversion.Scope) error { if err := s.Convert(&in.Items, &out.Items, 0); err != nil { return err @@ -76,5 +78,32 @@ func init() { out.CreationTimestamp = in.CreationTimestamp return nil }, + + // Conversion between Manifest and PodSpec + func(in *PodSpec, out *ContainerManifest, s conversion.Scope) error { + if err := s.Convert(&in.Volumes, &out.Volumes, 0); err != nil { + return err + } + if err := s.Convert(&in.Containers, &out.Containers, 0); err != nil { + return err + } + if err := s.Convert(&in.RestartPolicy, &out.RestartPolicy, 0); err != nil { + return err + } + out.Version = "v1beta2" + return nil + }, + func(in *ContainerManifest, out *PodSpec, s conversion.Scope) error { + if err := s.Convert(&in.Volumes, &out.Volumes, 0); err != nil { + return err + } + if err := s.Convert(&in.Containers, &out.Containers, 0); err != nil { + return err + } + if err := s.Convert(&in.RestartPolicy, &out.RestartPolicy, 0); err != nil { + return err + } + return nil + }, ) } diff --git a/pkg/api/v1beta1/conversion.go b/pkg/api/v1beta1/conversion.go index 401091e53fc..15ca3f2eafa 100644 --- a/pkg/api/v1beta1/conversion.go +++ b/pkg/api/v1beta1/conversion.go @@ -256,12 +256,10 @@ func init() { return err } - if err := s.Convert(&in.DesiredState, &out.DesiredState, 0); err != nil { - return err - } - if err := s.Convert(&in.CurrentState, &out.CurrentState, 0); err != nil { + if err := s.Convert(&in.Spec, &out.DesiredState, 0); err != nil { return err } + out.CurrentState.Replicas = in.Status.Replicas return nil }, func(in *ReplicationController, out *newer.ReplicationController, s conversion.Scope) error { @@ -275,10 +273,80 @@ func init() { return err } - if err := s.Convert(&in.DesiredState, &out.DesiredState, 0); err != nil { + if err := s.Convert(&in.DesiredState, &out.Spec, 0); err != nil { return err } - if err := s.Convert(&in.CurrentState, &out.CurrentState, 0); err != nil { + out.Status.Replicas = in.CurrentState.Replicas + return nil + }, + + func(in *newer.ReplicationControllerSpec, out *ReplicationControllerState, s conversion.Scope) error { + out.Replicas = in.Replicas + if err := s.Convert(&in.Selector, &out.ReplicaSelector, 0); err != nil { + return err + } + if in.TemplateRef != nil && in.Template == nil { + return errors.New("objects with a template ref cannot be converted to older objects, must populate template") + } + if in.Template != nil { + if err := s.Convert(in.Template, &out.PodTemplate, 0); err != nil { + return err + } + } + return nil + }, + func(in *ReplicationControllerState, out *newer.ReplicationControllerSpec, s conversion.Scope) error { + out.Replicas = in.Replicas + if err := s.Convert(&in.ReplicaSelector, &out.Selector, 0); err != nil { + return err + } + out.Template = &newer.PodTemplateSpec{} + if err := s.Convert(&in.PodTemplate, out.Template, 0); err != nil { + return err + } + return nil + }, + + func(in *newer.PodTemplateSpec, out *PodTemplate, s conversion.Scope) error { + if err := s.Convert(&in.Spec, &out.DesiredState.Manifest, 0); err != nil { + return err + } + if err := s.Convert(&in.ObjectMeta.Labels, &out.Labels, 0); err != nil { + return err + } + return nil + }, + func(in *PodTemplate, out *newer.PodTemplateSpec, s conversion.Scope) error { + if err := s.Convert(&in.DesiredState.Manifest, &out.Spec, 0); err != nil { + return err + } + if err := s.Convert(&in.Labels, &out.ObjectMeta.Labels, 0); err != nil { + return err + } + return nil + }, + + func(in *newer.PodSpec, out *ContainerManifest, s conversion.Scope) error { + if err := s.Convert(&in.Volumes, &out.Volumes, 0); err != nil { + return err + } + if err := s.Convert(&in.Containers, &out.Containers, 0); err != nil { + return err + } + if err := s.Convert(&in.RestartPolicy, &out.RestartPolicy, 0); err != nil { + return err + } + out.Version = "v1beta2" + return nil + }, + func(in *ContainerManifest, out *newer.PodSpec, s conversion.Scope) error { + if err := s.Convert(&in.Volumes, &out.Volumes, 0); err != nil { + return err + } + if err := s.Convert(&in.Containers, &out.Containers, 0); err != nil { + return err + } + if err := s.Convert(&in.RestartPolicy, &out.RestartPolicy, 0); err != nil { return err } return nil diff --git a/pkg/api/v1beta2/conversion.go b/pkg/api/v1beta2/conversion.go index 78f2a4b65fc..3a34b11ea63 100644 --- a/pkg/api/v1beta2/conversion.go +++ b/pkg/api/v1beta2/conversion.go @@ -186,12 +186,10 @@ func init() { return err } - if err := s.Convert(&in.DesiredState, &out.DesiredState, 0); err != nil { - return err - } - if err := s.Convert(&in.CurrentState, &out.CurrentState, 0); err != nil { + if err := s.Convert(&in.Spec, &out.DesiredState, 0); err != nil { return err } + out.CurrentState.Replicas = in.Status.Replicas return nil }, func(in *ReplicationController, out *newer.ReplicationController, s conversion.Scope) error { @@ -205,10 +203,80 @@ func init() { return err } - if err := s.Convert(&in.DesiredState, &out.DesiredState, 0); err != nil { + if err := s.Convert(&in.DesiredState, &out.Spec, 0); err != nil { return err } - if err := s.Convert(&in.CurrentState, &out.CurrentState, 0); err != nil { + out.Status.Replicas = in.CurrentState.Replicas + return nil + }, + + func(in *newer.ReplicationControllerSpec, out *ReplicationControllerState, s conversion.Scope) error { + out.Replicas = in.Replicas + if err := s.Convert(&in.Selector, &out.ReplicaSelector, 0); err != nil { + return err + } + if in.TemplateRef != nil && in.Template == nil { + return errors.New("objects with a template ref cannot be converted to older objects, must populate template") + } + if in.Template != nil { + if err := s.Convert(in.Template, &out.PodTemplate, 0); err != nil { + return err + } + } + return nil + }, + func(in *ReplicationControllerState, out *newer.ReplicationControllerSpec, s conversion.Scope) error { + out.Replicas = in.Replicas + if err := s.Convert(&in.ReplicaSelector, &out.Selector, 0); err != nil { + return err + } + out.Template = &newer.PodTemplateSpec{} + if err := s.Convert(&in.PodTemplate, out.Template, 0); err != nil { + return err + } + return nil + }, + + func(in *newer.PodTemplateSpec, out *PodTemplate, s conversion.Scope) error { + if err := s.Convert(&in.Spec, &out.DesiredState.Manifest, 0); err != nil { + return err + } + if err := s.Convert(&in.ObjectMeta.Labels, &out.Labels, 0); err != nil { + return err + } + return nil + }, + func(in *PodTemplate, out *newer.PodTemplateSpec, s conversion.Scope) error { + if err := s.Convert(&in.DesiredState.Manifest, &out.Spec, 0); err != nil { + return err + } + if err := s.Convert(&in.Labels, &out.ObjectMeta.Labels, 0); err != nil { + return err + } + return nil + }, + + func(in *newer.PodSpec, out *ContainerManifest, s conversion.Scope) error { + if err := s.Convert(&in.Volumes, &out.Volumes, 0); err != nil { + return err + } + if err := s.Convert(&in.Containers, &out.Containers, 0); err != nil { + return err + } + if err := s.Convert(&in.RestartPolicy, &out.RestartPolicy, 0); err != nil { + return err + } + out.Version = "v1beta2" + return nil + }, + func(in *ContainerManifest, out *newer.PodSpec, s conversion.Scope) error { + if err := s.Convert(&in.Volumes, &out.Volumes, 0); err != nil { + return err + } + if err := s.Convert(&in.Containers, &out.Containers, 0); err != nil { + return err + } + if err := s.Convert(&in.RestartPolicy, &out.RestartPolicy, 0); err != nil { return err } return nil