Skip to content

Commit 3093c91

Browse files
ryanzhang-ossRyan Zhang
andauthored
fix the resource webhook logic and fix related flaky e2e (#1020)
Co-authored-by: Ryan Zhang <[email protected]>
1 parent 20de7b7 commit 3093c91

File tree

3 files changed

+32
-49
lines changed

3 files changed

+32
-49
lines changed

pkg/utils/validator/resourceoverride.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,11 @@ func validateOverridePolicy(policy *fleetv1alpha1.OverridePolicy) error {
9292
for _, selector := range rule.ClusterSelector.ClusterSelectorTerms {
9393
// Check that only label selector is supported
9494
if selector.PropertySelector != nil || selector.PropertySorter != nil {
95-
allErr = append(allErr, fmt.Errorf("invalid clusterSelector %v: only labelSelector is supported", selector))
95+
allErr = append(allErr, fmt.Errorf("invalid clusterSelector %+v: only labelSelector is supported", selector))
9696
continue
9797
}
9898
if selector.LabelSelector == nil {
99-
allErr = append(allErr, fmt.Errorf("invalid clusterSelector %v: labelSelector is required", selector))
99+
allErr = append(allErr, fmt.Errorf("invalid clusterSelector %+v: labelSelector is required", selector))
100100
} else if err := validateLabelSelector(selector.LabelSelector, "cluster selector"); err != nil {
101101
allErr = append(allErr, err)
102102
}

pkg/webhook/resourceoverride/resourceoverride_validating_webhook.go

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,11 @@ func (v *resourceOverrideValidator) Handle(ctx context.Context, req admission.Re
4949
return admission.Errored(http.StatusBadRequest, err)
5050
}
5151

52-
// List of resource overrides.
53-
roList, err := listResourceOverride(ctx, v.client)
54-
if err != nil {
55-
return admission.Errored(http.StatusBadRequest, err)
52+
// List all the resource overrides in the same namespace
53+
roList := &fleetv1alpha1.ResourceOverrideList{}
54+
if err := v.client.List(ctx, roList, client.InNamespace(ro.Namespace)); err != nil {
55+
klog.ErrorS(err, "Failed to list resourceOverrides when validating")
56+
return admission.Errored(http.StatusInternalServerError, fmt.Errorf("failed to list resourceOverrides, please retry the request: %w", err))
5657
}
5758

5859
// Check if the override count limit has been reached, if there are at most 100 resource overrides.
@@ -67,13 +68,3 @@ func (v *resourceOverrideValidator) Handle(ctx context.Context, req admission.Re
6768
}
6869
return admission.Allowed("resourceOverride has valid fields")
6970
}
70-
71-
// listResourceOverride returns a list of cluster resource overrides.
72-
func listResourceOverride(ctx context.Context, client client.Client) (*fleetv1alpha1.ResourceOverrideList, error) {
73-
roList := &fleetv1alpha1.ResourceOverrideList{}
74-
if err := client.List(ctx, roList); err != nil {
75-
klog.ErrorS(err, "Failed to list resourceOverrides when validating")
76-
return nil, fmt.Errorf("failed to list resourceOverrides, please retry the request: %w", err)
77-
}
78-
return roList, nil
79-
}

test/e2e/webhook_test.go

Lines changed: 25 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1197,47 +1197,39 @@ var _ = Describe("webhook tests for ResourceOverride UPDATE operations", Ordered
11971197
})
11981198

11991199
It("should deny update RO with invalid resource override", func() {
1200-
Eventually(func(g Gomega) error {
1201-
By("creating a new resource override")
1202-
ro1 := &placementv1alpha1.ResourceOverride{
1203-
ObjectMeta: metav1.ObjectMeta{
1204-
Name: fmt.Sprintf("test-ro-%d", GinkgoParallelProcess()),
1205-
Namespace: roNamespace,
1206-
},
1207-
Spec: placementv1alpha1.ResourceOverrideSpec{
1208-
ResourceSelectors: []placementv1alpha1.ResourceSelector{
1200+
newSelector := placementv1alpha1.ResourceSelector{
1201+
Group: "apps",
1202+
Kind: "Deployment",
1203+
Version: "v1",
1204+
Name: "test-deployment-x",
1205+
}
1206+
ro1 := &placementv1alpha1.ResourceOverride{
1207+
ObjectMeta: metav1.ObjectMeta{
1208+
Name: fmt.Sprintf("test-ro-%d", GinkgoParallelProcess()),
1209+
Namespace: roNamespace,
1210+
},
1211+
Spec: placementv1alpha1.ResourceOverrideSpec{
1212+
Policy: &placementv1alpha1.OverridePolicy{
1213+
OverrideRules: []placementv1alpha1.OverrideRule{
12091214
{
1210-
Group: "apps",
1211-
Kind: "Deployment",
1212-
Version: "v1",
1213-
Name: "test-deployment-1",
1214-
},
1215-
},
1216-
Policy: &placementv1alpha1.OverridePolicy{
1217-
OverrideRules: []placementv1alpha1.OverrideRule{
1218-
{
1219-
ClusterSelector: nil,
1220-
JSONPatchOverrides: []placementv1alpha1.JSONPatchOverride{
1221-
{
1222-
Operator: placementv1alpha1.JSONPatchOverrideOpRemove,
1223-
Path: "/meta/labels/test-key",
1224-
},
1215+
ClusterSelector: nil,
1216+
JSONPatchOverrides: []placementv1alpha1.JSONPatchOverride{
1217+
{
1218+
Operator: placementv1alpha1.JSONPatchOverrideOpRemove,
1219+
Path: "/meta/labels/test-key",
12251220
},
12261221
},
12271222
},
12281223
},
12291224
},
1230-
}
1231-
Expect(hubClient.Create(ctx, ro1)).To(Succeed(), "Failed to create RO %s", ro1.Name)
1232-
1225+
},
1226+
}
1227+
ro1.Spec.ResourceSelectors = append(ro1.Spec.ResourceSelectors, newSelector)
1228+
By("creating a new resource override")
1229+
Expect(hubClient.Create(ctx, ro1)).To(Succeed(), "Failed to create RO %s", ro1.Name)
1230+
Eventually(func(g Gomega) error {
12331231
var ro placementv1alpha1.ResourceOverride
12341232
g.Expect(hubClient.Get(ctx, types.NamespacedName{Name: roName, Namespace: roNamespace}, &ro)).Should(Succeed())
1235-
newSelector := placementv1alpha1.ResourceSelector{
1236-
Group: "apps",
1237-
Kind: "Deployment",
1238-
Version: "v1",
1239-
Name: fmt.Sprintf("test-deployment-%d", 1),
1240-
}
12411233
ro.Spec.ResourceSelectors = append(ro.Spec.ResourceSelectors, newSelector)
12421234
clusterSelectorTerm := placementv1beta1.ClusterSelectorTerm{
12431235
PropertySelector: &placementv1beta1.PropertySelector{

0 commit comments

Comments
 (0)