Skip to content

Commit af1538d

Browse files
committed
Refactor: Extract schedulable worker nodes logic to reusable utility function
As suggested in code review, created a shared utility function GetReadySchedulableWorkerNodes() in test/extended/node/node_utils.go to encapsulate the logic of retrieving schedulable worker nodes (excluding nodes with NoSchedule/NoExecute taints). This makes the node selection logic reusable across multiple tests and improves code maintainability. Changes: - Added GetReadySchedulableWorkerNodes() in test/extended/node/node_utils.go - Refactored PinnedImages test to use the new utility function - Simplified addWorkerNodesToCustomPool() by removing manual filtering logic
1 parent 005fa6f commit af1538d

2 files changed

Lines changed: 26 additions & 11 deletions

File tree

test/extended/machine_config/pinnedimages.go

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313

1414
mcfgv1 "github.com/openshift/api/machineconfiguration/v1"
1515
mcClient "github.com/openshift/client-go/machineconfiguration/clientset/versioned"
16+
nodeutil "github.com/openshift/origin/test/extended/node"
1617
exutil "github.com/openshift/origin/test/extended/util"
1718
corev1 "k8s.io/api/core/v1"
1819
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -21,7 +22,6 @@ import (
2122
"k8s.io/apimachinery/pkg/util/wait"
2223
"k8s.io/client-go/kubernetes"
2324
"k8s.io/kubernetes/test/e2e/framework"
24-
e2enode "k8s.io/kubernetes/test/e2e/framework/node"
2525
"sigs.k8s.io/yaml"
2626
)
2727

@@ -354,20 +354,12 @@ func applyPIS(oc *exutil.CLI, pisFixture string, pis *mcfgv1.PinnedImageSet, pis
354354
// `addWorkerNodesToCustomPool` labels the desired number of worker nodes with the MCP role
355355
// selector so that the nodes become part of the desired custom MCP
356356
func addWorkerNodesToCustomPool(oc *exutil.CLI, kubeClient *kubernetes.Clientset, numberOfNodes int, customMCP string) ([]string, error) {
357-
// Get ready schedulable nodes (excludes nodes with NoSchedule/NoExecute taints)
358-
nodes, err := e2enode.GetReadySchedulableNodes(context.TODO(), kubeClient)
357+
// Get ready schedulable worker nodes (excludes nodes with NoSchedule/NoExecute taints)
358+
workerNodes, err := nodeutil.GetReadySchedulableWorkerNodes(context.TODO(), kubeClient)
359359
if err != nil {
360360
return nil, err
361361
}
362362

363-
// Filter for worker nodes only
364-
var workerNodes []corev1.Node
365-
for _, node := range nodes.Items {
366-
if _, hasWorkerLabel := node.Labels["node-role.kubernetes.io/worker"]; hasWorkerLabel {
367-
workerNodes = append(workerNodes, node)
368-
}
369-
}
370-
371363
// Return an error if there are less schedulable worker nodes than the desired number of nodes to add to the custom MCP
372364
if len(workerNodes) < numberOfNodes {
373365
return nil, fmt.Errorf("Schedulable nodes in Worker MCP %d < Number of nodes needed in %s MCP %d", len(workerNodes), customMCP, numberOfNodes)

test/extended/node/node_utils.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ import (
77

88
v1 "k8s.io/api/core/v1"
99
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
10+
"k8s.io/client-go/kubernetes"
1011
kubeletconfigv1beta1 "k8s.io/kubelet/config/v1beta1"
1112
"k8s.io/kubernetes/test/e2e/framework"
13+
e2enode "k8s.io/kubernetes/test/e2e/framework/node"
1214

1315
exutil "github.com/openshift/origin/test/extended/util"
1416
)
@@ -81,3 +83,24 @@ func getPureWorkerNodes(nodes []v1.Node) []v1.Node {
8183
}
8284
return pureWorkers
8385
}
86+
87+
// GetReadySchedulableWorkerNodes returns ready schedulable worker nodes.
88+
// This function filters out nodes with NoSchedule/NoExecute taints and non-worker nodes,
89+
// making it suitable for tests that need to select worker nodes for workload placement.
90+
func GetReadySchedulableWorkerNodes(ctx context.Context, client kubernetes.Interface) ([]v1.Node, error) {
91+
// Get ready schedulable nodes (excludes nodes with NoSchedule/NoExecute taints)
92+
nodes, err := e2enode.GetReadySchedulableNodes(ctx, client)
93+
if err != nil {
94+
return nil, err
95+
}
96+
97+
// Filter for worker nodes only
98+
var workerNodes []v1.Node
99+
for _, node := range nodes.Items {
100+
if _, hasWorkerLabel := node.Labels["node-role.kubernetes.io/worker"]; hasWorkerLabel {
101+
workerNodes = append(workerNodes, node)
102+
}
103+
}
104+
105+
return workerNodes, nil
106+
}

0 commit comments

Comments
 (0)