open-cluster-management.io/governance-policy-propagator@v0.13.0/controllers/policyset/policyMapper.go (about) 1 // Copyright (c) 2022 Red Hat, Inc. 2 // Copyright Contributors to the Open Cluster Management project 3 4 package controllers 5 6 import ( 7 "context" 8 9 "k8s.io/apimachinery/pkg/types" 10 "sigs.k8s.io/controller-runtime/pkg/client" 11 "sigs.k8s.io/controller-runtime/pkg/handler" 12 "sigs.k8s.io/controller-runtime/pkg/reconcile" 13 14 policiesv1 "open-cluster-management.io/governance-policy-propagator/api/v1" 15 ) 16 17 func policyMapper(_ client.Client) handler.MapFunc { 18 return func(ctx context.Context, object client.Object) []reconcile.Request { 19 log := log.WithValues("policyName", object.GetName(), "namespace", object.GetNamespace()) 20 log.V(2).Info("Reconcile Request for Policy") 21 22 var result []reconcile.Request 23 24 for _, plcmt := range object.(*policiesv1.Policy).Status.Placement { 25 // iterate through placement looking for policyset 26 if plcmt.PolicySet != "" { 27 log.V(2).Info("Found reconciliation request from a policy", "policySetName", plcmt.PolicySet) 28 29 request := reconcile.Request{NamespacedName: types.NamespacedName{ 30 Name: plcmt.PolicySet, 31 Namespace: object.GetNamespace(), 32 }} 33 result = append(result, request) 34 } 35 } 36 37 return result 38 } 39 }