open-cluster-management.io/governance-policy-propagator@v0.13.0/controllers/common/policy_mapper.go (about)

     1  // Copyright (c) 2021 Red Hat, Inc.
     2  // Copyright Contributors to the Open Cluster Management project
     3  
     4  package common
     5  
     6  import (
     7  	"context"
     8  
     9  	"k8s.io/apimachinery/pkg/types"
    10  	ctrl "sigs.k8s.io/controller-runtime"
    11  	"sigs.k8s.io/controller-runtime/pkg/client"
    12  	"sigs.k8s.io/controller-runtime/pkg/handler"
    13  	"sigs.k8s.io/controller-runtime/pkg/reconcile"
    14  )
    15  
    16  // PolicyMapper looks at object and returns a slice of reconcile.Request to reconcile
    17  // owners of object from label: policy.open-cluster-management.io/root-policy
    18  func MapToRootPolicy(c client.Client) handler.MapFunc {
    19  	return func(ctx context.Context, object client.Object) []reconcile.Request {
    20  		log := ctrl.Log.WithValues("name", object.GetName(), "namespace", object.GetNamespace())
    21  
    22  		log.V(2).Info("Reconcile request for a policy")
    23  
    24  		isReplicated, err := IsReplicatedPolicy(ctx, c, object)
    25  		if err != nil {
    26  			log.Error(err, "Failed to determine if this queued policy is a replicated policy")
    27  
    28  			return nil
    29  		}
    30  
    31  		var name string
    32  		var namespace string
    33  
    34  		if isReplicated {
    35  			log.V(2).Info("Found reconciliation request from replicated policy")
    36  
    37  			rootPlcName := object.GetLabels()[RootPolicyLabel]
    38  			// Skip error checking since IsReplicatedPolicy verified this already
    39  			name, namespace, _ = ParseRootPolicyLabel(rootPlcName)
    40  		} else {
    41  			log.V(2).Info("Found reconciliation request from root policy")
    42  
    43  			name = object.GetName()
    44  			namespace = object.GetNamespace()
    45  		}
    46  
    47  		request := reconcile.Request{NamespacedName: types.NamespacedName{
    48  			Name:      name,
    49  			Namespace: namespace,
    50  		}}
    51  
    52  		return []reconcile.Request{request}
    53  	}
    54  }