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  }