Skip to content

Commit 43a61aa

Browse files
committed
Fix MicroShift fallback to check for NoMatchError
Use meta.IsNoMatchError to detect missing Network CRD instead of IsNotFound, matching actual MicroShift API server behavior. Assisted-By: Claude (claude-4.5-sonnet) Signed-off-by: Harald Jensås <hjensas@redhat.com>
1 parent 8a2950f commit 43a61aa

2 files changed

Lines changed: 48 additions & 12 deletions

File tree

modules/common/ocp/ocp.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import (
2525
ocp_config "github.com/openshift/api/config/v1"
2626
"gopkg.in/yaml.v3"
2727
corev1 "k8s.io/api/core/v1"
28-
k8serrors "k8s.io/apimachinery/pkg/api/errors"
28+
"k8s.io/apimachinery/pkg/api/meta"
2929
"k8s.io/apimachinery/pkg/types"
3030
k8s_utils "k8s.io/utils/net"
3131
)
@@ -67,8 +67,8 @@ func HasIPv6ClusterNetwork(ctx context.Context, h *helper.Helper) (bool, error)
6767
return false, nil
6868
}
6969

70-
// Fallback for MicroShift: check if error is NotFound
71-
if !k8serrors.IsNotFound(err) {
70+
// Fallback for MicroShift: check if Network CRD is not available
71+
if !meta.IsNoMatchError(err) {
7272
return false, err
7373
}
7474

@@ -106,8 +106,8 @@ func FirstClusterNetworkIsIPv6(ctx context.Context, h *helper.Helper) (bool, err
106106
return false, nil
107107
}
108108

109-
// Fallback for MicroShift: check if error is NotFound
110-
if !k8serrors.IsNotFound(err) {
109+
// Fallback for MicroShift: check if Network CRD is not available
110+
if !meta.IsNoMatchError(err) {
111111
return false, err
112112
}
113113

modules/common/ocp/ocp_test.go

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,14 @@ import (
2525
. "github.com/onsi/gomega"
2626
ocp_config "github.com/openshift/api/config/v1"
2727
corev1 "k8s.io/api/core/v1"
28+
"k8s.io/apimachinery/pkg/api/meta"
2829
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
30+
"k8s.io/apimachinery/pkg/runtime/schema"
2931
"k8s.io/client-go/kubernetes/scheme"
3032
ctrl "sigs.k8s.io/controller-runtime"
3133
"sigs.k8s.io/controller-runtime/pkg/client"
3234
"sigs.k8s.io/controller-runtime/pkg/client/fake"
35+
"sigs.k8s.io/controller-runtime/pkg/client/interceptor"
3336
)
3437

3538
func setupHelper(objs ...client.Object) (*helper.Helper, error) {
@@ -54,6 +57,39 @@ func setupHelper(objs ...client.Object) (*helper.Helper, error) {
5457
return helper.NewHelper(ns, fakeClient, nil, s, ctrl.Log)
5558
}
5659

60+
func setupHelperWithoutOCPScheme(objs ...client.Object) (*helper.Helper, error) {
61+
s := scheme.Scheme
62+
err := ocp_config.AddToScheme(s)
63+
if err != nil {
64+
return nil, err
65+
}
66+
67+
fakeClient := fake.NewClientBuilder().
68+
WithScheme(s).
69+
WithObjects(objs...).
70+
WithInterceptorFuncs(interceptor.Funcs{
71+
Get: func(ctx context.Context, client client.WithWatch, key client.ObjectKey, obj client.Object, opts ...client.GetOption) error {
72+
if _, ok := obj.(*ocp_config.Network); ok {
73+
return &meta.NoKindMatchError{
74+
GroupKind: schema.GroupKind{Group: "config.openshift.io", Kind: "Network"},
75+
SearchedVersions: []string{"v1"},
76+
}
77+
}
78+
return client.Get(ctx, key, obj, opts...)
79+
},
80+
}).
81+
Build()
82+
83+
// Create a minimal namespace object for helper
84+
ns := &corev1.Namespace{
85+
ObjectMeta: metav1.ObjectMeta{
86+
Name: "test-namespace",
87+
},
88+
}
89+
90+
return helper.NewHelper(ns, fakeClient, nil, s, ctrl.Log)
91+
}
92+
5793
func TestHasIPv6ClusterNetwork_OCP_IPv4(t *testing.T) {
5894
g := NewWithT(t)
5995

@@ -135,7 +171,7 @@ func TestHasIPv6ClusterNetwork_MicroShift_IPv4_NodePodCIDR(t *testing.T) {
135171
},
136172
}
137173

138-
h, err := setupHelper(node)
174+
h, err := setupHelperWithoutOCPScheme(node)
139175
g.Expect(err).NotTo(HaveOccurred())
140176

141177
hasIPv6, err := HasIPv6ClusterNetwork(context.TODO(), h)
@@ -155,7 +191,7 @@ func TestHasIPv6ClusterNetwork_MicroShift_IPv6_NodePodCIDR(t *testing.T) {
155191
},
156192
}
157193

158-
h, err := setupHelper(node)
194+
h, err := setupHelperWithoutOCPScheme(node)
159195
g.Expect(err).NotTo(HaveOccurred())
160196

161197
hasIPv6, err := HasIPv6ClusterNetwork(context.TODO(), h)
@@ -175,7 +211,7 @@ func TestHasIPv6ClusterNetwork_MicroShift_DualStack_NodePodCIDRs(t *testing.T) {
175211
},
176212
}
177213

178-
h, err := setupHelper(node)
214+
h, err := setupHelperWithoutOCPScheme(node)
179215
g.Expect(err).NotTo(HaveOccurred())
180216

181217
hasIPv6, err := HasIPv6ClusterNetwork(context.TODO(), h)
@@ -193,7 +229,7 @@ func TestHasIPv6ClusterNetwork_MicroShift_NoPodCIDR(t *testing.T) {
193229
Spec: corev1.NodeSpec{},
194230
}
195231

196-
h, err := setupHelper(node)
232+
h, err := setupHelperWithoutOCPScheme(node)
197233
g.Expect(err).NotTo(HaveOccurred())
198234

199235
hasIPv6, err := HasIPv6ClusterNetwork(context.TODO(), h)
@@ -259,7 +295,7 @@ func TestFirstClusterNetworkIsIPv6_MicroShift_IPv4First(t *testing.T) {
259295
},
260296
}
261297

262-
h, err := setupHelper(node)
298+
h, err := setupHelperWithoutOCPScheme(node)
263299
g.Expect(err).NotTo(HaveOccurred())
264300

265301
isIPv6, err := FirstClusterNetworkIsIPv6(context.TODO(), h)
@@ -279,7 +315,7 @@ func TestFirstClusterNetworkIsIPv6_MicroShift_IPv6First(t *testing.T) {
279315
},
280316
}
281317

282-
h, err := setupHelper(node)
318+
h, err := setupHelperWithoutOCPScheme(node)
283319
g.Expect(err).NotTo(HaveOccurred())
284320

285321
isIPv6, err := FirstClusterNetworkIsIPv6(context.TODO(), h)
@@ -297,7 +333,7 @@ func TestFirstClusterNetworkIsIPv6_MicroShift_NoPodCIDR(t *testing.T) {
297333
Spec: corev1.NodeSpec{},
298334
}
299335

300-
h, err := setupHelper(node)
336+
h, err := setupHelperWithoutOCPScheme(node)
301337
g.Expect(err).NotTo(HaveOccurred())
302338

303339
isIPv6, err := FirstClusterNetworkIsIPv6(context.TODO(), h)

0 commit comments

Comments
 (0)