diff --git a/test/e2e/scheduling/nvidia-gpus.go b/test/e2e/scheduling/nvidia-gpus.go index f8c3121cbbc..f2e091a1b9a 100644 --- a/test/e2e/scheduling/nvidia-gpus.go +++ b/test/e2e/scheduling/nvidia-gpus.go @@ -107,25 +107,38 @@ func logOSImages(ctx context.Context, f *framework.Framework) { } } +func isControlPlaneNode(node v1.Node) bool { + _, isControlPlane := node.Labels["node-role.kubernetes.io/control-plane"] + if isControlPlane { + framework.Logf("Node: %q is a control-plane node (label)", node.Name) + return true + } + + for _, taint := range node.Spec.Taints { + if taint.Key == "node-role.kubernetes.io/control-plane" { + framework.Logf("Node: %q is a control-plane node (taint)", node.Name) + return true + } + } + framework.Logf("Node: %q is NOT a control-plane node", node.Name) + return false +} + func areGPUsAvailableOnAllSchedulableNodes(ctx context.Context, f *framework.Framework) bool { framework.Logf("Getting list of Nodes from API server") nodeList, err := f.ClientSet.CoreV1().Nodes().List(ctx, metav1.ListOptions{}) framework.ExpectNoError(err, "getting node list") for _, node := range nodeList.Items { - if node.Spec.Unschedulable { + if node.Spec.Unschedulable || isControlPlaneNode(node) { continue } - _, isControlPlane := node.Labels["node-role.kubernetes.io/control-plane"] - if isControlPlane { - continue - } - framework.Logf("gpuResourceName %s", gpuResourceName) + if val, ok := node.Status.Capacity[gpuResourceName]; !ok || val.Value() == 0 { framework.Logf("Nvidia GPUs not available on Node: %q", node.Name) return false } } - framework.Logf("Nvidia GPUs exist on all schedulable nodes") + framework.Logf("Nvidia GPUs exist on all schedulable worker nodes") return true }