Skip to content

Commit 05b5d7f

Browse files
authored
chore(deps): make GetIngressLoadbalancerStatus not change its API after bumping k8s libs (#473)
Adds converting functions for LoadBalancerStatus to not change the public interface of GetIngressLoadbalancerStatus.
1 parent 6ba9271 commit 05b5d7f

File tree

2 files changed

+84
-2
lines changed

2 files changed

+84
-2
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package conversion
2+
3+
import (
4+
corev1 "k8s.io/api/core/v1"
5+
extv1beta1 "k8s.io/api/extensions/v1beta1"
6+
netv1 "k8s.io/api/networking/v1"
7+
netv1beta1 "k8s.io/api/networking/v1beta1"
8+
)
9+
10+
func NetV1ToCoreV1LoadBalancerStatus(in netv1.IngressLoadBalancerStatus) *corev1.LoadBalancerStatus {
11+
out := &corev1.LoadBalancerStatus{}
12+
for _, i := range in.Ingress {
13+
ports := make([]corev1.PortStatus, 0, len(i.Ports))
14+
for _, p := range i.Ports {
15+
ports = append(ports, corev1.PortStatus{
16+
Port: p.Port,
17+
Protocol: p.Protocol,
18+
Error: p.Error,
19+
})
20+
}
21+
out.Ingress = append(out.Ingress, corev1.LoadBalancerIngress{
22+
IP: i.IP,
23+
Hostname: i.Hostname,
24+
Ports: ports,
25+
})
26+
}
27+
return out
28+
}
29+
30+
func NetV1beta1ToCoreV1LoadBalancerStatus(in netv1beta1.IngressLoadBalancerStatus) *corev1.LoadBalancerStatus {
31+
out := &corev1.LoadBalancerStatus{}
32+
for _, i := range in.Ingress {
33+
ports := make([]corev1.PortStatus, 0, len(i.Ports))
34+
for _, p := range i.Ports {
35+
ports = append(ports, corev1.PortStatus{
36+
Port: p.Port,
37+
Protocol: p.Protocol,
38+
Error: p.Error,
39+
})
40+
}
41+
out.Ingress = append(out.Ingress, corev1.LoadBalancerIngress{
42+
IP: i.IP,
43+
Hostname: i.Hostname,
44+
Ports: ports,
45+
})
46+
}
47+
return out
48+
}
49+
50+
func ExtV1beta1ToCoreV1LoadBalancerStatus(in extv1beta1.IngressLoadBalancerStatus) *corev1.LoadBalancerStatus {
51+
out := &corev1.LoadBalancerStatus{}
52+
for _, i := range in.Ingress {
53+
ports := make([]corev1.PortStatus, 0, len(i.Ports))
54+
for _, p := range i.Ports {
55+
ports = append(ports, corev1.PortStatus{
56+
Port: p.Port,
57+
Protocol: p.Protocol,
58+
Error: p.Error,
59+
})
60+
}
61+
out.Ingress = append(out.Ingress, corev1.LoadBalancerIngress{
62+
IP: i.IP,
63+
Hostname: i.Hostname,
64+
Ports: ports,
65+
})
66+
}
67+
return out
68+
}

pkg/clusters/utils.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1919
"k8s.io/apimachinery/pkg/runtime"
2020

21+
"github.com/kong/kubernetes-testing-framework/internal/conversion"
2122
"github.com/kong/kubernetes-testing-framework/pkg/utils/kubernetes/generators"
2223
)
2324

@@ -74,14 +75,27 @@ func DeleteIngress(ctx context.Context, c Cluster, namespace string, ingress run
7475
// given an Ingress object provided by the caller determine the version and pull a fresh copy
7576
// of the current LoadBalancerStatus for that Ingress object without the caller needing to be
7677
// aware of which version of Ingress they're using.
77-
func GetIngressLoadbalancerStatus(ctx context.Context, c Cluster, namespace string, ingress runtime.Object) (*netv1.IngressLoadBalancerStatus, error) {
78+
// TODO: once we stop supporting old Kubernetes versions <1.19 we can remove this.
79+
func GetIngressLoadbalancerStatus(ctx context.Context, c Cluster, namespace string, ingress runtime.Object) (*corev1.LoadBalancerStatus, error) {
7880
switch obj := ingress.(type) {
7981
case *netv1.Ingress:
8082
refresh, err := c.Client().NetworkingV1().Ingresses(namespace).Get(ctx, obj.Name, metav1.GetOptions{})
8183
if err != nil {
8284
return nil, err
8385
}
84-
return &refresh.Status.LoadBalancer, nil
86+
return conversion.NetV1ToCoreV1LoadBalancerStatus(refresh.Status.LoadBalancer), nil
87+
case *netv1beta1.Ingress:
88+
refresh, err := c.Client().NetworkingV1beta1().Ingresses(namespace).Get(ctx, obj.Name, metav1.GetOptions{})
89+
if err != nil {
90+
return nil, err
91+
}
92+
return conversion.NetV1beta1ToCoreV1LoadBalancerStatus(refresh.Status.LoadBalancer), nil
93+
case *extv1beta1.Ingress:
94+
refresh, err := c.Client().ExtensionsV1beta1().Ingresses(namespace).Get(ctx, obj.Name, metav1.GetOptions{})
95+
if err != nil {
96+
return nil, err
97+
}
98+
return conversion.ExtV1beta1ToCoreV1LoadBalancerStatus(refresh.Status.LoadBalancer), nil
8599
default:
86100
return nil, fmt.Errorf("%T is not a supported ingress type", ingress)
87101
}

0 commit comments

Comments
 (0)