From e2da0f089ae8f51a964a76d6589e109594bf102c Mon Sep 17 00:00:00 2001 From: Tomas Kral Date: Tue, 30 Aug 2016 14:26:59 +0200 Subject: [PATCH] Make sure that Services are first in the List Sorts objects in Transform function, this should make sure that Services are first everywhere as long as we keep order in the slice that Transform returns. fixes #130 --- cli/app/app.go | 20 -------------------- pkg/transformer/kubernetes/k8sutils.go | 20 ++++++++++++++++++++ pkg/transformer/kubernetes/kubernetes.go | 6 ++++-- pkg/transformer/openshift/openshift.go | 6 ++++-- 4 files changed, 28 insertions(+), 24 deletions(-) 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 c9c3458f..15d28395 100644 --- a/pkg/transformer/kubernetes/k8sutils.go +++ b/pkg/transformer/kubernetes/k8sutils.go @@ -139,7 +139,9 @@ func PrintList(objects []runtime.Object, opt kobject.ConvertOptions) error { if err != nil { return err } + list.Items = append(list.Items, versionedObject) + } // version list itself listVersion := unversioned.GroupVersion{Group: "", Version: "v1"} @@ -303,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 }