From 163a06df277ea29af4c64b2dd5686dbfc3912675 Mon Sep 17 00:00:00 2001 From: Suraj Deshmukh Date: Tue, 16 Aug 2016 14:18:50 +0530 Subject: [PATCH] Create service function in kubernetes utils This function can be used in both openshift and kubernetes and all the logic of creating service can be kept in this function. --- pkg/transformer/kubernetes/k8sutils.go | 70 ++++++++++++++++++++++++ pkg/transformer/kubernetes/kubernetes.go | 65 +--------------------- pkg/transformer/openshift/openshift.go | 68 +---------------------- 3 files changed, 72 insertions(+), 131 deletions(-) diff --git a/pkg/transformer/kubernetes/k8sutils.go b/pkg/transformer/kubernetes/k8sutils.go index 34482f1f..0d9baf72 100644 --- a/pkg/transformer/kubernetes/k8sutils.go +++ b/pkg/transformer/kubernetes/k8sutils.go @@ -222,3 +222,73 @@ func PortsExist(name string, service kobject.ServiceConfig) bool { return true } } + +// create a kubernetes Service +func CreateService(name string, service kobject.ServiceConfig, objects []runtime.Object) *api.Service { + + svc := InitSvc(name, service) + + // Configure the environment variables. + envs := ConfigEnvs(name, service) + + // Configure the container command. + cmds := transformer.ConfigCommands(service) + + // Configure the container volumes. + volumesMount, volumes := ConfigVolumes(service) + + // Configure the container ports. + ports := ConfigPorts(name, service) + + // Configure the service ports. + servicePorts := ConfigServicePorts(name, service) + svc.Spec.Ports = servicePorts + + // Configure annotations + annotations := transformer.ConfigAnnotations(service) + svc.ObjectMeta.Annotations = annotations + + // fillTemplate fills the pod template with the value calculated from config + fillTemplate := func(template *api.PodTemplateSpec) { + if len(service.ContainerName) > 0 { + template.Spec.Containers[0].Name = service.ContainerName + } + template.Spec.Containers[0].Env = envs + template.Spec.Containers[0].Command = cmds + template.Spec.Containers[0].Args = service.Args + template.Spec.Containers[0].WorkingDir = service.WorkingDir + template.Spec.Containers[0].VolumeMounts = volumesMount + template.Spec.Volumes = volumes + // Configure the container privileged mode + if service.Privileged == true { + template.Spec.Containers[0].SecurityContext = &api.SecurityContext{ + Privileged: &service.Privileged, + } + } + template.Spec.Containers[0].Ports = ports + template.ObjectMeta.Labels = transformer.ConfigLabels(name) + // Configure the container restart policy. + switch service.Restart { + case "", "always": + template.Spec.RestartPolicy = api.RestartPolicyAlways + case "no": + template.Spec.RestartPolicy = api.RestartPolicyNever + case "on-failure": + template.Spec.RestartPolicy = api.RestartPolicyOnFailure + default: + logrus.Fatalf("Unknown restart policy %s for service %s", service.Restart, name) + } + } + + // fillObjectMeta fills the metadata with the value calculated from config + fillObjectMeta := func(meta *api.ObjectMeta) { + meta.Annotations = annotations + } + + // update supported controller + for _, obj := range objects { + UpdateController(obj, fillTemplate, fillObjectMeta) + } + + return svc +} diff --git a/pkg/transformer/kubernetes/kubernetes.go b/pkg/transformer/kubernetes/kubernetes.go index ec788516..40a5ebc5 100644 --- a/pkg/transformer/kubernetes/kubernetes.go +++ b/pkg/transformer/kubernetes/kubernetes.go @@ -225,8 +225,6 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject. var objects []runtime.Object svcnames = append(svcnames, name) - svc := InitSvc(name, service) - if opt.CreateD { objects = append(objects, InitD(name, service, opt.Replicas)) } @@ -237,70 +235,9 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject. objects = append(objects, InitRC(name, service, opt.Replicas)) } - // Configure the environment variables. - envs := ConfigEnvs(name, service) - - // Configure the container command. - cmds := transformer.ConfigCommands(service) - - // Configure the container volumes. - volumesMount, volumes := ConfigVolumes(service) - - // Configure the container ports. - ports := ConfigPorts(name, service) - - // Configure the service ports. - servicePorts := ConfigServicePorts(name, service) - svc.Spec.Ports = servicePorts - - // Configure annotations - annotations := transformer.ConfigAnnotations(service) - svc.ObjectMeta.Annotations = annotations - - // fillTemplate fills the pod template with the value calculated from config - fillTemplate := func(template *api.PodTemplateSpec) { - if len(service.ContainerName) > 0 { - template.Spec.Containers[0].Name = service.ContainerName - } - template.Spec.Containers[0].Env = envs - template.Spec.Containers[0].Command = cmds - template.Spec.Containers[0].Args = service.Args - template.Spec.Containers[0].WorkingDir = service.WorkingDir - template.Spec.Containers[0].VolumeMounts = volumesMount - template.Spec.Volumes = volumes - // Configure the container privileged mode - if service.Privileged == true { - template.Spec.Containers[0].SecurityContext = &api.SecurityContext{ - Privileged: &service.Privileged, - } - } - template.Spec.Containers[0].Ports = ports - template.ObjectMeta.Labels = transformer.ConfigLabels(name) - // Configure the container restart policy. - switch service.Restart { - case "", "always": - template.Spec.RestartPolicy = api.RestartPolicyAlways - case "no": - template.Spec.RestartPolicy = api.RestartPolicyNever - case "on-failure": - template.Spec.RestartPolicy = api.RestartPolicyOnFailure - default: - logrus.Fatalf("Unknown restart policy %s for service %s", service.Restart, name) - } - } - - // fillObjectMeta fills the metadata with the value calculated from config - fillObjectMeta := func(meta *api.ObjectMeta) { - meta.Annotations = annotations - } - - // update supported controller - for _, obj := range objects { - UpdateController(obj, fillTemplate, fillObjectMeta) - } - // If ports not provided in configuration we will not make service if PortsExist(name, service) { + svc := CreateService(name, service, objects) objects = append(objects, svc) } diff --git a/pkg/transformer/openshift/openshift.go b/pkg/transformer/openshift/openshift.go index 8f48dfb1..90eee08b 100644 --- a/pkg/transformer/openshift/openshift.go +++ b/pkg/transformer/openshift/openshift.go @@ -17,10 +17,8 @@ limitations under the License. package openshift import ( - "github.com/Sirupsen/logrus" deployapi "github.com/openshift/origin/pkg/deploy/api" "github.com/skippbox/kompose/pkg/kobject" - "github.com/skippbox/kompose/pkg/transformer" "github.com/skippbox/kompose/pkg/transformer/kubernetes" "k8s.io/kubernetes/pkg/api" @@ -74,8 +72,6 @@ func (k *OpenShift) Transform(komposeObject kobject.KomposeObject, opt kobject.C var objects []runtime.Object svcnames = append(svcnames, name) - svc := kubernetes.InitSvc(name, service) - if opt.CreateD { objects = append(objects, kubernetes.InitD(name, service, opt.Replicas)) } @@ -89,71 +85,9 @@ func (k *OpenShift) Transform(komposeObject kobject.KomposeObject, opt kobject.C objects = append(objects, initDeploymentConfig(name, service, opt.Replicas)) // OpenShift DeploymentConfigs } - // Configure the environment variables. - envs := kubernetes.ConfigEnvs(name, service) - - // Configure the container command. - cmds := transformer.ConfigCommands(service) - - // Configure the container volumes. - volumesMount, volumes := kubernetes.ConfigVolumes(service) - - // Configure the container ports. - ports := kubernetes.ConfigPorts(name, service) - - // Configure the service ports. - servicePorts := kubernetes.ConfigServicePorts(name, service) - svc.Spec.Ports = servicePorts - - // Configure label - labels := transformer.ConfigLabels(name) - svc.ObjectMeta.Labels = labels - - // Configure annotations - annotations := transformer.ConfigAnnotations(service) - svc.ObjectMeta.Annotations = annotations - - // fillTemplate fills the pod template with the value calculated from config - fillTemplate := func(template *api.PodTemplateSpec) { - template.Spec.Containers[0].Env = envs - template.Spec.Containers[0].Command = cmds - template.Spec.Containers[0].WorkingDir = service.WorkingDir - template.Spec.Containers[0].VolumeMounts = volumesMount - template.Spec.Volumes = volumes - // Configure the container privileged mode - if service.Privileged == true { - template.Spec.Containers[0].SecurityContext = &api.SecurityContext{ - Privileged: &service.Privileged, - } - } - template.Spec.Containers[0].Ports = ports - template.ObjectMeta.Labels = labels - // Configure the container restart policy. - switch service.Restart { - case "", "always": - template.Spec.RestartPolicy = api.RestartPolicyAlways - case "no": - template.Spec.RestartPolicy = api.RestartPolicyNever - case "on-failure": - template.Spec.RestartPolicy = api.RestartPolicyOnFailure - default: - logrus.Fatalf("Unknown restart policy %s for service %s", service.Restart, name) - } - } - - // fillObjectMeta fills the metadata with the value calculated from config - fillObjectMeta := func(meta *api.ObjectMeta) { - meta.Labels = labels - meta.Annotations = annotations - } - - // update supported controller - for _, obj := range objects { - kubernetes.UpdateController(obj, fillTemplate, fillObjectMeta) - } - // If ports not provided in configuration we will not make service if kubernetes.PortsExist(name, service) { + svc := kubernetes.CreateService(name, service, objects) objects = append(objects, svc) } allobjects = append(allobjects, objects...)