@@ -10,6 +10,7 @@ import (
1010 imageregistry "github.com/openshift/client-go/imageregistry/clientset/versioned"
1111 clusteroperatorhelpers "github.com/openshift/library-go/pkg/config/clusteroperator/v1helpers"
1212 exutil "github.com/openshift/origin/test/extended/util"
13+ v1 "k8s.io/api/core/v1"
1314 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1415 e2e "k8s.io/kubernetes/test/e2e/framework"
1516 e2eskipper "k8s.io/kubernetes/test/e2e/framework/skipper"
@@ -65,3 +66,26 @@ func skipIfNotS3Storage(oc *exutil.CLI) {
6566 e2eskipper .Skipf ("No S3 storage detected" )
6667 }
6768}
69+
70+ // GetSchedulableLinuxWorkerNodes returns a list of nodes that match the requirements:
71+ // os: linux, role: worker, status: ready, schedulable
72+ func GetSchedulableLinuxWorkerNodes (oc * exutil.CLI ) ([]v1.Node , error ) {
73+ var nodes , workers []v1.Node
74+ linuxNodes , err := oc .AdminKubeClient ().CoreV1 ().Nodes ().List (context .Background (), metav1.ListOptions {LabelSelector : "kubernetes.io/os=linux" })
75+ // get schedulable linux worker nodes
76+ for _ , node := range linuxNodes .Items {
77+ if _ , ok := node .Labels ["node-role.kubernetes.io/worker" ]; ok && ! node .Spec .Unschedulable {
78+ workers = append (workers , node )
79+ }
80+ }
81+ // get ready nodes
82+ for _ , worker := range workers {
83+ for _ , con := range worker .Status .Conditions {
84+ if con .Type == "Ready" && con .Status == "True" {
85+ nodes = append (nodes , worker )
86+ break
87+ }
88+ }
89+ }
90+ return nodes , err
91+ }
0 commit comments