Skip to content

Commit 83bc664

Browse files
authored
fix: use the uncached client when validating override (#351)
Signed-off-by: Zhiying Lin <zhiyingl456@gmail.com>
1 parent 2b1e9a7 commit 83bc664

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

pkg/webhook/clusterresourceoverride/clusterresourceoverride_validating_webhook.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,16 @@ var (
4040
)
4141

4242
type 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.
4850
func 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")

pkg/webhook/resourceoverride/resourceoverride_validating_webhook.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,16 @@ var (
4040
)
4141

4242
type resourceOverrideValidator 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.
4850
func Add(mgr manager.Manager) error {
4951
hookServer := mgr.GetWebhookServer()
50-
hookServer.Register(ValidationPath, &webhook.Admission{Handler: &resourceOverrideValidator{mgr.GetClient(), admission.NewDecoder(mgr.GetScheme())}})
52+
hookServer.Register(ValidationPath, &webhook.Admission{Handler: &resourceOverrideValidator{mgr.GetAPIReader(), admission.NewDecoder(mgr.GetScheme())}})
5153
return nil
5254
}
5355

0 commit comments

Comments
 (0)