@@ -45,6 +45,7 @@ import (
45
45
"k8s.io/client-go/metadata/metadatalister"
46
46
"k8s.io/client-go/tools/cache"
47
47
"k8s.io/client-go/tools/clientcmd"
48
+ "k8s.io/client-go/tools/pager"
48
49
"k8s.io/client-go/tools/record"
49
50
"k8s.io/client-go/util/retry"
50
51
"k8s.io/client-go/util/workqueue"
@@ -2230,15 +2231,15 @@ func validateExistingCRs(dynamicClient dynamic.Interface, gr schema.GroupResourc
2230
2231
return fmt .Errorf ("error creating validator for schema version %s: %s" , version , err )
2231
2232
}
2232
2233
gvr := schema.GroupVersionResource {Group : gr .Group , Version : version , Resource : gr .Resource }
2233
- crList , err := dynamicClient .Resource (gvr ).List (context .TODO (), metav1.ListOptions {})
2234
- if err != nil {
2235
- return fmt .Errorf ("error listing resources in GroupVersionResource %#v: %s" , gvr , err )
2236
- }
2237
-
2238
- // validate each CR against this version schema
2239
- for _ , cr := range crList .Items {
2240
- err = validation .ValidateCustomResource (field .NewPath ("" ), cr .UnstructuredContent (), validator ).ToAggregate ()
2234
+ pager := pager .New (pager .SimplePageFunc (func (opts metav1.ListOptions ) (runtime.Object , error ) {
2235
+ return dynamicClient .Resource (gvr ).List (context .TODO (), opts )
2236
+ }))
2237
+ validationFn := func (obj runtime.Object ) error {
2238
+ err = validation .ValidateCustomResource (field .NewPath ("" ), obj , validator ).ToAggregate ()
2241
2239
if err != nil {
2240
+ // lister will only provide unstructured objects as runtime.Object, so this should never fail to convert
2241
+ // if it does, it's a programming error
2242
+ cr := obj .(* unstructured.Unstructured )
2242
2243
var namespacedName string
2243
2244
if cr .GetNamespace () == "" {
2244
2245
namespacedName = cr .GetName ()
@@ -2247,6 +2248,11 @@ func validateExistingCRs(dynamicClient dynamic.Interface, gr schema.GroupResourc
2247
2248
}
2248
2249
return validationError {fmt .Errorf ("error validating %s %q: updated validation is too restrictive: %v" , cr .GroupVersionKind (), namespacedName , err )}
2249
2250
}
2251
+ return nil
2252
+ }
2253
+ err = pager .EachListItem (context .Background (), metav1.ListOptions {}, validationFn )
2254
+ if err != nil {
2255
+ return err
2250
2256
}
2251
2257
}
2252
2258
return nil
0 commit comments