Support multiple hostnames on expose label in service for Kubernetes (#1092)

* Support multiple hostnames on label (kompose.service.expose) separated by semicolon (;)

* Multiple hostnames on expose label separated by comma; Ignore leading / trailing spaces and repeated commas; Updated test cases and documents.
This commit is contained in:
huikaihoo
2019-01-31 09:34:04 -05:00
committed by Charlie Drage
parent 75ecc88aef
commit 40c1b8cf87
9 changed files with 469 additions and 24 deletions
+22 -19
View File
@@ -19,6 +19,7 @@ package kubernetes
import (
"fmt"
"reflect"
"regexp"
"strconv"
"time"
@@ -324,6 +325,8 @@ func (k *Kubernetes) InitDS(name string, service kobject.ServiceConfig) *extensi
func (k *Kubernetes) initIngress(name string, service kobject.ServiceConfig, port int32) *extensions.Ingress {
hosts := regexp.MustCompile("[ ,]*,[ ,]*").Split(service.ExposeService, -1)
ingress := &extensions.Ingress{
TypeMeta: unversioned.TypeMeta{
Kind: "Ingress",
@@ -334,36 +337,36 @@ func (k *Kubernetes) initIngress(name string, service kobject.ServiceConfig, por
Labels: transformer.ConfigLabels(name),
},
Spec: extensions.IngressSpec{
Rules: []extensions.IngressRule{
{
IngressRuleValue: extensions.IngressRuleValue{
HTTP: &extensions.HTTPIngressRuleValue{
Paths: []extensions.HTTPIngressPath{
{
Backend: extensions.IngressBackend{
ServiceName: name,
ServicePort: intstr.IntOrString{
IntVal: port,
},
},
Rules: make([]extensions.IngressRule, len(hosts)),
},
}
for i, host := range hosts {
ingress.Spec.Rules[i] = extensions.IngressRule{
IngressRuleValue: extensions.IngressRuleValue{
HTTP: &extensions.HTTPIngressRuleValue{
Paths: []extensions.HTTPIngressPath{
{
Backend: extensions.IngressBackend{
ServiceName: name,
ServicePort: intstr.IntOrString{
IntVal: port,
},
},
},
},
},
},
},
}
if host != "true" {
ingress.Spec.Rules[i].Host = host
}
}
if service.ExposeService != "true" {
ingress.Spec.Rules[0].Host = service.ExposeService
}
if service.ExposeServiceTLS != "" {
ingress.Spec.TLS = []extensions.IngressTLS{
{
Hosts: []string{
service.ExposeService,
},
Hosts: hosts,
SecretName: service.ExposeServiceTLS,
},
}