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
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func getIngressInformation(i, p interface{}) *ingressInformation {
|
func getIngressInformation(i, h, p interface{}) *ingressInformation {
|
||||||
ing, ok := i.(*ingress.Ingress)
|
ing, ok := i.(*ingress.Ingress)
|
||||||
if !ok {
|
if !ok {
|
||||||
klog.Errorf("expected an '*ingress.Ingress' type but %T was returned", i)
|
klog.Errorf("expected an '*ingress.Ingress' type but %T was returned", i)
|
||||||
return &ingressInformation{}
|
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)
|
path, ok := p.(string)
|
||||||
if !ok {
|
if !ok {
|
||||||
klog.Errorf("expected a 'string' type but %T was returned", p)
|
klog.Errorf("expected a 'string' type but %T was returned", p)
|
||||||
|
@ -763,6 +769,10 @@ func getIngressInformation(i, p interface{}) *ingressInformation {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if hostname != "" && hostname != rule.Host {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
for _, rPath := range rule.HTTP.Paths {
|
for _, rPath := range rule.HTTP.Paths {
|
||||||
if path == rPath.Path {
|
if path == rPath.Path {
|
||||||
info.Service = rPath.Backend.ServiceName
|
info.Service = rPath.Backend.ServiceName
|
||||||
|
|
|
@ -832,16 +832,17 @@ func TestOpentracingPropagateContext(t *testing.T) {
|
||||||
func TestGetIngressInformation(t *testing.T) {
|
func TestGetIngressInformation(t *testing.T) {
|
||||||
validIngress := &ingress.Ingress{}
|
validIngress := &ingress.Ingress{}
|
||||||
invalidIngress := "wrongtype"
|
invalidIngress := "wrongtype"
|
||||||
|
host := "host1"
|
||||||
validPath := "/ok"
|
validPath := "/ok"
|
||||||
invalidPath := 10
|
invalidPath := 10
|
||||||
|
|
||||||
info := getIngressInformation(invalidIngress, validPath)
|
info := getIngressInformation(invalidIngress, host, validPath)
|
||||||
expected := &ingressInformation{}
|
expected := &ingressInformation{}
|
||||||
if !info.Equal(expected) {
|
if !info.Equal(expected) {
|
||||||
t.Errorf("Expected %v, but got %v", expected, info)
|
t.Errorf("Expected %v, but got %v", expected, info)
|
||||||
}
|
}
|
||||||
|
|
||||||
info = getIngressInformation(validIngress, invalidPath)
|
info = getIngressInformation(validIngress, host, invalidPath)
|
||||||
if !info.Equal(expected) {
|
if !info.Equal(expected) {
|
||||||
t.Errorf("Expected %v, but got %v", expected, info)
|
t.Errorf("Expected %v, but got %v", expected, info)
|
||||||
}
|
}
|
||||||
|
@ -856,7 +857,7 @@ func TestGetIngressInformation(t *testing.T) {
|
||||||
ServiceName: "a-svc",
|
ServiceName: "a-svc",
|
||||||
}
|
}
|
||||||
|
|
||||||
info = getIngressInformation(validIngress, validPath)
|
info = getIngressInformation(validIngress, host, validPath)
|
||||||
expected = &ingressInformation{
|
expected = &ingressInformation{
|
||||||
Namespace: "default",
|
Namespace: "default",
|
||||||
Rule: "validIng",
|
Rule: "validIng",
|
||||||
|
@ -872,6 +873,7 @@ func TestGetIngressInformation(t *testing.T) {
|
||||||
validIngress.Spec.Backend = nil
|
validIngress.Spec.Backend = nil
|
||||||
validIngress.Spec.Rules = []extensions.IngressRule{
|
validIngress.Spec.Rules = []extensions.IngressRule{
|
||||||
{
|
{
|
||||||
|
Host: host,
|
||||||
IngressRuleValue: extensions.IngressRuleValue{
|
IngressRuleValue: extensions.IngressRuleValue{
|
||||||
HTTP: &extensions.HTTPIngressRuleValue{
|
HTTP: &extensions.HTTPIngressRuleValue{
|
||||||
Paths: []extensions.HTTPIngressPath{
|
Paths: []extensions.HTTPIngressPath{
|
||||||
|
@ -888,7 +890,7 @@ func TestGetIngressInformation(t *testing.T) {
|
||||||
{},
|
{},
|
||||||
}
|
}
|
||||||
|
|
||||||
info = getIngressInformation(validIngress, validPath)
|
info = getIngressInformation(validIngress, host, validPath)
|
||||||
expected = &ingressInformation{
|
expected = &ingressInformation{
|
||||||
Namespace: "default",
|
Namespace: "default",
|
||||||
Rule: "validIng",
|
Rule: "validIng",
|
||||||
|
@ -900,6 +902,33 @@ func TestGetIngressInformation(t *testing.T) {
|
||||||
if !info.Equal(expected) {
|
if !info.Equal(expected) {
|
||||||
t.Errorf("Expected %v, but got %v", expected, info)
|
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) {
|
func TestBuildCustomErrorLocationsPerServer(t *testing.T) {
|
||||||
|
|
|
@ -1014,7 +1014,7 @@ stream {
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
location {{ $path }} {
|
location {{ $path }} {
|
||||||
{{ $ing := (getIngressInformation $location.Ingress $location.Path) }}
|
{{ $ing := (getIngressInformation $location.Ingress $server.Hostname $location.Path) }}
|
||||||
set $namespace "{{ $ing.Namespace }}";
|
set $namespace "{{ $ing.Namespace }}";
|
||||||
set $ingress_name "{{ $ing.Rule }}";
|
set $ingress_name "{{ $ing.Rule }}";
|
||||||
set $service_name "{{ $ing.Service }}";
|
set $service_name "{{ $ing.Service }}";
|
||||||
|
|
Loading…
Reference in a new issue