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 }