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
This commit is contained in:
Tomas Kral 2016-08-30 14:26:59 +02:00
parent b24556e9d5
commit e2da0f089a
No known key found for this signature in database
GPG Key ID: E690DA7E4F291FA6
4 changed files with 28 additions and 24 deletions

View File

@ -27,7 +27,6 @@ import (
_ "k8s.io/kubernetes/pkg/apis/extensions/install" _ "k8s.io/kubernetes/pkg/apis/extensions/install"
client "k8s.io/kubernetes/pkg/client/unversioned" client "k8s.io/kubernetes/pkg/client/unversioned"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/runtime"
// install kubernetes api // install kubernetes api
_ "github.com/openshift/origin/pkg/deploy/api/install" _ "github.com/openshift/origin/pkg/deploy/api/install"
@ -207,7 +206,6 @@ func Up(c *cli.Context) {
//Convert komposeObject to K8S controllers //Convert komposeObject to K8S controllers
objects := t.Transform(komposeObject, opt) objects := t.Transform(komposeObject, opt)
sortServicesFirst(&objects)
//Submit objects to K8s endpoint //Submit objects to K8s endpoint
kubernetes.CreateObjects(client, objects) 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 { func askForConfirmation() bool {
var response string var response string
_, err := fmt.Scanln(&response) _, err := fmt.Scanln(&response)

View File

@ -139,7 +139,9 @@ func PrintList(objects []runtime.Object, opt kobject.ConvertOptions) error {
if err != nil { if err != nil {
return err return err
} }
list.Items = append(list.Items, versionedObject) list.Items = append(list.Items, versionedObject)
} }
// version list itself // version list itself
listVersion := unversioned.GroupVersion{Group: "", Version: "v1"} listVersion := unversioned.GroupVersion{Group: "", Version: "v1"}
@ -303,3 +305,21 @@ func UpdateKubernetesObjects(name string, service kobject.ServiceConfig, objects
UpdateController(obj, fillTemplate, fillObjectMeta) 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
}

View File

@ -234,7 +234,8 @@ func CreateKubernetesObjects(name string, service kobject.ServiceConfig, opt kob
return objects 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 { func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) []runtime.Object {
// this will hold all the converted data // this will hold all the converted data
var allobjects []runtime.Object var allobjects []runtime.Object
@ -252,7 +253,8 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.
allobjects = append(allobjects, objects...) allobjects = append(allobjects, objects...)
} }
// sort all object so Services are first
SortServicesFirst(&allobjects)
return allobjects return allobjects
} }

View File

@ -62,7 +62,8 @@ func initDeploymentConfig(name string, service kobject.ServiceConfig, replicas i
return dc 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 { func (k *OpenShift) Transform(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) []runtime.Object {
// this will hold all the converted data // this will hold all the converted data
var allobjects []runtime.Object var allobjects []runtime.Object
@ -84,6 +85,7 @@ func (k *OpenShift) Transform(komposeObject kobject.KomposeObject, opt kobject.C
allobjects = append(allobjects, objects...) allobjects = append(allobjects, objects...)
} }
// sort all object so Services are first
kubernetes.SortServicesFirst(&allobjects)
return allobjects return allobjects
} }