in pkg/config/loader.go [79:164]
func ParseWinIPTargetConfigs(log logr.Logger, vpcCniConfigMap *v1.ConfigMap) (warmIPTarget int, minIPTarget int, warmPrefixTarget int, isPDEnabled bool) {
if vpcCniConfigMap.Data == nil {
warmIPTarget = IPv4DefaultWinWarmIPTarget
minIPTarget = IPv4DefaultWinMinIPTarget
log.Info(
"No ConfigMap data found, falling back to using default values",
"minIPTarget", minIPTarget,
"warmIPTarget", warmIPTarget,
)
return warmIPTarget, minIPTarget, 0, false
}
isPDEnabled, err := strconv.ParseBool(vpcCniConfigMap.Data[EnableWindowsPrefixDelegationKey])
if err != nil {
log.Info("Could not parse prefix delegation flag from ConfigMap, falling back to using secondary IP mode")
isPDEnabled = false
}
warmIPTargetStr, foundWarmIP := vpcCniConfigMap.Data[WarmIPTarget]
if !foundWarmIP {
warmIPTargetStr, foundWarmIP = vpcCniConfigMap.Data[WinWarmIPTarget]
}
minIPTargetStr, foundMinIP := vpcCniConfigMap.Data[MinimumIPTarget]
if !foundMinIP {
minIPTargetStr, foundMinIP = vpcCniConfigMap.Data[WinMinimumIPTarget]
}
warmPrefixTargetStr, foundWarmPrefix := vpcCniConfigMap.Data[WarmPrefixTarget]
if !foundWarmPrefix {
warmPrefixTargetStr, foundWarmPrefix = vpcCniConfigMap.Data[WinWarmPrefixTarget]
}
// If warm IP target config value is not found, or there is an error parsing it, the value will be set to zero
if foundWarmIP {
warmIPTarget, err = strconv.Atoi(warmIPTargetStr)
if err != nil {
log.Info("Could not parse warm ip target, defaulting to zero", "warm ip target", warmIPTargetStr)
} else if !isPDEnabled && warmIPTarget == 0 {
// Handle secondary IP mode scenario where WarmIPTarget is explicitly configured to zero
// In such a case there must always be 1 warm IP to ensure that the warmpool is never empty
log.Info("Explicitly setting WarmIPTarget zero value not supported in secondary IP mode, will override with 1")
warmIPTarget = 1
}
} else {
log.Info("could not find warm ip target in ConfigMap, defaulting to zero")
warmIPTarget = 0
}
// If min IP target config value is not found, or there is an error parsing it, the value will be set to zero
if foundMinIP {
minIPTarget, err = strconv.Atoi(minIPTargetStr)
if err != nil {
log.Info("Could not parse minimum ip target, defaulting to zero", "minimum ip target", minIPTargetStr)
}
} else {
log.Info("could not find minimum ip target in ConfigMap, defaulting to zero")
minIPTarget = 0
}
warmPrefixTarget = 0
if isPDEnabled && foundWarmPrefix {
warmPrefixTarget, err = strconv.Atoi(warmPrefixTargetStr)
if err != nil {
log.Info("Could not parse warm prefix target, defaulting to zero", "warm prefix target", warmPrefixTargetStr)
}
}
if warmIPTarget == 0 && minIPTarget == 0 {
if isPDEnabled && warmPrefixTarget == 0 {
minIPTarget = IPv4PDDefaultMinIPTargetSize
warmIPTarget = IPv4PDDefaultWarmIPTargetSize
warmPrefixTarget = IPv4PDDefaultWarmPrefixTargetSize
} else if !isPDEnabled {
minIPTarget = IPv4DefaultWinMinIPTarget
warmIPTarget = IPv4DefaultWinWarmIPTarget
}
log.Info(
"Encountered zero values for warm-ip-target, min-ip-target and warm-prefix-target in ConfigMap data, falling back to using default values since on demand IP allocation is not supported",
"minIPTarget", minIPTarget,
"warmIPTarget", warmIPTarget,
"warmPrefixTarget", warmPrefixTarget,
"isPDEnabled", isPDEnabled,
)
}
return warmIPTarget, minIPTarget, warmPrefixTarget, isPDEnabled
}