func()

in controllers/core/configmap_controller.go [59:154]


func (r *ConfigMapReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
	logger := r.Log.WithValues("configmap", req.NamespacedName)

	// only update nodes on amazon-vpc-cni updates, return here for other updates
	if req.Name != config.VpcCniConfigMapName || req.Namespace != config.KubeSystemNamespace {
		return ctrl.Result{}, nil
	}
	configmap := &corev1.ConfigMap{}
	if err := r.Client.Get(ctx, req.NamespacedName, configmap); err != nil {
		if errors.IsNotFound(err) {
			// If the configMap is deleted, de-register all the nodes
			logger.Info("amazon-vpc-cni configMap is deleted")
		} else {
			// Error reading the object
			logger.Error(err, "Failed to get configMap")
			return ctrl.Result{}, err
		}
	}

	// Check if branch ENI cooldown period is updated
	curCoolDownPeriod := cooldown.GetCoolDown().GetCoolDownPeriod()
	if newCoolDownPeriod, err := cooldown.GetVpcCniConfigMapCoolDownPeriodOrDefault(r.K8sAPI, r.Log); err == nil {
		if curCoolDownPeriod != newCoolDownPeriod {
			r.Log.Info("Branch ENI cool down period has been updated", "newCoolDownPeriod", newCoolDownPeriod, "OldCoolDownPeriod", curCoolDownPeriod)
			cooldown.GetCoolDown().SetCoolDownPeriod(newCoolDownPeriod)
			utils.SendBroadcastNodeEvent(
				r.K8sAPI,
				utils.BranchENICoolDownUpdateReason,
				fmt.Sprintf("Branch ENI cool down period has been updated to %s", cooldown.GetCoolDown().GetCoolDownPeriod()),
				corev1.EventTypeNormal,
				r.Log,
			)
		}
	} else {
		r.Log.Info("branch ENI cool down period not configured in amazon-vpc-cni configmap, will retain the current cooldown period", "cool down period", curCoolDownPeriod)
	}

	// Check if the Windows IPAM flag has changed
	newWinIPAMEnabledCond := r.Condition.IsWindowsIPAMEnabled()

	var isIPAMFlagUpdated bool
	if r.curWinIPAMEnabledCond != newWinIPAMEnabledCond {
		r.curWinIPAMEnabledCond = newWinIPAMEnabledCond
		logger.Info("updated configmap", config.EnableWindowsIPAMKey, r.curWinIPAMEnabledCond)

		isIPAMFlagUpdated = true
	}

	// Check if the prefix delegation flag has changed
	newWinPrefixDelegationEnabledCond := r.Condition.IsWindowsPrefixDelegationEnabled()

	var isPrefixFlagUpdated bool
	if r.curWinPrefixDelegationEnabledCond != newWinPrefixDelegationEnabledCond {
		r.curWinPrefixDelegationEnabledCond = newWinPrefixDelegationEnabledCond
		logger.Info("updated configmap", config.EnableWindowsPrefixDelegationKey, r.curWinPrefixDelegationEnabledCond)

		isPrefixFlagUpdated = true
	}

	// Check if Windows IP target configurations in ConfigMap have changed
	var isWinIPConfigsUpdated bool

	warmIPTarget, minIPTarget, warmPrefixTarget, isPDEnabled := config.ParseWinIPTargetConfigs(r.Log, configmap)
	var winMinIPTargetUpdated = r.curWinMinIPTarget != minIPTarget
	var winWarmIPTargetUpdated = r.curWinWarmIPTarget != warmIPTarget
	var winPDWarmPrefixTargetUpdated = r.curWinPDWarmPrefixTarget != warmPrefixTarget
	if winWarmIPTargetUpdated || winMinIPTargetUpdated {
		r.curWinWarmIPTarget = warmIPTarget
		r.curWinMinIPTarget = minIPTarget
		isWinIPConfigsUpdated = true
	}
	if isPDEnabled && winPDWarmPrefixTargetUpdated {
		r.curWinPDWarmPrefixTarget = warmPrefixTarget
		isWinIPConfigsUpdated = true
	}
	if isWinIPConfigsUpdated {
		logger.Info(
			"Detected update in Windows IP configuration parameter values in ConfigMap",
			config.WinWarmIPTarget, r.curWinWarmIPTarget,
			config.WinMinimumIPTarget, r.curWinMinIPTarget,
			config.WinWarmPrefixTarget, r.curWinPDWarmPrefixTarget,
			config.EnableWindowsPrefixDelegationKey, isPDEnabled,
		)
	}

	if isIPAMFlagUpdated || isPrefixFlagUpdated || isWinIPConfigsUpdated {
		err := UpdateNodesOnConfigMapChanges(r.K8sAPI, r.NodeManager)
		if err != nil {
			// Error in updating nodes
			logger.Error(err, "Failed to update nodes on configmap changes")
			return ctrl.Result{}, err
		}
	}

	return ctrl.Result{}, nil
}