in controllers/manager/gatewayvmconfiguration_controller.go [199:273]
func (r *GatewayVMConfigurationReconciler) reconcile(
ctx context.Context,
vmConfig *egressgatewayv1alpha1.GatewayVMConfiguration,
) (ctrl.Result, error) {
log := log.FromContext(ctx)
log.Info(fmt.Sprintf("Reconciling GatewayVMConfiguration %s/%s", vmConfig.Namespace, vmConfig.Name))
mc := metrics.NewMetricsContext(
os.Getenv(consts.PodNamespaceEnvKey),
"reconcile_gateway_vm_configuration",
r.SubscriptionID(),
r.ResourceGroup,
strings.ToLower(fmt.Sprintf("%s/%s", vmConfig.Namespace, vmConfig.Name)),
)
succeeded := false
defer func() { mc.ObserveControllerReconcileMetrics(succeeded) }()
if !controllerutil.ContainsFinalizer(vmConfig, consts.VMConfigFinalizerName) {
log.Info("Adding finalizer")
controllerutil.AddFinalizer(vmConfig, consts.VMConfigFinalizerName)
err := r.Update(ctx, vmConfig)
if err != nil {
log.Error(err, "failed to add finalizer")
return ctrl.Result{}, err
}
}
existing := &egressgatewayv1alpha1.GatewayVMConfiguration{}
vmConfig.DeepCopyInto(existing)
vmss, ipPrefixLength, err := r.getGatewayVMSS(ctx, vmConfig)
if err != nil {
log.Error(err, "failed to get vmss")
return ctrl.Result{}, err
}
ipPrefix, ipPrefixID, isManaged, err := r.ensurePublicIPPrefix(ctx, ipPrefixLength, vmConfig)
if err != nil {
log.Error(err, "failed to ensure public ip prefix")
return ctrl.Result{}, err
}
var privateIPs []string
if privateIPs, err = r.reconcileVMSS(ctx, vmConfig, vmss, ipPrefixID, true); err != nil {
log.Error(err, "failed to reconcile VMSS")
return ctrl.Result{}, err
}
if !isManaged {
if err := r.ensurePublicIPPrefixDeleted(ctx, vmConfig); err != nil {
log.Error(err, "failed to remove managed public ip prefix")
return ctrl.Result{}, err
}
}
if vmConfig.Status == nil {
vmConfig.Status = &egressgatewayv1alpha1.GatewayVMConfigurationStatus{}
}
if vmConfig.Spec.ProvisionPublicIps {
vmConfig.Status.EgressIpPrefix = ipPrefix
} else {
vmConfig.Status.EgressIpPrefix = strings.Join(privateIPs, ",")
}
if !equality.Semantic.DeepEqual(existing, vmConfig) {
log.Info(fmt.Sprintf("Updating GatewayVMConfiguration %s/%s", vmConfig.Namespace, vmConfig.Name))
if err := r.Status().Update(ctx, vmConfig); err != nil {
log.Error(err, "failed to update gateway vm configuration")
}
}
log.Info("GatewayVMConfiguration reconciled")
succeeded = true
return ctrl.Result{}, nil
}