parent
aba58d67f2
commit
f0f9618a89
2 changed files with 136 additions and 89 deletions
|
@ -48,14 +48,18 @@ func GetNodeIPOrName(kubeClient clientset.Interface, name string, useInternalIP
|
|||
return ""
|
||||
}
|
||||
|
||||
if useInternalIP {
|
||||
defaultOrInternalIP := ""
|
||||
for _, address := range node.Status.Addresses {
|
||||
if address.Type == apiv1.NodeInternalIP {
|
||||
if address.Address != "" {
|
||||
return address.Address
|
||||
defaultOrInternalIP = address.Address
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if useInternalIP {
|
||||
return defaultOrInternalIP
|
||||
}
|
||||
|
||||
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
|
||||
|
|
|
@ -58,16 +58,20 @@ func TestParseNameNS(t *testing.T) {
|
|||
|
||||
func TestGetNodeIP(t *testing.T) {
|
||||
fKNodes := []struct {
|
||||
name string
|
||||
cs *testclient.Clientset
|
||||
n string
|
||||
nodeName string
|
||||
ea string
|
||||
i bool
|
||||
useInternalIP bool
|
||||
}{
|
||||
// empty node list
|
||||
{testclient.NewSimpleClientset(), "demo", "", true},
|
||||
|
||||
// node not exist
|
||||
{testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{
|
||||
{
|
||||
"empty node list",
|
||||
testclient.NewSimpleClientset(),
|
||||
"demo", "", true,
|
||||
},
|
||||
{
|
||||
"node does not exist",
|
||||
testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "demo",
|
||||
},
|
||||
|
@ -79,10 +83,11 @@ func TestGetNodeIP(t *testing.T) {
|
|||
},
|
||||
},
|
||||
},
|
||||
}}}), "notexistnode", "", true},
|
||||
|
||||
// node exist
|
||||
{testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{
|
||||
}}}), "notexistnode", "", true,
|
||||
},
|
||||
{
|
||||
"node exist and only has an internal IP address (useInternalIP=false)",
|
||||
testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "demo",
|
||||
},
|
||||
|
@ -94,10 +99,43 @@ func TestGetNodeIP(t *testing.T) {
|
|||
},
|
||||
},
|
||||
},
|
||||
}}}), "demo", "10.0.0.1", true},
|
||||
|
||||
// search the correct node
|
||||
{testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{
|
||||
}}}), "demo", "10.0.0.1", false,
|
||||
},
|
||||
{
|
||||
"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{
|
||||
Name: "demo1",
|
||||
|
@ -124,10 +162,12 @@ func TestGetNodeIP(t *testing.T) {
|
|||
},
|
||||
},
|
||||
},
|
||||
}}), "demo2", "10.0.0.2", true},
|
||||
|
||||
// get NodeExternalIP
|
||||
{testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{
|
||||
}}),
|
||||
"demo2", "10.0.0.2", true,
|
||||
},
|
||||
{
|
||||
"node with both IP internal and external IP address - returns external IP",
|
||||
testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "demo",
|
||||
},
|
||||
|
@ -142,10 +182,12 @@ func TestGetNodeIP(t *testing.T) {
|
|||
},
|
||||
},
|
||||
},
|
||||
}}}), "demo", "10.0.0.2", false},
|
||||
|
||||
// get NodeInternalIP
|
||||
{testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{
|
||||
}}}),
|
||||
"demo", "10.0.0.2", false,
|
||||
},
|
||||
{
|
||||
"node with both IP internal and external IP address - returns internal IP",
|
||||
testclient.NewSimpleClientset(&apiv1.NodeList{Items: []apiv1.Node{{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
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 {
|
||||
address := GetNodeIPOrName(fk.cs, fk.n, fk.i)
|
||||
address := GetNodeIPOrName(fk.cs, fk.nodeName, fk.useInternalIP)
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue