Fix ingress status regression introduced in #4490 (#4871)

This commit is contained in:
Manuel Alejandro de Brito Fontes 2019-12-30 20:46:20 -03:00 committed by GitHub
parent aba58d67f2
commit f0f9618a89
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 136 additions and 89 deletions

View file

@ -48,14 +48,18 @@ func GetNodeIPOrName(kubeClient clientset.Interface, name string, useInternalIP
return "" return ""
} }
if useInternalIP { defaultOrInternalIP := ""
for _, address := range node.Status.Addresses { for _, address := range node.Status.Addresses {
if address.Type == apiv1.NodeInternalIP { if address.Type == apiv1.NodeInternalIP {
if address.Address != "" { if address.Address != "" {
return address.Address defaultOrInternalIP = address.Address
break
} }
} }
} }
if useInternalIP {
return defaultOrInternalIP
} }
for _, address := range node.Status.Addresses { for _, address := range node.Status.Addresses {
@ -66,7 +70,7 @@ func GetNodeIPOrName(kubeClient clientset.Interface, name string, useInternalIP
} }
} }
return "" return defaultOrInternalIP
} }
// PodInfo contains runtime information about the pod running the Ingres controller // PodInfo contains runtime information about the pod running the Ingres controller

View file

@ -58,16 +58,20 @@ func TestParseNameNS(t *testing.T) {
func TestGetNodeIP(t *testing.T) { func TestGetNodeIP(t *testing.T) {
fKNodes := []struct { fKNodes := []struct {
name string
cs *testclient.Clientset cs *testclient.Clientset
n string nodeName string
ea string ea string
i bool useInternalIP bool
}{ }{
// empty node list {
{testclient.NewSimpleClientset(), "demo", "", true}, "empty node list",
testclient.NewSimpleClientset(),
// node not exist "demo", "", true,
{testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{ },
{
"node does not exist",
testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: "demo", Name: "demo",
}, },
@ -79,10 +83,11 @@ func TestGetNodeIP(t *testing.T) {
}, },
}, },
}, },
}}}), "notexistnode", "", true}, }}}), "notexistnode", "", true,
},
// node exist {
{testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{ "node exist and only has an internal IP address (useInternalIP=false)",
testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: "demo", Name: "demo",
}, },
@ -94,10 +99,43 @@ func TestGetNodeIP(t *testing.T) {
}, },
}, },
}, },
}}}), "demo", "10.0.0.1", true}, }}}), "demo", "10.0.0.1", false,
},
// search the correct node {
{testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{ "node exist and only has an internal IP address",
testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{
ObjectMeta: metav1.ObjectMeta{
Name: "demo",
},
Status: apiv1.NodeStatus{
Addresses: []apiv1.NodeAddress{
{
Type: apiv1.NodeInternalIP,
Address: "10.0.0.1",
},
},
},
}}}), "demo", "10.0.0.1", true,
},
{
"node exist and only has an external IP address",
testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{
ObjectMeta: metav1.ObjectMeta{
Name: "demo",
},
Status: apiv1.NodeStatus{
Addresses: []apiv1.NodeAddress{
{
Type: apiv1.NodeExternalIP,
Address: "10.0.0.1",
},
},
},
}}}), "demo", "10.0.0.1", false,
},
{
"multiple nodes - choose the right one",
testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{
{ {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: "demo1", Name: "demo1",
@ -124,10 +162,12 @@ func TestGetNodeIP(t *testing.T) {
}, },
}, },
}, },
}}), "demo2", "10.0.0.2", true}, }}),
"demo2", "10.0.0.2", true,
// get NodeExternalIP },
{testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{ {
"node with both IP internal and external IP address - returns external IP",
testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: "demo", Name: "demo",
}, },
@ -142,10 +182,12 @@ func TestGetNodeIP(t *testing.T) {
}, },
}, },
}, },
}}}), "demo", "10.0.0.2", false}, }}}),
"demo", "10.0.0.2", false,
// get NodeInternalIP },
{testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{ {
"node with both IP internal and external IP address - returns internal IP",
testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: "demo", Name: "demo",
}, },
@ -160,13 +202,14 @@ func TestGetNodeIP(t *testing.T) {
}, },
}, },
}, },
}}}), "demo", "10.0.0.2", true}, }}}),
"demo", "10.0.0.2", true},
} }
for _, fk := range fKNodes { for _, fk := range fKNodes {
address := GetNodeIPOrName(fk.cs, fk.n, fk.i) address := GetNodeIPOrName(fk.cs, fk.nodeName, fk.useInternalIP)
if address != fk.ea { if address != fk.ea {
t.Errorf("expected %s, but returned %s", fk.ea, address) t.Errorf("%v - expected %s, but returned %s", fk.name, fk.ea, address)
} }
} }
} }