func ParseWinIPTargetConfigs()

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
}