forked from LaconicNetwork/kompose
Merge pull request #126 from kadel/fix-openshift-output
Fix conversion to OpenShift (invalid DeploymentConfig)
This commit is contained in:
commit
7e91770dfe
@ -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)
|
||||||
|
|||||||
@ -127,24 +127,25 @@ func PrintList(objects []runtime.Object, opt kobject.ConvertOptions) error {
|
|||||||
f := transformer.CreateOutFile(opt.OutFile)
|
f := transformer.CreateOutFile(opt.OutFile)
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
|
||||||
var err error
|
|
||||||
var files []string
|
var files []string
|
||||||
|
|
||||||
// if asked to print to stdout or to put in single file
|
// if asked to print to stdout or to put in single file
|
||||||
// we will create a list
|
// we will create a list
|
||||||
if opt.ToStdout || f != nil {
|
if opt.ToStdout || f != nil {
|
||||||
list := &api.List{}
|
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
|
// version list itself
|
||||||
listVersion := unversioned.GroupVersion{Group: "", Version: "v1"}
|
listVersion := unversioned.GroupVersion{Group: "", Version: "v1"}
|
||||||
convertedList, err := api.Scheme.ConvertToVersion(list, listVersion)
|
convertedList, err := convertToVersion(list, listVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -157,10 +158,16 @@ func PrintList(objects []runtime.Object, opt kobject.ConvertOptions) error {
|
|||||||
var file string
|
var file string
|
||||||
// create a separate file for each provider
|
// create a separate file for each provider
|
||||||
for _, v := range objects {
|
for _, v := range objects {
|
||||||
data, err := marshal(v, opt.GenerateYaml)
|
versionedObject, err := convertToVersion(v, unversioned.GroupVersion{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data, err := marshal(versionedObject, opt.GenerateYaml)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
switch t := v.(type) {
|
switch t := v.(type) {
|
||||||
case *api.ReplicationController:
|
case *api.ReplicationController:
|
||||||
file = transformer.Print(t.Name, strings.ToLower(t.Kind), data, opt.ToStdout, opt.GenerateYaml, f)
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert all objects in objs to versioned objects
|
// Convert object to versioned object
|
||||||
func convertToVersion(objs []runtime.Object) ([]runtime.Object, error) {
|
// if groupVersion is empty (unversioned.GroupVersion{}), use version from original object (obj)
|
||||||
ret := []runtime.Object{}
|
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()
|
objectVersion := obj.GetObjectKind().GroupVersionKind()
|
||||||
version := unversioned.GroupVersion{Group: objectVersion.Group, Version: objectVersion.Version}
|
version = unversioned.GroupVersion{Group: objectVersion.Group, Version: objectVersion.Version}
|
||||||
convertedObject, err := api.Scheme.ConvertToVersion(obj, version)
|
} else {
|
||||||
if err != nil {
|
version = groupVersion
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
ret = append(ret, convertedObject)
|
|
||||||
}
|
}
|
||||||
|
convertedObject, err := api.Scheme.ConvertToVersion(obj, version)
|
||||||
return ret, nil
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return convertedObject, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func PortsExist(name string, service kobject.ServiceConfig) bool {
|
func PortsExist(name string, service kobject.ServiceConfig) bool {
|
||||||
@ -297,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
|
||||||
|
}
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user