Skip to content

Commit

Permalink
Update finalizer of ResourceExport to be domain-qualified (#6742)
Browse files Browse the repository at this point in the history
K8s 1.31 expects a certain format for finalizers, and gives a warning otherwise.
We rename the finalizer for Multicluster ResourceExport to match this format.

Fixes #6741

Signed-off-by: Dyanngg <[email protected]>
  • Loading branch information
Dyanngg authored Oct 22, 2024
1 parent 42a50ff commit 5062aae
Show file tree
Hide file tree
Showing 9 changed files with 152 additions and 99 deletions.
3 changes: 2 additions & 1 deletion multicluster/apis/multicluster/constants/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ const (
ServiceImportKind = "ServiceImport"
ClusterInfoKind = "ClusterInfo"

ResourceExportFinalizer = "resourceexport.finalizers.antrea.io"
LegacyResourceExportFinalizer = "resourceexport.finalizers.antrea.io"
ResourceExportFinalizer = "resourceexport.antrea.io/finalizer"

// ResourceExport labels.
SourceName = "sourceName"
Expand Down
18 changes: 8 additions & 10 deletions multicluster/apis/multicluster/v1alpha1/resourceexport_webhook.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ limitations under the License.
package v1alpha1

import (
"slices"

"k8s.io/klog/v2"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/webhook"
Expand Down Expand Up @@ -53,16 +55,12 @@ func (r *ResourceExport) Default() {
if kindLabelVal, exists := r.Labels[constants.SourceKind]; !exists || kindLabelVal != constants.AntreaClusterNetworkPolicyKind {
r.Labels[constants.SourceKind] = constants.AntreaClusterNetworkPolicyKind
}
if r.DeletionTimestamp.IsZero() && !stringExistsInSlice(r.Finalizers, constants.ResourceExportFinalizer) {
// Add domain qualified finalizer for ResourceExports to avoid Kubernetes from reporting errors:
// "prefer a domain-qualified finalizer name to avoid accidental conflicts with other finalizer writers"
// https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#finalizers
// Note for ResourceExports created before Antrea v2.2, LegacyResourceExportFinalizer may still be present
// and needs to be removed before a ResourceExport is deleted.
if r.DeletionTimestamp.IsZero() && !slices.Contains(r.Finalizers, constants.ResourceExportFinalizer) {
r.Finalizers = append(r.Finalizers, constants.ResourceExportFinalizer)
}
}

func stringExistsInSlice(slice []string, s string) bool {
for _, item := range slice {
if item == s {
return true
}
}
return false
}
19 changes: 0 additions & 19 deletions multicluster/controllers/multicluster/common/helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,25 +42,6 @@ func ToMCResourceName(originalResourceName string) string {
return AntreaMCSPrefix + originalResourceName
}

func StringExistsInSlice(slice []string, s string) bool {
for _, item := range slice {
if item == s {
return true
}
}
return false
}

func RemoveStringFromSlice(slice []string, s string) (result []string) {
for _, item := range slice {
if item == s {
continue
}
result = append(result, item)
}
return
}

func GetServiceEndpointSubset(svc *corev1.Service) corev1.EndpointSubset {
var epSubset corev1.EndpointSubset
for _, ip := range svc.Spec.ClusterIPs {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,12 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/klog/v2"
"k8s.io/utils/strings/slices"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client"

"antrea.io/antrea/multicluster/apis/multicluster/constants"
mcsv1alpha1 "antrea.io/antrea/multicluster/apis/multicluster/v1alpha1"
"antrea.io/antrea/multicluster/controllers/multicluster/common"
)

func (r *ResourceExportReconciler) handleClusterInfo(ctx context.Context, req ctrl.Request, resExport mcsv1alpha1.ResourceExport) (ctrl.Result, error) {
Expand All @@ -41,7 +41,7 @@ func (r *ResourceExportReconciler) handleClusterInfo(ctx context.Context, req ct
}

if !resExport.DeletionTimestamp.IsZero() {
if common.StringExistsInSlice(resExport.Finalizers, constants.ResourceExportFinalizer) {
if slices.Contains(resExport.Finalizers, constants.LegacyResourceExportFinalizer) || slices.Contains(resExport.Finalizers, constants.ResourceExportFinalizer) {
err := r.Client.Delete(ctx, resImport, &client.DeleteOptions{})
if err == nil || apierrors.IsNotFound(err) {
return r.deleteResourceExport(&resExport)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ package leader
import (
"context"
"fmt"
"slices"
"sync"
"time"

Expand Down Expand Up @@ -93,7 +94,7 @@ func (r *MemberClusterAnnounceReconciler) Reconcile(ctx context.Context, req ctr
}

r.addOrUpdateMemberStatus(memberID)
if common.StringExistsInSlice(memberAnnounce.Finalizers, finalizer) {
if slices.Contains(memberAnnounce.Finalizers, finalizer) {
return ctrl.Result{}, nil
}
klog.InfoS("Adding finalizer to MemberClusterAnnounce", "MemberClusterAnnounce", klog.KObj(memberAnnounce))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package leader
import (
"context"
"fmt"
"slices"
"strings"
"time"

Expand Down Expand Up @@ -101,7 +102,7 @@ func (r *ResourceExportReconciler) Reconcile(ctx context.Context, req ctrl.Reque
// clean up any replicated resources like ResourceImport.
// For more details about using Finalizers, please refer to https://book.kubebuilder.io/reference/using-finalizers.html.
if !resExport.DeletionTimestamp.IsZero() {
if common.StringExistsInSlice(resExport.Finalizers, constants.ResourceExportFinalizer) {
if slices.Contains(resExport.Finalizers, constants.LegacyResourceExportFinalizer) || slices.Contains(resExport.Finalizers, constants.ResourceExportFinalizer) {
err := r.handleDeleteEvent(ctx, &resExport)
if err != nil {
return ctrl.Result{}, err
Expand Down Expand Up @@ -461,7 +462,10 @@ func (r *ResourceExportReconciler) updateResourceExportStatus(resExport *mcsv1al

// deleteResourceExport removes ResourceExport finalizer string and updates it, so Kubernetes can complete deletion.
func (r *ResourceExportReconciler) deleteResourceExport(resExport *mcsv1alpha1.ResourceExport) (ctrl.Result, error) {
resExport.SetFinalizers(common.RemoveStringFromSlice(resExport.Finalizers, constants.ResourceExportFinalizer))
finalizers := slices.DeleteFunc(slices.Clone(resExport.Finalizers), func(s string) bool {
return s == constants.LegacyResourceExportFinalizer || s == constants.ResourceExportFinalizer
})
resExport.SetFinalizers(finalizers)
if err := r.Client.Update(context.Background(), resExport, &client.UpdateOptions{}); err != nil {
return ctrl.Result{}, err
}
Expand Down
Loading

0 comments on commit 5062aae

Please sign in to comment.