open-cluster-management.io/governance-policy-propagator@v0.13.0/controllers/policyset/placementBindingMapper.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 placementBindingMapper(_ client.Client) handler.MapFunc {
    18  	return func(ctx context.Context, obj client.Object) []reconcile.Request {
    19  		//nolint:forcetypeassert
    20  		object := obj.(*policiesv1.PlacementBinding)
    21  		var result []reconcile.Request
    22  
    23  		log := log.WithValues("placementBindingName", object.GetName(), "namespace", object.GetNamespace())
    24  
    25  		log.V(2).Info("Reconcile request for a PlacementBinding")
    26  
    27  		subjects := object.Subjects
    28  		for _, subject := range subjects {
    29  			if subject.APIGroup == policiesv1.SchemeGroupVersion.Group {
    30  				if subject.Kind == policiesv1.PolicySetKind {
    31  					log.V(2).Info("Found reconciliation request from policyset placement bindng",
    32  						"policySetName", subject.Name)
    33  
    34  					request := reconcile.Request{NamespacedName: types.NamespacedName{
    35  						Name:      subject.Name,
    36  						Namespace: object.GetNamespace(),
    37  					}}
    38  					result = append(result, request)
    39  				}
    40  			}
    41  		}
    42  
    43  		return result
    44  	}
    45  }