diff --git a/pkg/features/versioned_kube_features.go b/pkg/features/versioned_kube_features.go index b27a2770f7f..e34c75c2ab9 100644 --- a/pkg/features/versioned_kube_features.go +++ b/pkg/features/versioned_kube_features.go @@ -726,6 +726,7 @@ var defaultVersionedKubernetesFeatureGates = map[featuregate.Feature]featuregate TopologyManagerPolicyOptions: { {Version: version.MustParse("1.26"), Default: false, PreRelease: featuregate.Alpha}, {Version: version.MustParse("1.28"), Default: true, PreRelease: featuregate.Beta}, + {Version: version.MustParse("1.32"), Default: true, PreRelease: featuregate.GA}, }, TranslateStreamCloseWebsocketRequests: { diff --git a/pkg/kubelet/cm/topologymanager/policy_options.go b/pkg/kubelet/cm/topologymanager/policy_options.go index 2ea86d2fd3b..43eb9d886eb 100644 --- a/pkg/kubelet/cm/topologymanager/policy_options.go +++ b/pkg/kubelet/cm/topologymanager/policy_options.go @@ -34,10 +34,11 @@ const ( var ( alphaOptions = sets.New[string]() betaOptions = sets.New[string]( - PreferClosestNUMANodes, MaxAllowableNUMANodes, ) - stableOptions = sets.New[string]() + stableOptions = sets.New[string]( + PreferClosestNUMANodes, + ) ) func CheckPolicyOptionAvailable(option string) error { diff --git a/pkg/kubelet/cm/topologymanager/policy_options_test.go b/pkg/kubelet/cm/topologymanager/policy_options_test.go index 4876f6af7b7..840f4e8a4ce 100644 --- a/pkg/kubelet/cm/topologymanager/policy_options_test.go +++ b/pkg/kubelet/cm/topologymanager/policy_options_test.go @@ -47,9 +47,7 @@ func TestNewTopologyManagerOptions(t *testing.T) { expectedOptions PolicyOptions }{ { - description: "return TopologyManagerOptions with PreferClosestNUMA set to true", - featureGate: pkgfeatures.TopologyManagerPolicyBetaOptions, - featureGateEnable: true, + description: "return TopologyManagerOptions with PreferClosestNUMA set to true", expectedOptions: PolicyOptions{ PreferClosestNUMA: true, MaxAllowableNUMANodes: 8, @@ -74,8 +72,7 @@ func TestNewTopologyManagerOptions(t *testing.T) { description: "fail to set option when TopologyManagerPolicyBetaOptions feature gate is not set", featureGate: pkgfeatures.TopologyManagerPolicyBetaOptions, policyOptions: map[string]string{ - PreferClosestNUMANodes: "true", - MaxAllowableNUMANodes: "8", + MaxAllowableNUMANodes: "8", }, expectedErr: fmt.Errorf("Topology Manager Policy Beta-level Options not enabled,"), }, @@ -87,7 +84,6 @@ func TestNewTopologyManagerOptions(t *testing.T) { }, { description: "fail to parse options with error PreferClosestNUMANodes", - featureGate: pkgfeatures.TopologyManagerPolicyAlphaOptions, featureGateEnable: true, policyOptions: map[string]string{ PreferClosestNUMANodes: "not a boolean", @@ -177,6 +173,10 @@ func TestPolicyDefaultsAvailable(t *testing.T) { option: PreferClosestNUMANodes, expectedAvailable: true, }, + { + option: MaxAllowableNUMANodes, + expectedAvailable: true, + }, } for _, testCase := range testCases { t.Run(testCase.option, func(t *testing.T) { @@ -206,7 +206,7 @@ func TestPolicyOptionsAvailable(t *testing.T) { { option: PreferClosestNUMANodes, featureGate: pkgfeatures.TopologyManagerPolicyBetaOptions, - featureGateEnable: true, + featureGateEnable: false, expectedAvailable: true, }, { @@ -215,10 +215,40 @@ func TestPolicyOptionsAvailable(t *testing.T) { featureGateEnable: false, expectedAvailable: true, }, + { + option: fancyAlphaOption, + featureGate: pkgfeatures.TopologyManagerPolicyAlphaOptions, + featureGateEnable: true, + expectedAvailable: true, + }, + { + option: fancyAlphaOption, + featureGate: pkgfeatures.TopologyManagerPolicyAlphaOptions, + featureGateEnable: false, + expectedAvailable: false, + }, + { + option: fancyBetaOption, + featureGate: pkgfeatures.TopologyManagerPolicyBetaOptions, + featureGateEnable: true, + expectedAvailable: true, + }, + { + option: fancyBetaOption, + featureGate: pkgfeatures.TopologyManagerPolicyBetaOptions, + featureGateEnable: false, + expectedAvailable: false, + }, } + betaOptions.Insert(fancyBetaOption) + alphaOptions.Insert(fancyAlphaOption) for _, testCase := range testCases { t.Run(testCase.option, func(t *testing.T) { featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, testCase.featureGate, testCase.featureGateEnable) + defer func() { + // reset feature flag + featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, testCase.featureGate, !testCase.featureGateEnable) + }() err := CheckPolicyOptionAvailable(testCase.option) isEnabled := (err == nil) if isEnabled != testCase.expectedAvailable { diff --git a/test/featuregates_linter/test_data/versioned_feature_list.yaml b/test/featuregates_linter/test_data/versioned_feature_list.yaml index 817a665ab3f..d4c0b0fef87 100644 --- a/test/featuregates_linter/test_data/versioned_feature_list.yaml +++ b/test/featuregates_linter/test_data/versioned_feature_list.yaml @@ -1302,6 +1302,10 @@ lockToDefault: false preRelease: Beta version: "1.28" + - default: true + lockToDefault: false + preRelease: GA + version: "1.32" - name: TranslateStreamCloseWebsocketRequests versionedSpecs: - default: false