diff --git a/pkg/cache/references.go b/pkg/cache/references.go index cb16314b9..750ac48f4 100644 --- a/pkg/cache/references.go +++ b/pkg/cache/references.go @@ -10,6 +10,8 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/types" + synccommon "github.com/argoproj/gitops-engine/pkg/sync/common" + syncresource "github.com/argoproj/gitops-engine/pkg/sync/resource" "github.com/argoproj/gitops-engine/pkg/utils/kube" ) @@ -23,6 +25,16 @@ func (c *clusterCache) resolveResourceReferences(un *unstructured.Unstructured) ownerRefs := un.GetOwnerReferences() gvk := un.GroupVersionKind() + if syncresource.HasAnnotationOption(un, synccommon.AnnotationSyncOptions, synccommon.SyncOptionControllerReferencesOnly) { + controllerOwnerRefs := []metav1.OwnerReference{} + for _, ownerRef := range un.GetOwnerReferences() { + if ownerRef.Controller != nil && *ownerRef.Controller { + controllerOwnerRefs = append(controllerOwnerRefs, ownerRef) + } + } + return controllerOwnerRefs, isInferredParentOf + } + switch { // Special case for endpoint. Remove after https://github.com/kubernetes/kubernetes/issues/28483 is fixed case gvk.Group == "" && gvk.Kind == kube.EndpointsKind && len(ownerRefs) == 0: diff --git a/pkg/sync/common/types.go b/pkg/sync/common/types.go index 00976ff5d..b3c777bc7 100644 --- a/pkg/sync/common/types.go +++ b/pkg/sync/common/types.go @@ -50,6 +50,8 @@ const ( SyncOptionClientSideApplyMigration = "ClientSideApplyMigration=true" // Sync option that disables client-side apply migration SyncOptionDisableClientSideApplyMigration = "ClientSideApplyMigration=false" + // Sync option that means only controller owner references are respected + SyncOptionControllerReferencesOnly = "ControllerReferencesOnly=true" // Default field manager for client-side apply migration DefaultClientSideApplyMigrationManager = "kubectl-client-side-apply"