@@ -40,14 +40,16 @@ var (
4040)
4141
4242type clusterResourceOverrideValidator struct {
43- client client.Client
43+ // Note: we have to use the uncached client here to avoid getting stale data
44+ // since we need to guarantee that a resource cannot be selected by multiple overrides.
45+ client client.Reader
4446 decoder webhook.AdmissionDecoder
4547}
4648
4749// Add registers the webhook for K8s bulit-in object types.
4850func Add (mgr manager.Manager ) error {
4951 hookServer := mgr .GetWebhookServer ()
50- hookServer .Register (ValidationPath , & webhook.Admission {Handler : & clusterResourceOverrideValidator {mgr .GetClient (), admission .NewDecoder (mgr .GetScheme ())}})
52+ hookServer .Register (ValidationPath , & webhook.Admission {Handler : & clusterResourceOverrideValidator {mgr .GetAPIReader (), admission .NewDecoder (mgr .GetScheme ())}})
5153 return nil
5254}
5355
@@ -80,7 +82,7 @@ func (v *clusterResourceOverrideValidator) Handle(ctx context.Context, req admis
8082}
8183
8284// listClusterResourceOverride returns a list of cluster resource overrides.
83- func listClusterResourceOverride (ctx context.Context , client client.Client ) (* placementv1beta1.ClusterResourceOverrideList , error ) {
85+ func listClusterResourceOverride (ctx context.Context , client client.Reader ) (* placementv1beta1.ClusterResourceOverrideList , error ) {
8486 croList := & placementv1beta1.ClusterResourceOverrideList {}
8587 if err := client .List (ctx , croList ); err != nil {
8688 klog .ErrorS (err , "Failed to list clusterResourceOverrides when validating" )
0 commit comments