diff --git a/cli/app/app.go b/cli/app/app.go index a6426f26..e4880b3e 100644 --- a/cli/app/app.go +++ b/cli/app/app.go @@ -27,7 +27,6 @@ import ( _ "k8s.io/kubernetes/pkg/apis/extensions/install" client "k8s.io/kubernetes/pkg/client/unversioned" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" - "k8s.io/kubernetes/pkg/runtime" // install kubernetes api _ "github.com/openshift/origin/pkg/deploy/api/install" @@ -207,7 +206,6 @@ func Up(c *cli.Context) { //Convert komposeObject to K8S controllers objects := t.Transform(komposeObject, opt) - sortServicesFirst(&objects) //Submit objects to K8s endpoint kubernetes.CreateObjects(client, objects) @@ -256,24 +254,6 @@ func Down(c *cli.Context) { } } -// the objects that we get can be in any order this keeps services first -// according to best practice kubernetes services should be created first -// http://kubernetes.io/docs/user-guide/config-best-practices/ -func sortServicesFirst(objs *[]runtime.Object) { - var svc, others, ret []runtime.Object - - for _, obj := range *objs { - if obj.GetObjectKind().GroupVersionKind().Kind == "Service" { - svc = append(svc, obj) - } else { - others = append(others, obj) - } - } - ret = append(ret, svc...) - ret = append(ret, others...) - *objs = ret -} - func askForConfirmation() bool { var response string _, err := fmt.Scanln(&response) diff --git a/pkg/transformer/kubernetes/k8sutils.go b/pkg/transformer/kubernetes/k8sutils.go index 745ab311..15d28395 100644 --- a/pkg/transformer/kubernetes/k8sutils.go +++ b/pkg/transformer/kubernetes/k8sutils.go @@ -127,24 +127,25 @@ func PrintList(objects []runtime.Object, opt kobject.ConvertOptions) error { f := transformer.CreateOutFile(opt.OutFile) defer f.Close() - var err error var files []string // if asked to print to stdout or to put in single file // we will create a list if opt.ToStdout || f != nil { list := &api.List{} - list.Items = objects + // convert objects to versioned and add them to list + for _, object := range objects { + versionedObject, err := convertToVersion(object, unversioned.GroupVersion{}) + if err != nil { + return err + } + + list.Items = append(list.Items, versionedObject) - // version each object in the list - list.Items, err = convertToVersion(list.Items) - if err != nil { - return err } - // version list itself listVersion := unversioned.GroupVersion{Group: "", Version: "v1"} - convertedList, err := api.Scheme.ConvertToVersion(list, listVersion) + convertedList, err := convertToVersion(list, listVersion) if err != nil { return err } @@ -157,10 +158,16 @@ func PrintList(objects []runtime.Object, opt kobject.ConvertOptions) error { var file string // create a separate file for each provider for _, v := range objects { - data, err := marshal(v, opt.GenerateYaml) + versionedObject, err := convertToVersion(v, unversioned.GroupVersion{}) if err != nil { return err } + + data, err := marshal(versionedObject, opt.GenerateYaml) + if err != nil { + return err + } + switch t := v.(type) { case *api.ReplicationController: file = transformer.Print(t.Name, strings.ToLower(t.Kind), data, opt.ToStdout, opt.GenerateYaml, f) @@ -196,22 +203,23 @@ func marshal(obj runtime.Object, yamlFormat bool) (data []byte, err error) { return } -// Convert all objects in objs to versioned objects -func convertToVersion(objs []runtime.Object) ([]runtime.Object, error) { - ret := []runtime.Object{} +// Convert object to versioned object +// if groupVersion is empty (unversioned.GroupVersion{}), use version from original object (obj) +func convertToVersion(obj runtime.Object, groupVersion unversioned.GroupVersion) (runtime.Object, error) { - for _, obj := range objs { + var version unversioned.GroupVersion + if groupVersion.IsEmpty() { objectVersion := obj.GetObjectKind().GroupVersionKind() - version := unversioned.GroupVersion{Group: objectVersion.Group, Version: objectVersion.Version} - convertedObject, err := api.Scheme.ConvertToVersion(obj, version) - if err != nil { - return nil, err - } - ret = append(ret, convertedObject) + version = unversioned.GroupVersion{Group: objectVersion.Group, Version: objectVersion.Version} + } else { + version = groupVersion } - - return ret, nil + convertedObject, err := api.Scheme.ConvertToVersion(obj, version) + if err != nil { + return nil, err + } + return convertedObject, nil } func PortsExist(name string, service kobject.ServiceConfig) bool { @@ -297,3 +305,21 @@ func UpdateKubernetesObjects(name string, service kobject.ServiceConfig, objects UpdateController(obj, fillTemplate, fillObjectMeta) } } + +// the objects that we get can be in any order this keeps services first +// according to best practice kubernetes services should be created first +// http://kubernetes.io/docs/user-guide/config-best-practices/ +func SortServicesFirst(objs *[]runtime.Object) { + var svc, others, ret []runtime.Object + + for _, obj := range *objs { + if obj.GetObjectKind().GroupVersionKind().Kind == "Service" { + svc = append(svc, obj) + } else { + others = append(others, obj) + } + } + ret = append(ret, svc...) + ret = append(ret, others...) + *objs = ret +} diff --git a/pkg/transformer/kubernetes/kubernetes.go b/pkg/transformer/kubernetes/kubernetes.go index d8e2abda..82d323c0 100644 --- a/pkg/transformer/kubernetes/kubernetes.go +++ b/pkg/transformer/kubernetes/kubernetes.go @@ -234,7 +234,8 @@ func CreateKubernetesObjects(name string, service kobject.ServiceConfig, opt kob return objects } -// Maps komposeObject to k8s objects +// Transform maps komposeObject to k8s objects +// returns object that are already sorted in the way that Services are first func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) []runtime.Object { // this will hold all the converted data var allobjects []runtime.Object @@ -252,7 +253,8 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject. allobjects = append(allobjects, objects...) } - + // sort all object so Services are first + SortServicesFirst(&allobjects) return allobjects } diff --git a/pkg/transformer/openshift/openshift.go b/pkg/transformer/openshift/openshift.go index 789bd164..e927d459 100644 --- a/pkg/transformer/openshift/openshift.go +++ b/pkg/transformer/openshift/openshift.go @@ -62,7 +62,8 @@ func initDeploymentConfig(name string, service kobject.ServiceConfig, replicas i return dc } -// Maps komposeObject to openshift objects +// Transform maps komposeObject to openshift objects +// returns objects that are already sorted in the way that Services are first func (k *OpenShift) Transform(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) []runtime.Object { // this will hold all the converted data var allobjects []runtime.Object @@ -84,6 +85,7 @@ func (k *OpenShift) Transform(komposeObject kobject.KomposeObject, opt kobject.C allobjects = append(allobjects, objects...) } - + // sort all object so Services are first + kubernetes.SortServicesFirst(&allobjects) return allobjects }