@@ -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"
@@ -2215,15 +2216,15 @@ func validateExistingCRs(dynamicClient dynamic.Interface, gr schema.GroupResourc
2215
2216
return fmt .Errorf ("error creating validator for schema version %s: %s" , version , err )
2216
2217
}
2217
2218
gvr := schema.GroupVersionResource {Group : gr .Group , Version : version , Resource : gr .Resource }
2218
- crList , err := dynamicClient .Resource (gvr ).List (context .TODO (), metav1.ListOptions {})
2219
- if err != nil {
2220
- return fmt .Errorf ("error listing resources in GroupVersionResource %#v: %s" , gvr , err )
2221
- }
2222
-
2223
- // validate each CR against this version schema
2224
- for _ , cr := range crList .Items {
2225
- err = validation .ValidateCustomResource (field .NewPath ("" ), cr .UnstructuredContent (), validator ).ToAggregate ()
2219
+ pager := pager .New (pager .SimplePageFunc (func (opts metav1.ListOptions ) (runtime.Object , error ) {
2220
+ return dynamicClient .Resource (gvr ).List (context .TODO (), opts )
2221
+ }))
2222
+ validationFn := func (obj runtime.Object ) error {
2223
+ err = validation .ValidateCustomResource (field .NewPath ("" ), obj , validator ).ToAggregate ()
2226
2224
if err != nil {
2225
+ // lister will only provide unstructured objects as runtime.Object, so this should never fail to convert
2226
+ // if it does, it's a programming error
2227
+ cr := obj .(* unstructured.Unstructured )
2227
2228
var namespacedName string
2228
2229
if cr .GetNamespace () == "" {
2229
2230
namespacedName = cr .GetName ()
@@ -2232,6 +2233,11 @@ func validateExistingCRs(dynamicClient dynamic.Interface, gr schema.GroupResourc
2232
2233
}
2233
2234
return validationError {fmt .Errorf ("error validating %s %q: updated validation is too restrictive: %v" , cr .GroupVersionKind (), namespacedName , err )}
2234
2235
}
2236
+ return nil
2237
+ }
2238
+ err = pager .EachListItem (context .Background (), metav1.ListOptions {}, validationFn )
2239
+ if err != nil {
2240
+ return err
2235
2241
}
2236
2242
}
2237
2243
return nil
0 commit comments