Skip to content

Commit 2286c6f

Browse files
committed
Add Windows secondary IP mode configuration targets
1 parent 020d23a commit 2286c6f

File tree

17 files changed

+673
-127
lines changed

17 files changed

+673
-127
lines changed

Makefile

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ IMAGE ?= $(REPO):$(VERSION)
1414
BASE_IMAGE ?= public.ecr.aws/eks-distro-build-tooling/eks-distro-minimal-base-nonroot:latest.2
1515
GOLANG_VERSION ?= $(shell cat .go-version)
1616
BUILD_IMAGE ?= public.ecr.aws/docker/library/golang:$(GOLANG_VERSION)
17-
GOARCH ?= amd64
18-
PLATFORM ?= linux/amd64
17+
GOARCH=amd64
18+
GOOS=linux
19+
PLATFORM=linux/amd64
1920

2021
help: ## Display help
2122
@awk 'BEGIN {FS = ":.*##"; printf "Usage:\n make \033[36m<target>\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
@@ -70,7 +71,7 @@ delete: ## Delete controller from ~/.kube/config
7071

7172
# Build the docker image with buildx
7273
docker-buildx: check-env test
73-
docker buildx build --platform=$(PLATFORM) -t $(IMAGE)-$(GOARCH) --build-arg BASE_IMAGE=$(BASE_IMAGE) --build-arg BUILD_IMAGE=$(BUILD_IMAGE) --build-arg $(GOARCH) --load .
74+
docker buildx build --platform=linux/amd64 -t $(IMAGE)-$(GOARCH) --build-arg BASE_IMAGE=$(BASE_IMAGE) --build-arg BUILD_IMAGE=$(BUILD_IMAGE) --build-arg $(GOARCH) --load .
7475

7576
# Build the docker image
7677
docker-build: check-env test
@@ -79,7 +80,7 @@ docker-build: check-env test
7980

8081
# Build the docker image with buildx and no tests
8182
docker-buildx-no-test:
82-
docker buildx build --platform=$(PLATFORM) -t $(IMAGE)_$(GOARCH) --build-arg BASE_IMAGE=$(BASE_IMAGE) --build-arg BUILD_IMAGE=$(BUILD_IMAGE) --build-arg $(GOARCH) --load .
83+
docker buildx build --platform=linux/amd64 -t $(IMAGE)_$(GOARCH) --build-arg BASE_IMAGE=$(BASE_IMAGE) --build-arg BUILD_IMAGE=$(BUILD_IMAGE) --build-arg $(GOARCH) --load .
8384

8485
# Push the docker image
8586
docker-push: check-env

controllers/core/configmap_controller.go

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ type ConfigMapReconciler struct {
4646
Condition condition.Conditions
4747
curWinIPAMEnabledCond bool
4848
curWinPrefixDelegationEnabledCond bool
49-
curWinPDWarmIPTarget int
50-
curWinPDMinIPTarget int
49+
curWinWarmIPTarget int
50+
curWinMinIPTarget int
5151
curWinPDWarmPrefixTarget int
5252
Context context.Context
5353
}
@@ -116,21 +116,32 @@ func (r *ConfigMapReconciler) Reconcile(ctx context.Context, req ctrl.Request) (
116116
isPrefixFlagUpdated = true
117117
}
118118

