in controllers/manager/gatewayvmconfiguration_controller.go [66:142]
func (r *GatewayVMConfigurationReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
log := log.FromContext(ctx)
// handle node events and enqueue corresponding gatewayVMConfigurations if nodepool matches
if req.Namespace == "" && req.Name != "" {
log.Info(fmt.Sprintf("Reconciling node event %s", req.Name))
node := &corev1.Node{}
if err := r.Get(ctx, req.NamespacedName, node); err != nil {
if apierrors.IsNotFound(err) {
return ctrl.Result{}, nil
}
log.Error(err, "unable to fetch node instance")
return ctrl.Result{}, err
}
vmConfigList := &egressgatewayv1alpha1.GatewayVMConfigurationList{}
if err := r.List(ctx, vmConfigList); err != nil {
log.Error(err, "failed to list GatewayVMConfiguration")
return ctrl.Result{}, err
}
var aggregateError error
for _, vmConfig := range vmConfigList.Items {
// skip reconciling when
// 1. node has agentpool label
// 2. vmConfig has GatewayNodepoolName and node agentpool label does not match
// or vmConfig is deleting
if !vmConfig.ObjectMeta.DeletionTimestamp.IsZero() {
continue
}
if v, ok := node.Labels[consts.AKSNodepoolNameLabel]; ok {
if npName := vmConfig.Spec.GatewayNodepoolName; npName != "" && !strings.EqualFold(v, npName) {
continue
}
}
log.Info(fmt.Sprintf("reconcile vmConfig (%s/%s) upon node (%s) event", vmConfig.GetNamespace(), vmConfig.GetName(), req.Name))
if _, err := r.reconcile(ctx, &vmConfig); err != nil {
log.Error(err, "failed to reconcile GatewayVMConfiguration")
aggregateError = errors.Join(aggregateError, err)
continue // continue to reconcile other vmConfigs
}
}
return ctrl.Result{}, aggregateError
}
vmConfig := &egressgatewayv1alpha1.GatewayVMConfiguration{}
if err := r.Get(ctx, req.NamespacedName, vmConfig); err != nil {
if apierrors.IsNotFound(err) {
// Object not found, return.
return ctrl.Result{}, nil
}
log.Error(err, "unable to fetch GatewayVMConfiguration instance")
return ctrl.Result{}, err
}
gwConfig := &egressgatewayv1alpha1.StaticGatewayConfiguration{}
if err := r.Get(ctx, req.NamespacedName, gwConfig); err != nil {
log.Error(err, "failed to fetch StaticGatewayConfiguration instance")
return ctrl.Result{}, err
}
if !vmConfig.ObjectMeta.DeletionTimestamp.IsZero() {
// Clean up gatewayVMConfiguration
res, err := r.ensureDeleted(ctx, vmConfig)
if err != nil {
r.Recorder.Event(gwConfig, corev1.EventTypeWarning, "EnsureDeleteGatewayVMConfigurationError", err.Error())
}
return res, err
}
res, err := r.reconcile(ctx, vmConfig)
if err != nil {
r.Recorder.Event(gwConfig, corev1.EventTypeWarning, "ReconcileGatewayVMConfigurationError", err.Error())
} else {
r.Recorder.Event(gwConfig, corev1.EventTypeNormal, "ReconcileGatewayVMConfigurationSuccess", "GatewayVMConfiguration reconciled")
}
return res, err
}