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
}