pkg/controllers/targetgrouppolicy_controller.go (54 lines of code) (raw):
package controllers
import (
"context"
corev1 "k8s.io/api/core/v1"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/builder"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/predicate"
anv1alpha1 "github.com/aws/aws-application-networking-k8s/pkg/apis/applicationnetworking/v1alpha1"
policy "github.com/aws/aws-application-networking-k8s/pkg/k8s/policyhelper"
"github.com/aws/aws-application-networking-k8s/pkg/utils/gwlog"
)
type (
TGP = anv1alpha1.TargetGroupPolicy
)
type TargetGroupPolicyController struct {
log gwlog.Logger
client client.Client
ph *policy.PolicyHandler[*TGP]
}
func RegisterTargetGroupPolicyController(log gwlog.Logger, mgr ctrl.Manager) error {
ph := policy.NewTargetGroupPolicyHandler(log, mgr.GetClient())
controller := &TargetGroupPolicyController{
log: log,
client: mgr.GetClient(),
ph: ph,
}
b := ctrl.NewControllerManagedBy(mgr).
For(&TGP{}, builder.WithPredicates(predicate.GenerationChangedPredicate{}))
ph.AddWatchers(b, &corev1.Service{})
ph.AddWatchers(b, &anv1alpha1.ServiceExport{})
return b.Complete(controller)
}
func (c *TargetGroupPolicyController) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
ctx = gwlog.StartReconcileTrace(ctx, c.log, "targetgrouppolicy", req.Name, req.Namespace)
defer func() {
gwlog.EndReconcileTrace(ctx, c.log)
}()
tgPolicy := &TGP{}
err := c.client.Get(ctx, req.NamespacedName, tgPolicy)
if err != nil {
return ctrl.Result{}, client.IgnoreNotFound(err)
}
c.log.Infow(ctx, "reconcile target group policy", "req", req, "targetRef", tgPolicy.Spec.TargetRef)
_, err = c.ph.ValidateAndUpdateCondition(ctx, tgPolicy)
if err != nil {
return ctrl.Result{}, err
}
c.log.Infow(ctx, "reconciled target group policy",
"req", req,
"targetRef", tgPolicy.Spec.TargetRef,
)
return ctrl.Result{}, nil
}