@@ -66,6 +66,8 @@ type CoreResourceEnqueueTestCase struct {
66
66
InitialCSIDrivers []* storagev1.CSIDriver
67
67
// InitialStorageCapacities are the list of CSIStorageCapacity to be created at first.
68
68
InitialStorageCapacities []* storagev1.CSIStorageCapacity
69
+ // InitialVolumeAttachment is the list of VolumeAttachment to be created at first.
70
+ InitialVolumeAttachment []* storagev1.VolumeAttachment
69
71
// Pods are the list of Pods to be created.
70
72
// All of them are expected to be unschedulable at first.
71
73
Pods []* v1.Pod
@@ -1977,7 +1979,7 @@ var CoreResourceEnqueueTestCases = []*CoreResourceEnqueueTestCase{
1977
1979
EnableSchedulingQueueHint : sets .New (true ),
1978
1980
},
1979
1981
{
1980
- Name : "Pod rejected the CSI plugin is requeued when the CSINode is added" ,
1982
+ Name : "Pod rejected the CSI NodeVolumeLimits plugin is requeued when the CSINode is added" ,
1981
1983
InitialNodes : []* v1.Node {st .MakeNode ().Name ("fake-node" ).Label ("node" , "fake-node" ).Obj ()},
1982
1984
InitialPVs : []* v1.PersistentVolume {
1983
1985
st .MakePersistentVolume ().Name ("pv1" ).
@@ -2016,7 +2018,7 @@ var CoreResourceEnqueueTestCases = []*CoreResourceEnqueueTestCase{
2016
2018
EnableSchedulingQueueHint : sets .New (true ),
2017
2019
},
2018
2020
{
2019
- Name : "Pod rejected with PVC by the CSI plugin is requeued when the pod having related PVC is deleted" ,
2021
+ Name : "Pod rejected with PVC by the CSI NodeVolumeLimits plugin is requeued when the pod having related PVC is deleted" ,
2020
2022
InitialNodes : []* v1.Node {st .MakeNode ().Name ("fake-node" ).Label ("node" , "fake-node" ).Obj ()},
2021
2023
InitialPVs : []* v1.PersistentVolume {
2022
2024
st .MakePersistentVolume ().Name ("pv1" ).
@@ -2069,7 +2071,7 @@ var CoreResourceEnqueueTestCases = []*CoreResourceEnqueueTestCase{
2069
2071
WantRequeuedPods : sets .New ("pod2" ),
2070
2072
},
2071
2073
{
2072
- Name : "Pod rejected with PVC by the CSI plugin is requeued when the related PVC is added" ,
2074
+ Name : "Pod rejected with PVC by the CSI NodeVolumeLimits plugin is requeued when the related PVC is added" ,
2073
2075
InitialNodes : []* v1.Node {st .MakeNode ().Name ("fake-node" ).Label ("node" , "fake-node" ).Obj ()},
2074
2076
EnablePlugins : []string {"VolumeBinding" },
2075
2077
InitialPVs : []* v1.PersistentVolume {
@@ -2123,6 +2125,138 @@ var CoreResourceEnqueueTestCases = []*CoreResourceEnqueueTestCase{
2123
2125
WantRequeuedPods : sets .New ("pod2" ),
2124
2126
EnableSchedulingQueueHint : sets .New (true ),
2125
2127
},
2128
+ {
2129
+ Name : "Pod with PVC rejected the CSI NodeVolumeLimits plugin is requeued when the VolumeAttachment is deleted" ,
2130
+ InitialNodes : []* v1.Node {st .MakeNode ().Name ("fake-node" ).Label ("node" , "fake-node" ).Obj ()},
2131
+ InitialPVs : []* v1.PersistentVolume {
2132
+ st .MakePersistentVolume ().Name ("pv1" ).
2133
+ AccessModes ([]v1.PersistentVolumeAccessMode {v1 .ReadWriteMany }).
2134
+ Capacity (v1.ResourceList {v1 .ResourceStorage : resource .MustParse ("1Mi" )}).
2135
+ PersistentVolumeSource (v1.PersistentVolumeSource {CSI : & v1.CSIPersistentVolumeSource {Driver : "csidriver" , VolumeHandle : "volumehandle" }}).
2136
+ Obj ()},
2137
+ InitialPVCs : []* v1.PersistentVolumeClaim {
2138
+ st .MakePersistentVolumeClaim ().
2139
+ Name ("pvc1" ).
2140
+ Annotation (volume .AnnBindCompleted , "true" ).
2141
+ VolumeName ("pv1" ).
2142
+ AccessModes ([]v1.PersistentVolumeAccessMode {v1 .ReadWriteMany }).
2143
+ Resources (v1.VolumeResourceRequirements {Requests : v1.ResourceList {v1 .ResourceStorage : resource .MustParse ("1Mi" )}}).
2144
+ Obj (),
2145
+ },
2146
+ InitialVolumeAttachment : []* storagev1.VolumeAttachment {
2147
+ st .MakeVolumeAttachment ().Name ("volumeattachment1" ).
2148
+ NodeName ("fake-node" ).
2149
+ Attacher ("test.storage.gke.io" ).
2150
+ Source (storagev1.VolumeAttachmentSource {PersistentVolumeName : ptr .To ("pv1" )}).
2151
+ Attached (true ).
2152
+ Obj (),
2153
+ },
2154
+ InitialCSIDrivers : []* storagev1.CSIDriver {
2155
+ st .MakeCSIDriver ().Name ("csidriver" ).StorageCapacity (ptr .To (true )).Obj (),
2156
+ },
2157
+ InitialCSINodes : []* storagev1.CSINode {
2158
+ st .MakeCSINode ().Name ("fake-node" ).Driver (storagev1.CSINodeDriver {Name : "csidriver" , NodeID : "fake-node" , Allocatable : & storagev1.VolumeNodeResources {
2159
+ Count : ptr .To (int32 (0 )),
2160
+ }}).Obj (),
2161
+ },
2162
+ Pods : []* v1.Pod {
2163
+ st .MakePod ().Name ("pod1" ).Container ("image" ).PVC ("pvc1" ).Obj (),
2164
+ },
2165
+ TriggerFn : func (testCtx * testutils.TestContext ) (map [framework.ClusterEvent ]uint64 , error ) {
2166
+ if err := testCtx .ClientSet .StorageV1 ().VolumeAttachments ().Delete (testCtx .Ctx , "volumeattachment1" , metav1.DeleteOptions {}); err != nil {
2167
+ return nil , fmt .Errorf ("failed to delete VolumeAttachment: %w" , err )
2168
+ }
2169
+ return map [framework.ClusterEvent ]uint64 {{Resource : framework .VolumeAttachment , ActionType : framework .Delete }: 1 }, nil
2170
+ },
2171
+ WantRequeuedPods : sets .New ("pod1" ),
2172
+ EnableSchedulingQueueHint : sets .New (true ),
2173
+ },
2174
+ {
2175
+ Name : "Pod with Inline Migratable volume (AWSEBSDriver and GCEPDDriver) rejected the CSI NodeVolumeLimits plugin is requeued (only AWSEBSDriver) when the VolumeAttachment is deleted" ,
2176
+ InitialNodes : []* v1.Node {
2177
+ st .MakeNode ().Name ("fake-node" ).Label ("node" , "fake-node" ).Obj (),
2178
+ },
2179
+ InitialPVs : []* v1.PersistentVolume {
2180
+ st .MakePersistentVolume ().Name ("pv1" ).
2181
+ AccessModes ([]v1.PersistentVolumeAccessMode {v1 .ReadWriteMany }).
2182
+ Capacity (v1.ResourceList {v1 .ResourceStorage : resource .MustParse ("1Mi" )}).
2183
+ PersistentVolumeSource (v1.PersistentVolumeSource {CSI : & v1.CSIPersistentVolumeSource {Driver : "ebs.csi.aws.com" , VolumeHandle : "volumehandle" }}).
2184
+ Obj (),
2185
+ st .MakePersistentVolume ().Name ("pv2" ).
2186
+ AccessModes ([]v1.PersistentVolumeAccessMode {v1 .ReadWriteMany }).
2187
+ Capacity (v1.ResourceList {v1 .ResourceStorage : resource .MustParse ("1Mi" )}).
2188
+ PersistentVolumeSource (v1.PersistentVolumeSource {CSI : & v1.CSIPersistentVolumeSource {Driver : "pd.csi.storage.gke.io" , VolumeHandle : "volumehandle" }}).
2189
+ Obj (),
2190
+ },
2191
+ InitialPVCs : []* v1.PersistentVolumeClaim {
2192
+ st .MakePersistentVolumeClaim ().
2193
+ Name ("pvc1" ).
2194
+ Annotation (volume .AnnBindCompleted , "true" ).
2195
+ VolumeName ("pv1" ).
2196
+ AccessModes ([]v1.PersistentVolumeAccessMode {v1 .ReadWriteMany }).
2197
+ Resources (v1.VolumeResourceRequirements {Requests : v1.ResourceList {v1 .ResourceStorage : resource .MustParse ("1Mi" )}}).
2198
+ Obj (),
2199
+ st .MakePersistentVolumeClaim ().
2200
+ Name ("pvc2" ).
2201
+ Annotation (volume .AnnBindCompleted , "true" ).
2202
+ VolumeName ("pv2" ).
2203
+ AccessModes ([]v1.PersistentVolumeAccessMode {v1 .ReadWriteMany }).
2204
+ Resources (v1.VolumeResourceRequirements {Requests : v1.ResourceList {v1 .ResourceStorage : resource .MustParse ("1Mi" )}}).
2205
+ Obj (),
2206
+ },
2207
+ InitialVolumeAttachment : []* storagev1.VolumeAttachment {
2208
+ st .MakeVolumeAttachment ().Name ("volumeattachment1" ).
2209
+ NodeName ("fake-node" ).
2210
+ Attacher ("ebs.csi.aws.com" ).
2211
+ Source (storagev1.VolumeAttachmentSource {PersistentVolumeName : ptr .To ("pv1" )}).
2212
+ Attached (true ).
2213
+ Obj (),
2214
+ st .MakeVolumeAttachment ().Name ("volumeattachment2" ).
2215
+ NodeName ("fake-node" ).
2216
+ Attacher ("pd.csi.storage.gke.io" ).
2217
+ Source (storagev1.VolumeAttachmentSource {PersistentVolumeName : ptr .To ("pv2" )}).
2218
+ Attached (true ).
2219
+ Obj (),
2220
+ },
2221
+ InitialCSINodes : []* storagev1.CSINode {
2222
+ st .MakeCSINode ().Name ("fake-node" ).
2223
+ Driver (storagev1.CSINodeDriver {Name : "ebs.csi.aws.com" , NodeID : "fake-node" , Allocatable : & storagev1.VolumeNodeResources {
2224
+ Count : ptr .To (int32 (0 ))}}).
2225
+ Driver (storagev1.CSINodeDriver {Name : "pd.csi.storage.gke.io" , NodeID : "fake-node" , Allocatable : & storagev1.VolumeNodeResources {
2226
+ Count : ptr .To (int32 (0 ))}}).
2227
+ Obj (),
2228
+ },
2229
+ Pods : []* v1.Pod {
2230
+ st .MakePod ().Name ("pod1" ).Container ("image" ).Volume (
2231
+ v1.Volume {
2232
+ Name : "vol1" ,
2233
+ VolumeSource : v1.VolumeSource {
2234
+ AWSElasticBlockStore : & v1.AWSElasticBlockStoreVolumeSource {
2235
+ VolumeID : "pv1" ,
2236
+ },
2237
+ },
2238
+ },
2239
+ ).Obj (),
2240
+ st .MakePod ().Name ("pod2" ).Container ("image" ).Volume (
2241
+ v1.Volume {
2242
+ Name : "vol2" ,
2243
+ VolumeSource : v1.VolumeSource {
2244
+ GCEPersistentDisk : & v1.GCEPersistentDiskVolumeSource {
2245
+ PDName : "pv2" ,
2246
+ },
2247
+ },
2248
+ },
2249
+ ).Obj (),
2250
+ },
2251
+ TriggerFn : func (testCtx * testutils.TestContext ) (map [framework.ClusterEvent ]uint64 , error ) {
2252
+ if err := testCtx .ClientSet .StorageV1 ().VolumeAttachments ().Delete (testCtx .Ctx , "volumeattachment1" , metav1.DeleteOptions {}); err != nil {
2253
+ return nil , fmt .Errorf ("failed to delete VolumeAttachment: %w" , err )
2254
+ }
2255
+ return map [framework.ClusterEvent ]uint64 {{Resource : framework .VolumeAttachment , ActionType : framework .Delete }: 1 }, nil
2256
+ },
2257
+ WantRequeuedPods : sets .New ("pod1" ),
2258
+ EnableSchedulingQueueHint : sets .New (true ),
2259
+ },
2126
2260
}
2127
2261
2128
2262
// TestCoreResourceEnqueue verify Pods failed by in-tree default plugins can be
@@ -2191,6 +2325,12 @@ func RunTestCoreResourceEnqueue(t *testing.T, tt *CoreResourceEnqueueTestCase) {
2191
2325
}
2192
2326
}
2193
2327
2328
+ for _ , va := range tt .InitialVolumeAttachment {
2329
+ if _ , err := cs .StorageV1 ().VolumeAttachments ().Create (ctx , va , metav1.CreateOptions {}); err != nil {
2330
+ t .Fatalf ("Failed to create a VolumeAttachment %q: %v" , va .Name , err )
2331
+ }
2332
+ }
2333
+
2194
2334
for _ , csidriver := range tt .InitialCSIDrivers {
2195
2335
if _ , err := cs .StorageV1 ().CSIDrivers ().Create (ctx , csidriver , metav1.CreateOptions {}); err != nil {
2196
2336
t .Fatalf ("Failed to create a CSIDriver %q: %v" , csidriver .Name , err )
0 commit comments