diff --git a/staging/src/k8s.io/component-base/metrics/features/kube_features.go b/staging/src/k8s.io/component-base/metrics/features/kube_features.go index 8758d7725eb..5f41802cba2 100644 --- a/staging/src/k8s.io/component-base/metrics/features/kube_features.go +++ b/staging/src/k8s.io/component-base/metrics/features/kube_features.go @@ -17,14 +17,29 @@ limitations under the License. package features import ( + "k8s.io/apimachinery/pkg/util/version" "k8s.io/component-base/featuregate" ) -func featureGates() map[featuregate.Feature]featuregate.FeatureSpec { - return map[featuregate.Feature]featuregate.FeatureSpec{} +const ( + // owner: @logicalhan + // kep: https://kep.k8s.io/3466 + ComponentSLIs featuregate.Feature = "ComponentSLIs" +) + +func featureGates() map[featuregate.Feature]featuregate.VersionedSpecs { + return map[featuregate.Feature]featuregate.VersionedSpecs{ + ComponentSLIs: { + {Version: version.MustParse("1.26"), Default: false, PreRelease: featuregate.Alpha}, + {Version: version.MustParse("1.27"), Default: true, PreRelease: featuregate.Beta}, + // ComponentSLIs officially graduated to GA in v1.29 but the gate was not updated until v1.32. + // To support emulated versions, keep the gate until v1.35. + {Version: version.MustParse("1.32"), Default: true, PreRelease: featuregate.GA, LockToDefault: true}, + }, + } } // AddFeatureGates adds all feature gates used by this package. -func AddFeatureGates(mutableFeatureGate featuregate.MutableFeatureGate) error { - return mutableFeatureGate.Add(featureGates()) +func AddFeatureGates(mutableFeatureGate featuregate.MutableVersionedFeatureGate) error { + return mutableFeatureGate.AddVersioned(featureGates()) } diff --git a/test/featuregates_linter/test_data/versioned_feature_list.yaml b/test/featuregates_linter/test_data/versioned_feature_list.yaml index 04636a22bb0..b12ef2257c8 100644 --- a/test/featuregates_linter/test_data/versioned_feature_list.yaml +++ b/test/featuregates_linter/test_data/versioned_feature_list.yaml @@ -182,6 +182,20 @@ lockToDefault: false preRelease: Alpha version: "1.29" +- name: ComponentSLIs + versionedSpecs: + - default: false + lockToDefault: false + preRelease: Alpha + version: "1.26" + - default: true + lockToDefault: false + preRelease: Beta + version: "1.27" + - default: true + lockToDefault: true + preRelease: GA + version: "1.32" - name: ConcurrentWatchObjectDecode versionedSpecs: - default: false