Skip to content

Commit

Permalink
feat: add support for feature gates
Browse files Browse the repository at this point in the history
Signed-off-by: Evan Freed <evan.freed@protonmail.ch>
  • Loading branch information
evanfreed committed Sep 5, 2022
1 parent 0a08a9e commit 5b6e359
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 1 deletion.
40 changes: 40 additions & 0 deletions feature/feature.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/*
Copyright 2022 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

// Package feature implements feature functionality.
package feature

import (
"k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/component-base/featuregate"
)

const (
// Every capg-specific feature gate should add method here following this template:
//
// // owner: @username
// // alpha: v1.X
// MyFeature featuregate.Feature = "MyFeature".

)

func init() {
runtime.Must(MutableGates.Add(defaultCAPGFeatureGates))
}

// defaultCAPGFeatureGates consists of all known capg-specific feature keys.
// To add a new feature, define a key for it above and add it here.
var defaultCAPGFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{
// Every feature should be initiated here:

}
31 changes: 31 additions & 0 deletions feature/gates.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/*
Copyright 2022 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package feature

import (
"k8s.io/component-base/featuregate"
"sigs.k8s.io/cluster-api/feature"
)

var (
// MutableGates is a mutable version of DefaultFeatureGate.
// Only top-level commands/options setup and the k8s.io/component-base/featuregate/testing package should make use of this.
// Tests that need to modify featuregate gates for the duration of their test should use:
// defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.<FeatureName>, <value>)()
MutableGates featuregate.MutableFeatureGate = feature.MutableGates

// Gates is a shared global FeatureGate.
// Top-level commands/options setup that needs to modify this featuregate gate should use DefaultMutableFeatureGate.
Gates featuregate.FeatureGate = MutableGates
)
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ require (
k8s.io/api v0.24.4
k8s.io/apimachinery v0.24.4
k8s.io/client-go v0.24.4
k8s.io/component-base v0.24.2
k8s.io/klog/v2 v2.70.1
k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9
sigs.k8s.io/cluster-api v1.2.1
Expand Down Expand Up @@ -121,7 +122,6 @@ require (
k8s.io/apiextensions-apiserver v0.24.2 // indirect
k8s.io/apiserver v0.24.2 // indirect
k8s.io/cluster-bootstrap v0.24.0 // indirect
k8s.io/component-base v0.24.2 // indirect
k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42 // indirect
sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 // indirect
sigs.k8s.io/kind v0.14.0 // indirect
Expand Down
3 changes: 3 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import (
infrav1alpha4 "sigs.k8s.io/cluster-api-provider-gcp/api/v1alpha4"
infrav1beta1 "sigs.k8s.io/cluster-api-provider-gcp/api/v1beta1"
"sigs.k8s.io/cluster-api-provider-gcp/controllers"
"sigs.k8s.io/cluster-api-provider-gcp/feature"
"sigs.k8s.io/cluster-api-provider-gcp/util/reconciler"
"sigs.k8s.io/cluster-api-provider-gcp/version"
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
Expand Down Expand Up @@ -295,4 +296,6 @@ func initFlags(fs *pflag.FlagSet) {
reconciler.DefaultLoopTimeout,
"The maximum duration a reconcile loop can run (e.g. 90m)",
)

feature.MutableGates.AddFlag(fs)
}

0 comments on commit 5b6e359

Please sign in to comment.