Handle Headless Services when no ports are present

This commit is contained in:
sebgoa
2017-01-25 11:28:29 +01:00
committed by Tomas Kral
parent 001e19c4b3
commit 3193ac3bd7
6 changed files with 922 additions and 573 deletions
+22 -1
View File
@@ -258,7 +258,7 @@ func convertToVersion(obj runtime.Object, groupVersion unversioned.GroupVersion)
// PortsExist checks if service has ports defined
func (k *Kubernetes) PortsExist(name string, service kobject.ServiceConfig) bool {
if len(service.Port) == 0 {
logrus.Warningf("[%s] Service cannot be created because of missing port.", name)
logrus.Warningf("[%s] No ports defined, we will create a Headless service.", name)
return false
}
return true
@@ -282,6 +282,27 @@ func (k *Kubernetes) CreateService(name string, service kobject.ServiceConfig, o
return svc
}
// CreateHeadlessService creates a k8s headless service
func (k *Kubernetes) CreateHeadlessService(name string, service kobject.ServiceConfig, objects []runtime.Object) *api.Service {
svc := k.InitSvc(name, service)
servicePorts := []api.ServicePort{}
// Configure a dummy port: https://github.com/kubernetes/kubernetes/issues/32766.
servicePorts = append(servicePorts, api.ServicePort{
Name: "headless",
Port: 55555,
})
svc.Spec.Ports = servicePorts
svc.Spec.ClusterIP = "None"
// Configure annotations
annotations := transformer.ConfigAnnotations(service)
svc.ObjectMeta.Annotations = annotations
return svc
}
// UpdateKubernetesObjects loads configurations to k8s objects
func (k *Kubernetes) UpdateKubernetesObjects(name string, service kobject.ServiceConfig, objects *[]runtime.Object) {
// Configure the environment variables.
+3
View File
@@ -477,6 +477,9 @@ func (k *Kubernetes) Transform(komposeObject kobject.KomposeObject, opt kobject.
if service.ExposeService != "" {
objects = append(objects, k.initIngress(name, service, svc.Spec.Ports[0].Port))
}
} else {
svc := k.CreateHeadlessService(name, service, objects)
objects = append(objects, svc)
}
}