Merge pull request #3864 from alpeb/multihosts_servicename
ing.Service with multiple hosts fix
This commit is contained in:
commit
99888d6799
3 changed files with 45 additions and 6 deletions
|
@ -731,13 +731,19 @@ func (info *ingressInformation) Equal(other *ingressInformation) bool {
|
|||
return true
|
||||
}
|
||||
|
||||
func getIngressInformation(i, p interface{}) *ingressInformation {
|
||||
func getIngressInformation(i, h, p interface{}) *ingressInformation {
|
||||
ing, ok := i.(*ingress.Ingress)
|
||||
if !ok {
|
||||
klog.Errorf("expected an '*ingress.Ingress' type but %T was returned", i)
|
||||
return &ingressInformation{}
|
||||
}
|
||||
|
||||
hostname, ok := h.(string)
|
||||
if !ok {
|
||||
klog.Errorf("expected a 'string' type but %T was returned", h)
|
||||
return &ingressInformation{}
|
||||
}
|
||||
|
||||
path, ok := p.(string)
|
||||
if !ok {
|
||||
klog.Errorf("expected a 'string' type but %T was returned", p)
|
||||
|
@ -763,6 +769,10 @@ func getIngressInformation(i, p interface{}) *ingressInformation {
|
|||
continue
|
||||
}
|
||||
|
||||
if hostname != "" && hostname != rule.Host {
|
||||
continue
|
||||
}
|
||||
|
||||
for _, rPath := range rule.HTTP.Paths {
|
||||
if path == rPath.Path {
|
||||
info.Service = rPath.Backend.ServiceName
|
||||
|
|
|
@ -832,16 +832,17 @@ func TestOpentracingPropagateContext(t *testing.T) {
|
|||
func TestGetIngressInformation(t *testing.T) {
|
||||
validIngress := &ingress.Ingress{}
|
||||
invalidIngress := "wrongtype"
|
||||
host := "host1"
|
||||
validPath := "/ok"
|
||||
invalidPath := 10
|
||||
|
||||
info := getIngressInformation(invalidIngress, validPath)
|
||||
info := getIngressInformation(invalidIngress, host, validPath)
|
||||
expected := &ingressInformation{}
|
||||
if !info.Equal(expected) {
|
||||
t.Errorf("Expected %v, but got %v", expected, info)
|
||||
}
|
||||
|
||||
info = getIngressInformation(validIngress, invalidPath)
|
||||
info = getIngressInformation(validIngress, host, invalidPath)
|
||||
if !info.Equal(expected) {
|
||||
t.Errorf("Expected %v, but got %v", expected, info)
|
||||
}
|
||||
|
@ -856,7 +857,7 @@ func TestGetIngressInformation(t *testing.T) {
|
|||
ServiceName: "a-svc",
|
||||
}
|
||||
|
||||
info = getIngressInformation(validIngress, validPath)
|
||||
info = getIngressInformation(validIngress, host, validPath)
|
||||
expected = &ingressInformation{
|
||||
Namespace: "default",
|
||||
Rule: "validIng",
|
||||
|
@ -872,6 +873,7 @@ func TestGetIngressInformation(t *testing.T) {
|
|||
validIngress.Spec.Backend = nil
|
||||
validIngress.Spec.Rules = []extensions.IngressRule{
|
||||
{
|
||||
Host: host,
|
||||
IngressRuleValue: extensions.IngressRuleValue{
|
||||
HTTP: &extensions.HTTPIngressRuleValue{
|
||||
Paths: []extensions.HTTPIngressPath{
|
||||
|
@ -888,7 +890,7 @@ func TestGetIngressInformation(t *testing.T) {
|
|||
{},
|
||||
}
|
||||
|
||||
info = getIngressInformation(validIngress, validPath)
|
||||
info = getIngressInformation(validIngress, host, validPath)
|
||||
expected = &ingressInformation{
|
||||
Namespace: "default",
|
||||
Rule: "validIng",
|
||||
|
@ -900,6 +902,33 @@ func TestGetIngressInformation(t *testing.T) {
|
|||
if !info.Equal(expected) {
|
||||
t.Errorf("Expected %v, but got %v", expected, info)
|
||||
}
|
||||
|
||||
validIngress.Spec.Rules = append(validIngress.Spec.Rules, extensions.IngressRule{
|
||||
Host: "host2",
|
||||
IngressRuleValue: extensions.IngressRuleValue{
|
||||
HTTP: &extensions.HTTPIngressRuleValue{
|
||||
Paths: []extensions.HTTPIngressPath{
|
||||
{
|
||||
Path: "/ok",
|
||||
Backend: extensions.IngressBackend{
|
||||
ServiceName: "c-svc",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
info = getIngressInformation(validIngress, host, validPath)
|
||||
if !info.Equal(expected) {
|
||||
t.Errorf("Expected %v, but got %v", expected, info)
|
||||
}
|
||||
|
||||
info = getIngressInformation(validIngress, "host2", validPath)
|
||||
expected.Service = "c-svc"
|
||||
if !info.Equal(expected) {
|
||||
t.Errorf("Expected %v, but got %v", expected, info)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildCustomErrorLocationsPerServer(t *testing.T) {
|
||||
|
|
|
@ -1014,7 +1014,7 @@ stream {
|
|||
{{ end }}
|
||||
|
||||
location {{ $path }} {
|
||||
{{ $ing := (getIngressInformation $location.Ingress $location.Path) }}
|
||||
{{ $ing := (getIngressInformation $location.Ingress $server.Hostname $location.Path) }}
|
||||
set $namespace "{{ $ing.Namespace }}";
|
||||
set $ingress_name "{{ $ing.Rule }}";
|
||||
set $service_name "{{ $ing.Service }}";
|
||||
|
|
Loading…
Reference in a new issue