Merge pull request #334 from surajssd/create_pod

support for raw pod output without controller
This commit is contained in:
Suraj Deshmukh
2016-12-15 11:57:13 +05:30
committed by GitHub
12 changed files with 288 additions and 17 deletions
+2
View File
@@ -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)
}
+41 -5
View 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")
}
}
}
}
+19 -12
View File
@@ -155,20 +155,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...)