2014-09-11 17:02:53 +00:00
|
|
|
/*
|
|
|
|
Copyright 2014 Google Inc. All rights reserved.
|
|
|
|
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
you may not use this file except in compliance with the License.
|
|
|
|
You may obtain a copy of the License at
|
|
|
|
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
See the License for the specific language governing permissions and
|
|
|
|
limitations under the License.
|
|
|
|
*/
|
|
|
|
|
|
|
|
package api
|
|
|
|
|
|
|
|
import (
|
2014-10-08 19:56:02 +00:00
|
|
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/conversion"
|
2014-09-11 17:02:53 +00:00
|
|
|
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Codec is the identity codec for this package - it can only convert itself
|
|
|
|
// to itself.
|
|
|
|
var Codec = runtime.CodecFor(Scheme, "")
|
2014-10-08 19:56:02 +00:00
|
|
|
|
|
|
|
func init() {
|
|
|
|
Scheme.AddConversionFuncs(
|
|
|
|
// Convert ContainerManifest to BoundPod
|
|
|
|
func(in *ContainerManifest, out *BoundPod, s conversion.Scope) error {
|
|
|
|
out.Spec.Containers = in.Containers
|
|
|
|
out.Spec.Volumes = in.Volumes
|
|
|
|
out.Spec.RestartPolicy = in.RestartPolicy
|
2014-10-22 17:02:02 +00:00
|
|
|
out.Name = in.ID
|
2014-10-08 19:56:02 +00:00
|
|
|
out.UID = in.UUID
|
2014-11-05 19:08:26 +00:00
|
|
|
// TODO(dchen1107): Move this conversion to pkg/api/v1beta[123]/conversion.go
|
|
|
|
// along with fixing #1502
|
|
|
|
for i := range out.Spec.Containers {
|
|
|
|
ctr := &out.Spec.Containers[i]
|
|
|
|
if len(ctr.TerminationMessagePath) == 0 {
|
|
|
|
ctr.TerminationMessagePath = TerminationMessagePathDefault
|
|
|
|
}
|
|
|
|
}
|
2014-10-08 19:56:02 +00:00
|
|
|
return nil
|
|
|
|
},
|
|
|
|
func(in *BoundPod, out *ContainerManifest, s conversion.Scope) error {
|
|
|
|
out.Containers = in.Spec.Containers
|
|
|
|
out.Volumes = in.Spec.Volumes
|
|
|
|
out.RestartPolicy = in.Spec.RestartPolicy
|
|
|
|
out.Version = "v1beta2"
|
2014-10-22 17:02:02 +00:00
|
|
|
out.ID = in.Name
|
2014-10-08 19:56:02 +00:00
|
|
|
out.UUID = in.UID
|
2014-11-05 19:08:26 +00:00
|
|
|
for i := range out.Containers {
|
|
|
|
ctr := &out.Containers[i]
|
|
|
|
if len(ctr.TerminationMessagePath) == 0 {
|
|
|
|
ctr.TerminationMessagePath = TerminationMessagePathDefault
|
|
|
|
}
|
|
|
|
}
|
2014-10-08 19:56:02 +00:00
|
|
|
return nil
|
|
|
|
},
|
2014-11-07 02:07:24 +00:00
|
|
|
|
|
|
|
// ContainerManifestList
|
2014-10-08 19:56:02 +00:00
|
|
|
func(in *ContainerManifestList, out *BoundPods, s conversion.Scope) error {
|
|
|
|
if err := s.Convert(&in.Items, &out.Items, 0); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
for i := range out.Items {
|
|
|
|
item := &out.Items[i]
|
|
|
|
item.ResourceVersion = in.ResourceVersion
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
},
|
|
|
|
func(in *BoundPods, out *ContainerManifestList, s conversion.Scope) error {
|
|
|
|
if err := s.Convert(&in.Items, &out.Items, 0); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
out.ResourceVersion = in.ResourceVersion
|
|
|
|
return nil
|
2014-10-09 17:27:47 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
// Convert Pod to BoundPod
|
|
|
|
func(in *Pod, out *BoundPod, s conversion.Scope) error {
|
2014-11-13 15:52:13 +00:00
|
|
|
if err := s.Convert(&in.Spec, &out.Spec, 0); err != nil {
|
2014-10-09 17:27:47 +00:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
// Only copy a subset of fields, and override manifest attributes with the pod
|
|
|
|
// metadata
|
|
|
|
out.UID = in.UID
|
2014-10-22 17:02:02 +00:00
|
|
|
out.Name = in.Name
|
2014-10-09 17:27:47 +00:00
|
|
|
out.Namespace = in.Namespace
|
|
|
|
out.CreationTimestamp = in.CreationTimestamp
|
|
|
|
return nil
|
|
|
|
},
|
2014-11-07 02:07:24 +00:00
|
|
|
|
|
|
|
// 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
|
|
|
|
},
|
2014-10-09 17:27:47 +00:00
|
|
|
)
|
2014-10-08 19:56:02 +00:00
|
|
|
}
|