119-
// Check if configurations for Windows prefix delegation have changed
120-
var isPDConfigUpdated bool
121-
warmIPTarget, minIPTarget, warmPrefixTarget := config.ParseWinPDTargets(r.Log, configmap)
122-
if r.curWinPDWarmIPTarget != warmIPTarget || r.curWinPDMinIPTarget != minIPTarget || r.curWinPDWarmPrefixTarget != warmPrefixTarget {
123-
r.curWinPDWarmIPTarget = warmIPTarget
124-
r.curWinPDMinIPTarget = minIPTarget
125-
r.curWinPDWarmPrefixTarget = warmPrefixTarget
126-
logger.Info("updated PD configs from configmap", config.WarmIPTarget, r.curWinPDWarmIPTarget,
127-
config.MinimumIPTarget, r.curWinPDMinIPTarget, config.WarmPrefixTarget, r.curWinPDWarmPrefixTarget)
119+
// Check if Windows IP configurations in ConfigMap have changed
120+
var isWinIPConfigsUpdated bool
128121

129-
isPDConfigUpdated = true
122+
warmIPTarget, minIPTarget, warmPrefixTarget, isPDEnabled := config.ParseWinIPConfigs(r.Log, configmap)
123+
var winMinIPTargetUpdated = r.curWinMinIPTarget != minIPTarget
124+
var winWarmIPTargetUpdated = r.curWinWarmIPTarget != warmIPTarget
125+
var winPDWarmPrefixTargetUpdated = r.curWinPDWarmPrefixTarget != warmPrefixTarget
126+
if winWarmIPTargetUpdated || winMinIPTargetUpdated {
127+
r.curWinWarmIPTarget = warmIPTarget
128+
r.curWinMinIPTarget = minIPTarget
129+
r.curWinPDWarmPrefixTarget = warmPrefixTarget
130+
logger.Info(
131+
"Detected update in Windows IP configuration parameter values in ConfigMap",
132+
config.WarmIPTarget, r.curWinWarmIPTarget,
133+
config.MinimumIPTarget, r.curWinMinIPTarget,
134+
config.WarmPrefixTarget, r.curWinPDWarmPrefixTarget,
135+
config.EnableWindowsPrefixDelegationKey, isPDEnabled,
136+
)
137+
isWinIPConfigsUpdated = true
138+
}
139+
if isPDEnabled && winPDWarmPrefixTargetUpdated {
140+
isWinIPConfigsUpdated = true
130141
}
131142

132-
// Flag is updated, update all nodes
133-
if isIPAMFlagUpdated || isPrefixFlagUpdated || isPDConfigUpdated {
143+
var nodesRequireUpdate = isIPAMFlagUpdated || isPrefixFlagUpdated || isWinIPConfigsUpdated
144+
if nodesRequireUpdate {
134145
err := UpdateNodesOnConfigMapChanges(r.K8sAPI, r.NodeManager)
135146
if err != nil {
136147
// Error in updating nodes

controllers/core/configmap_controller_test.go

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,9 @@ package controllers
1616
import (
1717
"context"
1818
"errors"
19+
"strconv"
1920
"testing"
2021

21-
mock_condition "github.com/aws/amazon-vpc-resource-controller-k8s/mocks/amazon-vcp-resource-controller-k8s/pkg/condition"
22-
mock_k8s "github.com/aws/amazon-vpc-resource-controller-k8s/mocks/amazon-vcp-resource-controller-k8s/pkg/k8s"
23-
mock_node "github.com/aws/amazon-vpc-resource-controller-k8s/mocks/amazon-vcp-resource-controller-k8s/pkg/node"
24-
mock_manager "github.com/aws/amazon-vpc-resource-controller-k8s/mocks/amazon-vcp-resource-controller-k8s/pkg/node/manager"
25-
"github.com/aws/amazon-vpc-resource-controller-k8s/pkg/config"
26-
cooldown "github.com/aws/amazon-vpc-resource-controller-k8s/pkg/provider/branch/cooldown"
2722
"github.com/golang/mock/gomock"
2823
"github.com/stretchr/testify/assert"
2924
corev1 "k8s.io/api/core/v1"
@@ -35,18 +30,35 @@ import (
3530
fakeClient "sigs.k8s.io/controller-runtime/pkg/client/fake"
3631
"sigs.k8s.io/controller-runtime/pkg/log/zap"
3732
"sigs.k8s.io/controller-runtime/pkg/reconcile"
33+
34+
mock_condition "github.com/aws/amazon-vpc-resource-controller-k8s/mocks/amazon-vcp-resource-controller-k8s/pkg/condition"
35+
mock_k8s "github.com/aws/amazon-vpc-resource-controller-k8s/mocks/amazon-vcp-resource-controller-k8s/pkg/k8s"
36+
mock_node "github.com/aws/amazon-vpc-resource-controller-k8s/mocks/amazon-vcp-resource-controller-k8s/pkg/node"
37+
mock_manager "github.com/aws/amazon-vpc-resource-controller-k8s/mocks/amazon-vcp-resource-controller-k8s/pkg/node/manager"
38+
"github.com/aws/amazon-vpc-resource-controller-k8s/pkg/config"
39+
cooldown "github.com/aws/amazon-vpc-resource-controller-k8s/pkg/provider/branch/cooldown"
3840
)
3941

4042
var (
4143
mockConfigMap = &corev1.ConfigMap{
4244
TypeMeta: metav1.TypeMeta{},
4345
ObjectMeta: metav1.ObjectMeta{Name: config.VpcCniConfigMapName, Namespace: config.KubeSystemNamespace},
44-
Data: map[string]string{config.EnableWindowsIPAMKey: "true", config.EnableWindowsPrefixDelegationKey: "true"},
46+
Data: map[string]string{
47+
config.EnableWindowsIPAMKey: "true",
48+
config.EnableWindowsPrefixDelegationKey: "true",
49+
config.MinimumIPTarget: strconv.Itoa(config.IPv4DefaultMinIPTarget),
50+
config.WarmIPTarget: strconv.Itoa(config.IPv4DefaultWarmIPTarget),
51+
},
4552
}
4653
mockConfigMapPD = &corev1.ConfigMap{
4754
TypeMeta: metav1.TypeMeta{},
4855
ObjectMeta: metav1.ObjectMeta{Name: config.VpcCniConfigMapName, Namespace: config.KubeSystemNamespace},
49-
Data: map[string]string{config.EnableWindowsIPAMKey: "false", config.EnableWindowsPrefixDelegationKey: "true"},
56+
Data: map[string]string{
57+
config.EnableWindowsIPAMKey: "false",
58+
config.EnableWindowsPrefixDelegationKey: "true",
59+
config.MinimumIPTarget: strconv.Itoa(config.IPv4PDDefaultMinIPTargetSize),
60+
config.WarmIPTarget: strconv.Itoa(config.IPv4PDDefaultWarmIPTargetSize),
61+
},
5062
}
5163
mockConfigMapReq = reconcile.Request{
5264
NamespacedName: types.NamespacedName{
@@ -89,11 +101,13 @@ func NewConfigMapMock(ctrl *gomock.Controller, mockObjects ...client.Object) Con
89101
return ConfigMapMock{
90102
MockNodeManager: mockNodeManager,
91103
ConfigMapReconciler: &ConfigMapReconciler{
92-
Client: client,
93-
Log: zap.New(),
94-
NodeManager: mockNodeManager,
95-
K8sAPI: mockK8sWrapper,
96-
Condition: mockCondition,
104+
Client: client,
105+
Log: zap.New(),
106+
NodeManager: mockNodeManager,
107+
K8sAPI: mockK8sWrapper,
108+
Condition: mockCondition,
109+
curWinMinIPTarget: config.IPv4DefaultMinIPTarget,
110+
curWinWarmIPTarget: config.IPv4DefaultWarmIPTarget,
97111
},
98112
MockNode: mockNode,
99113
MockK8sAPI: mockK8sWrapper,

main.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@
1313

1414
package main
1515

16+
// TODO: Restore Makefile to original state
17+
// TODO: Verify lint checks are passing
18+
// TODO: Verify all unit tests are passing
19+
// TODO: Verify all integration tests are passing
20+
// TODO: Verify necessary unit tests have been added
21+
// TODO: Verify necessary integration tests have been added
22+
1623
import (
1724
"flag"
1825
"fmt"
@@ -22,6 +29,7 @@ import (
2229
"time"
2330

2431
crdv1alpha1 "github.com/aws/amazon-vpc-cni-k8s/pkg/apis/crd/v1alpha1"
32+
2533
vpcresourcesv1alpha1 "github.com/aws/amazon-vpc-resource-controller-k8s/apis/vpcresources/v1alpha1"
2634
vpcresourcesv1beta1 "github.com/aws/amazon-vpc-resource-controller-k8s/apis/vpcresources/v1beta1"
2735
"github.com/aws/amazon-vpc-resource-controller-k8s/controllers/apps"
@@ -143,8 +151,8 @@ func main() {
143151
"Port for serving the introspection API")
144152
flag.BoolVar(&enableWindowsPrefixDelegation, "enable-windows-prefix-delegation", false,
145153
"Enable the feature flag for Windows prefix delegation")
146-
flag.StringVar(&region, "aws-region", "", "The aws region of the k8s cluster")
147-
flag.StringVar(&vpcID, "vpc-id", "", "The VPC ID where EKS cluster is deployed")
154+
flag.StringVar(&region, "aws-region", "us-west-2", "The aws region of the k8s cluster")
155+
flag.StringVar(&vpcID, "vpc-id", "vpc-09efbf2426cd7dc1a", "The VPC ID where EKS cluster is deployed")
148156

149157
flag.Parse()
150158

pkg/config/loader.go

Lines changed: 67 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,15 @@ const (
2828
// Default Configuration for Pod ENI resource type
2929
PodENIDefaultWorker = 30
3030

31+
//Note: The default warm IP target and default min IP target for secondary IP mode and PD should be the same
32+
// This is because the ConfigMap is created...TODO finish this comment
33+
3134
// Default Configuration for IPv4 resource type
32-
IPv4DefaultWorker = 2
33-
IPv4DefaultWPSize = 3
34-
IPv4DefaultMaxDev = 1
35-
IPv4DefaultResSize = 0
35+
IPv4DefaultWorker = 2
36+
IPv4DefaultWarmIPTarget = 1
37+
IPv4DefaultMinIPTarget = 3
38+
IPv4DefaultMaxDev = 0
39+
IPv4DefaultResSize = 0
3640

3741
// Default Configuration for IPv4 prefix resource type
3842
IPv4PDDefaultWorker = 2
@@ -70,26 +74,41 @@ func LoadResourceConfig() map[string]ResourceConfig {
7074
func LoadResourceConfigFromConfigMap(log logr.Logger, vpcCniConfigMap *v1.ConfigMap) map[string]ResourceConfig {
7175
resourceConfig := getDefaultResourceConfig()
7276

73-
warmIPTarget, minIPTarget, warmPrefixTarget := ParseWinPDTargets(log, vpcCniConfigMap)
77+
warmIPTarget, minIPTarget, warmPrefixTarget, isPDEnabled := ParseWinIPConfigs(log, vpcCniConfigMap)
7478

7579
// If no PD configuration is set in configMap or none is valid, return default resource config
7680
if warmIPTarget == 0 && minIPTarget == 0 && warmPrefixTarget == 0 {
7781
return resourceConfig
7882
}
7983

80-
resourceConfig[ResourceNameIPAddressFromPrefix].WarmPoolConfig.WarmIPTarget = warmIPTarget
81-
resourceConfig[ResourceNameIPAddressFromPrefix].WarmPoolConfig.MinIPTarget = minIPTarget
82-
resourceConfig[ResourceNameIPAddressFromPrefix].WarmPoolConfig.WarmPrefixTarget = warmPrefixTarget
84+
if isPDEnabled {
85+
resourceConfig[ResourceNameIPAddressFromPrefix].WarmPoolConfig.WarmIPTarget = warmIPTarget
86+
resourceConfig[ResourceNameIPAddressFromPrefix].WarmPoolConfig.MinIPTarget = minIPTarget
87+
resourceConfig[ResourceNameIPAddressFromPrefix].WarmPoolConfig.WarmPrefixTarget = warmPrefixTarget
88+
} else {
89+
resourceConfig[ResourceNameIPAddress].WarmPoolConfig.WarmIPTarget = warmIPTarget
90+
resourceConfig[ResourceNameIPAddress].WarmPoolConfig.MinIPTarget = minIPTarget
91+
}
8392

8493
return resourceConfig
8594
}
8695

87-
// ParseWinPDTargets parses config map for Windows prefix delegation configurations set by users
88-
func ParseWinPDTargets(log logr.Logger, vpcCniConfigMap *v1.ConfigMap) (warmIPTarget int, minIPTarget int, warmPrefixTarget int) {
96+
// ParseWinIPConfigs parses Windows configuration parameters in the ConfigMap set by users
97+
func ParseWinIPConfigs(log logr.Logger, vpcCniConfigMap *v1.ConfigMap) (warmIPTarget int, minIPTarget int, warmPrefixTarget int, isPDEnabled bool) {
8998
warmIPTarget, minIPTarget, warmPrefixTarget = 0, 0, 0
9099

91100
if vpcCniConfigMap.Data == nil {
92-
return warmIPTarget, minIPTarget, warmPrefixTarget
101+
log.V(1).Info("No configuration found in ConfigMap, falling back to using secondary IP mode default values")
102+
isPDEnabled = false
103+
minIPTarget = IPv4DefaultMinIPTarget
104+
warmIPTarget = IPv4DefaultWarmIPTarget
105+
warmPrefixTarget = 0
106+
return warmIPTarget, minIPTarget, warmPrefixTarget, isPDEnabled
107+
}
108+
109+
isPDEnabled, err := strconv.ParseBool(vpcCniConfigMap.Data[EnableWindowsPrefixDelegationKey])
110+
if err != nil {
111+
isPDEnabled = false
93112
}
94113

95114
warmIPTargetStr, foundWarmIP := vpcCniConfigMap.Data[WarmIPTarget]
@@ -100,14 +119,25 @@ func ParseWinPDTargets(log logr.Logger, vpcCniConfigMap *v1.ConfigMap) (warmIPTa
100119
if !foundMinIP {
101120
minIPTargetStr, foundMinIP = vpcCniConfigMap.Data[WinMinimumIPTarget]
102121
}
103-
warmPrefixTargetStr, foundWarmPrefix := vpcCniConfigMap.Data[WarmPrefixTarget]
104-
if !foundWarmPrefix {
105-
warmPrefixTargetStr, foundWarmPrefix = vpcCniConfigMap.Data[WinWarmPrefixTarget]
122+
123+
var warmPrefixTargetStr string
124+
var foundWarmPrefix bool
125+
if !isPDEnabled {
126+
log.V(1).Info("PD is disabled, skipping warm prefix parsing")
127+
} else {
128+
warmPrefixTargetStr, foundWarmPrefix = vpcCniConfigMap.Data[WarmPrefixTarget]
129+
if !foundWarmPrefix {
130+
warmPrefixTargetStr, foundWarmPrefix = vpcCniConfigMap.Data[WinWarmPrefixTarget]
131+
}
106132
}
107133

108-
// If no configuration is found, return 0
109-
if !foundWarmIP && !foundMinIP && !foundWarmPrefix {
110-
return warmIPTarget, minIPTarget, warmPrefixTarget
134+
// Handle scenario whereby one or more parameters are not found
135+
if isPDEnabled {
136+
// If no configuration is found, return 0
137+
if !foundWarmIP && !foundMinIP && !foundWarmPrefix {
138+
log.V(1).Info("Prefix delegation configuration in ConfigMap is empty")
139+
return warmIPTarget, minIPTarget, warmPrefixTarget, isPDEnabled
140+
}
111141
}
112142

113143
if foundWarmIP {
@@ -117,6 +147,11 @@ func ParseWinPDTargets(log logr.Logger, vpcCniConfigMap *v1.ConfigMap) (warmIPTa
117147
} else {
118148
warmIPTarget = warmIPTargetInt
119149
}
150+
} else {
151+
if !isPDEnabled {
152+
log.V(1).Info("Secondary IP mode warm IP configuration not found in ConfigMap, falling back to using default")
153+
warmIPTarget = IPv4DefaultWarmIPTarget
154+
}
120155
}
121156
if foundMinIP {
122157
minIPTargetInt, err := strconv.Atoi(minIPTargetStr)
@@ -125,16 +160,28 @@ func ParseWinPDTargets(log logr.Logger, vpcCniConfigMap *v1.ConfigMap) (warmIPTa
125160
} else {
126161
minIPTarget = minIPTargetInt
127162
}
163+
} else {
164+
if !isPDEnabled {
165+
log.V(1).Info("Secondary IP mode min IP configuration not found in ConfigMap, falling back to using default")
166+
warmIPTarget = IPv4DefaultMinIPTarget
167+
}
128168
}
129-
if foundWarmPrefix {
169+
170+
if !isPDEnabled && warmIPTarget == 0 {
171+
// Handle the unique scenario where WarmIPTarget is specifically configured to zero
172+
// There must always be 1 warm IP to ensure that the warmpool is never empty and pods can be scheduled
173+
warmIPTarget = 1
174+
}
175+
176+
if isPDEnabled && foundWarmPrefix {
130177
warmPrefixTargetInt, err := strconv.Atoi(warmPrefixTargetStr)
131178
if err != nil {
132179
log.Error(err, "failed to parse warm prefix target", "warm prefix target", warmPrefixTargetStr)
133180
} else {
134181
warmPrefixTarget = warmPrefixTargetInt
135182
}
136183
}
137-
return warmIPTarget, minIPTarget, warmPrefixTarget
184+
return warmIPTarget, minIPTarget, warmPrefixTarget, isPDEnabled
138185
}
139186

140187
// getDefaultResourceConfig returns the default Resource Configuration.
@@ -153,7 +200,7 @@ func getDefaultResourceConfig() map[string]ResourceConfig {
153200

154201
// Create default configuration for IPv4 Resource
155202
ipV4WarmPoolConfig := WarmPoolConfig{
156-
DesiredSize: IPv4DefaultWPSize,
203+
DesiredSize: IPv4DefaultWarmIPTarget,
157204
MaxDeviation: IPv4DefaultMaxDev,
158205
ReservedSize: IPv4DefaultResSize,
159206
}

pkg/config/loader_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ func TestLoadResourceConfig(t *testing.T) {
4141

4242
// Verify default Warm pool configuration for IPv4 Address
4343
ipV4WPConfig := ipV4Config.WarmPoolConfig
44-
assert.Equal(t, IPv4DefaultWPSize, ipV4WPConfig.DesiredSize)
44+
assert.Equal(t, IPv4DefaultWarmIPTarget, ipV4WPConfig.DesiredSize)
4545
assert.Equal(t, IPv4DefaultMaxDev, ipV4WPConfig.MaxDeviation)
4646
assert.Equal(t, IPv4DefaultResSize, ipV4WPConfig.ReservedSize)
4747

@@ -74,7 +74,7 @@ func TestParseWinPDTargets(t *testing.T) {
7474
WarmPrefixTarget: strconv.Itoa(IPv4PDDefaultWarmPrefixTargetSize),
7575
},
7676
}
77-
warmIPTarget, minIPTarget, warmPrefixTarget := ParseWinPDTargets(log, vpcCNIConfig)
77+
warmIPTarget, minIPTarget, warmPrefixTarget, _ := ParseWinIPConfigs(log, vpcCNIConfig)
7878
assert.Equal(t, IPv4PDDefaultWarmIPTargetSize, warmIPTarget)
7979
assert.Equal(t, IPv4PDDefaultMinIPTargetSize, minIPTarget)
8080
assert.Equal(t, IPv4PDDefaultWarmPrefixTargetSize, warmPrefixTarget)
@@ -93,7 +93,7 @@ func TestParseWinPDTargets_Negative(t *testing.T) {
9393
WarmPrefixTarget: strconv.Itoa(0),
9494
},
9595
}
96-
warmIPTarget, minIPTarget, warmPrefixTarget := ParseWinPDTargets(log, vpcCNIConfig)
96+
warmIPTarget, minIPTarget, warmPrefixTarget, _ := ParseWinIPConfigs(log, vpcCNIConfig)
9797
// negative values are still read in but processed when it's used in the warm pool
9898
assert.Equal(t, -10, warmIPTarget)
9999
assert.Equal(t, -100, minIPTarget)
@@ -113,7 +113,7 @@ func TestParseWinPDTargets_Invalid(t *testing.T) {
113113
WarmPrefixTarget: "can't parse",
114114
},
115115
}
116-
warmIPTarget, minIPTarget, warmPrefixTarget := ParseWinPDTargets(log, vpcCNIConfig)
116+
warmIPTarget, minIPTarget, warmPrefixTarget, _ := ParseWinIPConfigs(log, vpcCNIConfig)
117117
assert.Equal(t, 0, warmIPTarget)
118118
assert.Equal(t, 0, minIPTarget)
119119
assert.Equal(t, 0, warmPrefixTarget)
@@ -153,7 +153,7 @@ func TestLoadResourceConfigFromConfigMap(t *testing.T) {
153153

154154
// Verify default Warm pool configuration for IPv4 Address
155155
ipV4WPConfig := ipV4Config.WarmPoolConfig
156-
assert.Equal(t, IPv4DefaultWPSize, ipV4WPConfig.DesiredSize)
156+
assert.Equal(t, IPv4DefaultWarmIPTarget, ipV4WPConfig.DesiredSize)
157157
assert.Equal(t, IPv4DefaultMaxDev, ipV4WPConfig.MaxDeviation)
158158
assert.Equal(t, IPv4DefaultResSize, ipV4WPConfig.ReservedSize)
159159

pkg/config/type.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,8 @@ type ResourceConfig struct {
156156
// WarmPoolConfig is the configuration of Warm Pool of a resource
157157
type WarmPoolConfig struct {
158158
// Number of resources to keep in warm pool per node; for prefix IP pool, this is used to check if pool is active
159+
// TODO: Deprecate DesiredSize in favour of using WarmIPTarget since DesiredSize historically served the purpose of WarmIPTarget
160+
// To avoid duplication and make the code easy to maintain, DesiredSize and WarmIPTarget should be consolidated
159161
DesiredSize int
160162
// Number of resources not to use in the warm pool
161163
ReservedSize int

0 commit comments

Comments
 (0)