@@ -181,13 +181,13 @@ var _ = Describe("SriovnetworkNodePolicy controller", Ordered, func() {
181181 })
182182 })
183183 AfterEach (func () {
184- err := k8sClient .DeleteAllOf (context .Background (), & corev1.Node {})
184+ err := k8sClient .DeleteAllOf (context .Background (), & corev1.Node {}, k8sclient . GracePeriodSeconds ( 0 ) )
185185 Expect (err ).ToNot (HaveOccurred ())
186186
187- err = k8sClient .DeleteAllOf (context .Background (), & sriovnetworkv1.SriovNetworkNodePolicy {}, k8sclient .InNamespace (vars .Namespace ))
187+ err = k8sClient .DeleteAllOf (context .Background (), & sriovnetworkv1.SriovNetworkNodePolicy {}, k8sclient .InNamespace (vars .Namespace ), k8sclient . GracePeriodSeconds ( 0 ) )
188188 Expect (err ).ToNot (HaveOccurred ())
189189
190- err = k8sClient .DeleteAllOf (context .Background (), & sriovnetworkv1.SriovNetworkNodeState {}, k8sclient .InNamespace (vars .Namespace ))
190+ err = k8sClient .DeleteAllOf (context .Background (), & sriovnetworkv1.SriovNetworkNodeState {}, k8sclient .InNamespace (vars .Namespace ), k8sclient . GracePeriodSeconds ( 0 ) )
191191 Expect (err ).ToNot (HaveOccurred ())
192192 })
193193 Context ("device plugin labels" , func () {
@@ -263,6 +263,162 @@ var _ = Describe("SriovnetworkNodePolicy controller", Ordered, func() {
263263 Expect (errors .IsNotFound (err )).To (BeTrue ())
264264 }, time .Minute , time .Second ).Should (Succeed ())
265265 })
266+
267+ It ("should skip label removal for nodes that doesn't exist with no stale timer" , func () {
268+ node0 := & corev1.Node {ObjectMeta : metav1.ObjectMeta {
269+ Name : "node0" ,
270+ Labels : map [string ]string {"kubernetes.io/os" : "linux" ,
271+ "node-role.kubernetes.io/worker" : "" },
272+ }}
273+ Expect (k8sClient .Create (ctx , node0 )).To (Succeed ())
274+
275+ node1 := & corev1.Node {ObjectMeta : metav1.ObjectMeta {
276+ Name : "node1" ,
277+ Labels : map [string ]string {"kubernetes.io/os" : "linux" ,
278+ "node-role.kubernetes.io/worker" : "" },
279+ }}
280+ Expect (k8sClient .Create (ctx , node1 )).To (Succeed ())
281+
282+ nodeState := & sriovnetworkv1.SriovNetworkNodeState {}
283+ node := & corev1.Node {}
284+ for _ , nodeName := range []string {"node0" , "node1" } {
285+ Eventually (func (g Gomega ) {
286+ err := k8sClient .Get (context .TODO (), k8sclient.ObjectKey {Name : nodeName , Namespace : testNamespace }, nodeState )
287+ g .Expect (err ).ToNot (HaveOccurred ())
288+ }, time .Minute , time .Second ).Should (Succeed ())
289+
290+ Eventually (func (g Gomega ) {
291+ err := k8sClient .Get (context .Background (), k8sclient.ObjectKey {Name : nodeName }, node )
292+ g .Expect (err ).ToNot (HaveOccurred ())
293+ value , exist := node .Labels [consts .SriovDevicePluginLabel ]
294+ g .Expect (exist ).To (BeTrue ())
295+ g .Expect (value ).To (Equal (consts .SriovDevicePluginLabelDisabled ))
296+ }, time .Minute , time .Second ).Should (Succeed ())
297+
298+ nodeState .Status .Interfaces = sriovnetworkv1.InterfaceExts {
299+ sriovnetworkv1.InterfaceExt {
300+ Vendor : "8086" ,
301+ Driver : "i40e" ,
302+ Mtu : 1500 ,
303+ Name : "ens803f0" ,
304+ PciAddress : "0000:86:00.0" ,
305+ NumVfs : 0 ,
306+ TotalVfs : 64 ,
307+ },
308+ }
309+ err := k8sClient .Status ().Update (context .Background (), nodeState )
310+ Expect (err ).ToNot (HaveOccurred ())
311+ }
312+
313+ err := k8sClient .Delete (context .Background (), node1 , k8sclient .GracePeriodSeconds (0 ))
314+ Expect (err ).ToNot (HaveOccurred ())
315+
316+ Eventually (func (g Gomega ) {
317+ err := k8sClient .Get (context .TODO (), k8sclient.ObjectKey {Name : "node1" , Namespace : testNamespace }, nodeState )
318+ g .Expect (err ).To (HaveOccurred ())
319+ g .Expect (errors .IsNotFound (err )).To (BeTrue ())
320+ }, 30 * time .Second , time .Second ).Should (Succeed ())
321+
322+ somePolicy := & sriovnetworkv1.SriovNetworkNodePolicy {}
323+ somePolicy .SetNamespace (testNamespace )
324+ somePolicy .SetName ("some-policy" )
325+ somePolicy .Spec = sriovnetworkv1.SriovNetworkNodePolicySpec {
326+ NumVfs : 5 ,
327+ NodeSelector : map [string ]string {"node-role.kubernetes.io/worker" : "" },
328+ NicSelector : sriovnetworkv1.SriovNetworkNicSelector {Vendor : "8086" },
329+ Priority : 20 ,
330+ }
331+ Expect (k8sClient .Create (context .Background (), somePolicy )).ToNot (HaveOccurred ())
332+
333+ Eventually (func (g Gomega ) {
334+ err := k8sClient .Get (context .Background (), k8sclient.ObjectKey {Name : node0 .Name }, node0 )
335+ g .Expect (err ).ToNot (HaveOccurred ())
336+ value , exist := node0 .Labels [consts .SriovDevicePluginLabel ]
337+ g .Expect (exist ).To (BeTrue ())
338+ g .Expect (value ).To (Equal (consts .SriovDevicePluginLabelEnabled ))
339+ }, time .Minute , time .Second ).Should (Succeed ())
340+ })
341+
342+ It ("should skip label removal for nodes that doesn't exist with stale timer" , func () {
343+ err := os .Setenv ("STALE_NODE_STATE_CLEANUP_DELAY_MINUTES" , "5" )
344+ Expect (err ).ToNot (HaveOccurred ())
345+ defer func () {
346+ err = os .Unsetenv ("STALE_NODE_STATE_CLEANUP_DELAY_MINUTES" )
347+ Expect (err ).ToNot (HaveOccurred ())
348+ }()
349+
350+ node0 := & corev1.Node {ObjectMeta : metav1.ObjectMeta {
351+ Name : "node0" ,
352+ Labels : map [string ]string {"kubernetes.io/os" : "linux" ,
353+ "node-role.kubernetes.io/worker" : "" },
354+ }}
355+ Expect (k8sClient .Create (ctx , node0 )).To (Succeed ())
356+
357+ node1 := & corev1.Node {ObjectMeta : metav1.ObjectMeta {
358+ Name : "node1" ,
359+ Labels : map [string ]string {"kubernetes.io/os" : "linux" ,
360+ "node-role.kubernetes.io/worker" : "" },
361+ }}
362+ Expect (k8sClient .Create (ctx , node1 )).To (Succeed ())
363+
364+ nodeState := & sriovnetworkv1.SriovNetworkNodeState {}
365+ node := & corev1.Node {}
366+ for _ , nodeName := range []string {"node0" , "node1" } {
367+ Eventually (func (g Gomega ) {
368+ err := k8sClient .Get (context .TODO (), k8sclient.ObjectKey {Name : nodeName , Namespace : testNamespace }, nodeState )
369+ g .Expect (err ).ToNot (HaveOccurred ())
370+ }, time .Minute , time .Second ).Should (Succeed ())
371+
372+ Eventually (func (g Gomega ) {
373+ err := k8sClient .Get (context .Background (), k8sclient.ObjectKey {Name : nodeName }, node )
374+ g .Expect (err ).ToNot (HaveOccurred ())
375+ value , exist := node .Labels [consts .SriovDevicePluginLabel ]
376+ g .Expect (exist ).To (BeTrue ())
377+ g .Expect (value ).To (Equal (consts .SriovDevicePluginLabelDisabled ))
378+ }, time .Minute , time .Second ).Should (Succeed ())
379+
380+ nodeState .Status .Interfaces = sriovnetworkv1.InterfaceExts {
381+ sriovnetworkv1.InterfaceExt {
382+ Vendor : "8086" ,
383+ Driver : "i40e" ,
384+ Mtu : 1500 ,
385+ Name : "ens803f0" ,
386+ PciAddress : "0000:86:00.0" ,
387+ NumVfs : 0 ,
388+ TotalVfs : 64 ,
389+ },
390+ }
391+ err := k8sClient .Status ().Update (context .Background (), nodeState )
392+ Expect (err ).ToNot (HaveOccurred ())
393+ }
394+
395+ err = k8sClient .Delete (context .Background (), node1 , k8sclient .GracePeriodSeconds (0 ))
396+ Expect (err ).ToNot (HaveOccurred ())
397+
398+ Consistently (func (g Gomega ) {
399+ err := k8sClient .Get (context .TODO (), k8sclient.ObjectKey {Name : "node1" , Namespace : testNamespace }, nodeState )
400+ g .Expect (err ).ToNot (HaveOccurred ())
401+ }, 10 * time .Second , time .Second ).Should (Succeed ())
402+
403+ somePolicy := & sriovnetworkv1.SriovNetworkNodePolicy {}
404+ somePolicy .SetNamespace (testNamespace )
405+ somePolicy .SetName ("some-policy" )
406+ somePolicy .Spec = sriovnetworkv1.SriovNetworkNodePolicySpec {
407+ NumVfs : 5 ,
408+ NodeSelector : map [string ]string {"node-role.kubernetes.io/worker" : "" },
409+ NicSelector : sriovnetworkv1.SriovNetworkNicSelector {Vendor : "8086" },
410+ Priority : 20 ,
411+ }
412+ Expect (k8sClient .Create (context .Background (), somePolicy )).ToNot (HaveOccurred ())
413+
414+ Eventually (func (g Gomega ) {
415+ err := k8sClient .Get (context .Background (), k8sclient.ObjectKey {Name : node0 .Name }, node0 )
416+ g .Expect (err ).ToNot (HaveOccurred ())
417+ value , exist := node0 .Labels [consts .SriovDevicePluginLabel ]
418+ g .Expect (exist ).To (BeTrue ())
419+ g .Expect (value ).To (Equal (consts .SriovDevicePluginLabelEnabled ))
420+ }, time .Minute , time .Second ).Should (Succeed ())
421+ })
266422 })
267423
268424 Context ("RdmaMode" , func () {
0 commit comments