support for raw pod output
if a user specifies a docker-compose service with restart value as "no" or "on-failure" then normal pod will be created as against to a controller and a pod.
This commit is contained in:
@@ -185,6 +185,8 @@ func PrintList(objects []runtime.Object, opt kobject.ConvertOptions) error {
|
||||
file = transformer.Print(t.Name, strings.ToLower(t.Kind), data, opt.ToStdout, opt.GenerateYaml, f)
|
||||
case *api.PersistentVolumeClaim:
|
||||
file = transformer.Print(t.Name, strings.ToLower(t.Kind), data, opt.ToStdout, opt.GenerateYaml, f)
|
||||
case *api.Pod:
|
||||
file = transformer.Print(t.Name, strings.ToLower(t.Kind), data, opt.ToStdout, opt.GenerateYaml, f)
|
||||
}
|
||||
files = append(files, file)
|
||||
}
|
||||
|
||||
@@ -326,6 +326,27 @@ func (k *Kubernetes) CreateKubernetesObjects(name string, service kobject.Servic
|
||||
return objects
|
||||
}
|
||||
|
||||
func (k *Kubernetes) InitPod(name string, service kobject.ServiceConfig) *api.Pod {
|
||||
pod := api.Pod{
|
||||
TypeMeta: unversioned.TypeMeta{
|
||||
Kind: "Pod",
|
||||
APIVersion: "v1",
|
||||
},
|
||||
ObjectMeta: api.ObjectMeta{
|
||||
Name: name,
|
||||
},
|
||||
Spec: api.PodSpec{
|
||||
Containers: []api.Container{
|
||||
{
|
||||
Name: name,
|
||||
Image: service.Image,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
return &pod
|
||||
}
|
||||
|
||||
// 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 {
|
||||
@@ -333,12 +354,19 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.
|
||||
var allobjects []runtime.Object
|
||||
|
||||
for name, service := range komposeObject.ServiceConfigs {
|
||||
objects := k.CreateKubernetesObjects(name, service, opt)
|
||||
var objects []runtime.Object
|
||||
|
||||
// If ports not provided in configuration we will not make service
|
||||
if k.PortsExist(name, service) {
|
||||
svc := k.CreateService(name, service, objects)
|
||||
objects = append(objects, svc)
|
||||
// Generate pod only and nothing more
|
||||
if service.Restart == "no" || service.Restart == "on-failure" {
|
||||
pod := k.InitPod(name, service)
|
||||
objects = append(objects, pod)
|
||||
} else {
|
||||
objects = k.CreateKubernetesObjects(name, service, opt)
|
||||
// If ports not provided in configuration we will not make service
|
||||
if k.PortsExist(name, service) {
|
||||
svc := k.CreateService(name, service, objects)
|
||||
objects = append(objects, svc)
|
||||
}
|
||||
}
|
||||
|
||||
k.UpdateKubernetesObjects(name, service, &objects)
|
||||
@@ -370,6 +398,14 @@ func (k *Kubernetes) UpdateController(obj runtime.Object, updateTemplate func(*a
|
||||
case *deployapi.DeploymentConfig:
|
||||
updateTemplate(t.Spec.Template)
|
||||
updateMeta(&t.ObjectMeta)
|
||||
case *api.Pod:
|
||||
p := api.PodTemplateSpec{
|
||||
ObjectMeta: t.ObjectMeta,
|
||||
Spec: t.Spec,
|
||||
}
|
||||
updateTemplate(&p)
|
||||
t.Spec = p.Spec
|
||||
t.ObjectMeta = p.ObjectMeta
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -319,3 +319,37 @@ func TestKomposeConvert(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestConvertRestartOptions(t *testing.T) {
|
||||
var opt kobject.ConvertOptions
|
||||
var k Kubernetes
|
||||
|
||||
testCases := map[string]struct {
|
||||
svc kobject.KomposeObject
|
||||
restartPolicy api.RestartPolicy
|
||||
}{
|
||||
"'restart' is set to 'no'": {kobject.KomposeObject{ServiceConfigs: map[string]kobject.ServiceConfig{"app": kobject.ServiceConfig{Image: "foobar", Restart: "no"}}}, api.RestartPolicyNever},
|
||||
"'restart' is set to 'on-failure'": {kobject.KomposeObject{ServiceConfigs: map[string]kobject.ServiceConfig{"app": kobject.ServiceConfig{Image: "foobar", Restart: "on-failure"}}}, api.RestartPolicyOnFailure},
|
||||
}
|
||||
|
||||
for name, test := range testCases {
|
||||
t.Log("Test Case:", name)
|
||||
|
||||
objs := k.Transform(test.svc, opt)
|
||||
|
||||
if len(objs) != 1 {
|
||||
t.Errorf("Expected only one pod, more elements generated.")
|
||||
}
|
||||
|
||||
for _, obj := range objs {
|
||||
if pod, ok := obj.(*api.Pod); ok {
|
||||
|
||||
if pod.Spec.RestartPolicy != test.restartPolicy {
|
||||
t.Errorf("Expected restartPolicy as %s, got %#v", test.restartPolicy, pod.Spec.RestartPolicy)
|
||||
}
|
||||
} else {
|
||||
t.Errorf("Expected 'pod' object not found one")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -152,20 +152,27 @@ func (o *OpenShift) Transform(komposeObject kobject.KomposeObject, opt kobject.C
|
||||
var allobjects []runtime.Object
|
||||
|
||||
for name, service := range komposeObject.ServiceConfigs {
|
||||
objects := o.CreateKubernetesObjects(name, service, opt)
|
||||
var objects []runtime.Object
|
||||
|
||||
if opt.CreateDeploymentConfig {
|
||||
objects = append(objects, o.initDeploymentConfig(name, service, opt.Replicas)) // OpenShift DeploymentConfigs
|
||||
// create ImageStream after deployment (creating IS will trigger new deployment)
|
||||
objects = append(objects, o.initImageStream(name, service))
|
||||
// Generate pod only and nothing more
|
||||
if service.Restart == "no" || service.Restart == "on-failure" {
|
||||
pod := o.InitPod(name, service)
|
||||
objects = append(objects, pod)
|
||||
} else {
|
||||
objects = o.CreateKubernetesObjects(name, service, opt)
|
||||
|
||||
if opt.CreateDeploymentConfig {
|
||||
objects = append(objects, o.initDeploymentConfig(name, service, opt.Replicas)) // OpenShift DeploymentConfigs
|
||||
// create ImageStream after deployment (creating IS will trigger new deployment)
|
||||
objects = append(objects, o.initImageStream(name, service))
|
||||
}
|
||||
|
||||
// If ports not provided in configuration we will not make service
|
||||
if o.PortsExist(name, service) {
|
||||
svc := o.CreateService(name, service, objects)
|
||||
objects = append(objects, svc)
|
||||
}
|
||||
}
|
||||
|
||||
// If ports not provided in configuration we will not make service
|
||||
if o.PortsExist(name, service) {
|
||||
svc := o.CreateService(name, service, objects)
|
||||
objects = append(objects, svc)
|
||||
}
|
||||
|
||||
o.UpdateKubernetesObjects(name, service, &objects)
|
||||
|
||||
allobjects = append(allobjects, objects...)
|
||||
|
||||
Reference in New Issue
Block a user