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 }