Merge pull request #3864 from alpeb/multihosts_servicename

ing.Service with multiple hosts fix
This commit is contained in:
Kubernetes Prow Robot 2019-03-09 05:09:27 -08:00 committed by GitHub
commit 99888d6799
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 45 additions and 6 deletions

View file

@ -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

View file

@ -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) {

View file

@ -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 }}";