@@ -20,10 +20,8 @@ import (
2020 "context"
2121 "embed"
2222 "fmt"
23- "strings"
2423 "time"
2524
26- corev1 "k8s.io/api/core/v1"
2725 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2826 "k8s.io/apimachinery/pkg/util/wait"
2927 "k8s.io/klog/v2"
@@ -36,7 +34,7 @@ const (
3634 draDependencyName = "DRATestDriver"
3735 draNamespace = "dra-example-driver"
3836 draManifests = "dra-example-driver"
39- defaultWorkerNodeCount = " 100"
37+ defaultWorkerNodeCount = 100
4038 draDaemonsetName = "dra-example-driver-kubeletplugin"
4139 checkDRAReadyInterval = 30 * time .Second
4240 defaultDRATimeout = 10 * time .Minute
@@ -79,9 +77,14 @@ func (d *draDependency) Setup(config *dependency.Config) error {
7977 return err
8078 }
8179
80+ workerCount , err := getWorkerCount (config )
81+ if err != nil {
82+ return err
83+ }
84+
8285 mapping := map [string ]interface {}{
8386 "Namespace" : namespace ,
84- "WorkerNodeCount" : getWorkerCount ( config ) ,
87+ "WorkerNodeCount" : workerCount ,
8588 "ImageRegistry" : config .ClusterLoaderConfig .ImageRegistry ,
8689 }
8790
@@ -131,94 +134,69 @@ func (d *draDependency) Teardown(config *dependency.Config) error {
131134}
132135
133136func (d * draDependency ) waitForDRADriverToBeHealthy (config * dependency.Config , timeout time.Duration , daemonsetName string , namespace string ) error {
137+ var desiredCount int32
134138 if err := wait .PollImmediate (
135139 checkDRAReadyInterval ,
136140 timeout ,
137141 func () (done bool , err error ) {
138- return d .isDRADriverReady (config , daemonsetName , namespace )
142+ ready , desired , pollErr := d .isDRADriverReady (config , daemonsetName , namespace )
143+ if pollErr != nil {
144+ return false , pollErr
145+ }
146+ desiredCount = desired
147+ return ready , nil
139148 }); err != nil {
140149 return err
141150 }
142151 if err := wait .PollImmediate (
143152 checkDRAReadyInterval ,
144153 timeout ,
145154 func () (done bool , err error ) {
146- return isResourceSlicesPublished (config , namespace )
155+ return isResourceSlicesPublished (config , int ( desiredCount ) )
147156 }); err != nil {
148157 return err
149158 }
150159 return nil
151160}
152161
153- func (d * draDependency ) isDRADriverReady (config * dependency.Config , daemonsetName string , namespace string ) (done bool , err error ) {
162+ func (d * draDependency ) isDRADriverReady (config * dependency.Config , daemonsetName string , namespace string ) (ready bool , desired int32 , err error ) {
154163 ds , err := config .ClusterFramework .GetClientSets ().
155164 GetClient ().
156165 AppsV1 ().
157166 DaemonSets (namespace ).
158167 Get (context .Background (), daemonsetName , metav1.GetOptions {})
159168 if err != nil {
160- return false , fmt .Errorf ("failed to get %s: %v" , daemonsetName , err )
161- }
162- ready := ds .Status .NumberReady == ds .Status .DesiredNumberScheduled
163- if ! ready {
164- klog .V (2 ).Infof ("%s is not ready, " +
165- "DesiredNumberScheduled: %d, NumberReady: %d" , daemonsetName , ds .Status .DesiredNumberScheduled , ds .Status .NumberReady )
169+ return false , 0 , fmt .Errorf ("failed to get %s: %v" , daemonsetName , err )
166170 }
167- return ready , nil
168- }
169171
170- func isResourceSlicesPublished (config * dependency.Config , namespace string ) (bool , error ) {
171- // Get a list of all nodes
172- // nodes, err := getReadyNodesCount(config)
173- // if err != nil {
174- // return false, fmt.Errorf("failed to list nodes: %v", err)
175- // }
176-
177- driverPluginPods , err := getDriverPluginPods (config , namespace , draDaemonsetName )
178- if err != nil {
179- return false , fmt .Errorf ("failed to list driverPluginPods: %v" , err )
172+ if ds .Status .DesiredNumberScheduled == 0 {
173+ klog .V (2 ).Infof ("%s is not ready, DesiredNumberScheduled is 0" , daemonsetName )
174+ return false , 0 , nil
180175 }
176+ if ds .Status .NumberReady != ds .Status .DesiredNumberScheduled {
177+ klog .V (2 ).Infof ("%s is not ready, DesiredNumberScheduled: %d, NumberReady: %d" ,
178+ daemonsetName , ds .Status .DesiredNumberScheduled , ds .Status .NumberReady )
179+ return false , ds .Status .DesiredNumberScheduled , nil
180+ }
181+ return true , ds .Status .DesiredNumberScheduled , nil
182+ }
181183
182- workerCount := driverPluginPods
183-
184+ func isResourceSlicesPublished (config * dependency.Config , expected int ) (bool , error ) {
184185 resourceSlices , err := config .ClusterFramework .GetClientSets ().GetClient ().ResourceV1 ().ResourceSlices ().List (context .Background (), metav1.ListOptions {})
185186 if err != nil {
186187 return false , fmt .Errorf ("failed to list resourceslices: %v" , err )
187188 }
188- if len (resourceSlices .Items ) != workerCount {
189- klog .V (2 ).Infof ("waiting for resourceslices to be available, " +
190- "DesiredResourceSliceCount: %d, NumberResourceSlicesAvailable: %d" , workerCount , len (resourceSlices .Items ))
189+ if len (resourceSlices .Items ) < expected {
190+ klog .V (2 ).Infof ("waiting for resourceslices to be available, expected: %d, available: %d" ,
191+ expected , len (resourceSlices .Items ))
191192 return false , nil
192193 }
194+ klog .V (2 ).Infof ("resourceslices ready, expected: %d, available: %d" , expected , len (resourceSlices .Items ))
193195 return true , nil
194196}
195197
196- func getDriverPluginPods (config * dependency.Config , namespace string , namePrefix string ) (int , error ) {
197- pods , err := config .ClusterFramework .GetClientSets ().GetClient ().CoreV1 ().Pods (namespace ).List (context .Background (), metav1.ListOptions {})
198- if err != nil {
199- return 0 , fmt .Errorf ("failed to list pods in namespace %s: %w" , namespace , err )
200- }
201-
202- runningPods := 0
203- for _ , pod := range pods .Items {
204- if ! strings .HasPrefix (pod .Name , namePrefix ) {
205- continue
206- }
207-
208- if pod .Status .Phase == corev1 .PodRunning {
209- runningPods ++
210- }
211- }
212-
213- return runningPods , nil
214- }
215-
216- func getWorkerCount (config * dependency.Config ) interface {} {
217- workerCount , ok := config .Params ["WorkerNodeCount" ]
218- if ! ok {
219- workerCount = defaultWorkerNodeCount
220- }
221- return workerCount
198+ func getWorkerCount (config * dependency.Config ) (int , error ) {
199+ return util .GetIntOrDefault (config .Params , "WorkerNodeCount" , defaultWorkerNodeCount )
222200}
223201
224202func getNamespace (config * dependency.Config ) (string , error ) {
0 commit comments