Skip to content

Commit 8fda37a

Browse files
Merge pull request #1273 from theobarberbany/machineset-feature-gating
OCPCLOUD-2565: Machineset feature gating
2 parents 706c4ab + 92954d6 commit 8fda37a

File tree

474 files changed

+21799
-4074
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

474 files changed

+21799
-4074
lines changed

cmd/machineset/main.go

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,34 +20,41 @@ import (
2020
"flag"
2121
"fmt"
2222
"log"
23+
"strings"
2324
"time"
2425

26+
osconfigv1 "github.com/openshift/api/config/v1"
27+
apifeatures "github.com/openshift/api/features"
28+
machinev1 "github.com/openshift/api/machine/v1beta1"
29+
mapiwebhooks "github.com/openshift/machine-api-operator/pkg/webhooks"
2530
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
31+
k8sflag "k8s.io/component-base/cli/flag"
32+
ctrl "sigs.k8s.io/controller-runtime"
33+
34+
"github.com/openshift/library-go/pkg/config/leaderelection"
35+
"github.com/openshift/library-go/pkg/features"
36+
"github.com/openshift/machine-api-operator/pkg/controller"
37+
"github.com/openshift/machine-api-operator/pkg/controller/machineset"
38+
"github.com/openshift/machine-api-operator/pkg/metrics"
39+
"github.com/openshift/machine-api-operator/pkg/operator"
40+
"github.com/openshift/machine-api-operator/pkg/util"
41+
"k8s.io/apiserver/pkg/util/feature"
2642
_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
43+
"k8s.io/component-base/featuregate"
2744
"k8s.io/klog/v2"
28-
ctrl "sigs.k8s.io/controller-runtime"
2945
"sigs.k8s.io/controller-runtime/pkg/cache"
3046
"sigs.k8s.io/controller-runtime/pkg/client/config"
3147
"sigs.k8s.io/controller-runtime/pkg/healthz"
3248
"sigs.k8s.io/controller-runtime/pkg/manager"
3349
"sigs.k8s.io/controller-runtime/pkg/manager/signals"
3450
"sigs.k8s.io/controller-runtime/pkg/metrics/server"
3551
"sigs.k8s.io/controller-runtime/pkg/webhook"
36-
37-
osconfigv1 "github.com/openshift/api/config/v1"
38-
machinev1 "github.com/openshift/api/machine/v1beta1"
39-
"github.com/openshift/library-go/pkg/config/leaderelection"
40-
"github.com/openshift/machine-api-operator/pkg/controller"
41-
"github.com/openshift/machine-api-operator/pkg/controller/machineset"
42-
"github.com/openshift/machine-api-operator/pkg/metrics"
43-
"github.com/openshift/machine-api-operator/pkg/operator"
44-
"github.com/openshift/machine-api-operator/pkg/util"
45-
mapiwebhooks "github.com/openshift/machine-api-operator/pkg/webhooks"
4652
)
4753

4854
const (
4955
defaultWebhookPort = operator.MachineSetWebhookPort
5056
defaultWebhookCertdir = "/etc/machine-api-operator/tls"
57+
timeout = 10 * time.Minute
5158
)
5259

5360
func main() {
@@ -102,6 +109,17 @@ func main() {
102109
fmt.Sprintf("The duration that non-leader candidates will wait after observing a leadership renewal until attempting to acquire leadership of a led but unrenewed leader slot. This is effectively the maximum duration that a leader can be stopped before it is replaced by another candidate. This is only applicable if leader election is enabled. Default: (%s)", defaultLeaderElectionValues.LeaseDuration.Duration),
103110
)
104111

112+
// Sets up feature gates
113+
defaultMutableGate := feature.DefaultMutableFeatureGate
114+
_, err := features.NewFeatureGateOptions(defaultMutableGate, apifeatures.SelfManaged, apifeatures.FeatureGateVSphereStaticIPs, apifeatures.FeatureGateMachineAPIMigration)
115+
if err != nil {
116+
klog.Fatalf("Error setting up feature gates: %v", err)
117+
}
118+
119+
featureGateArgs := map[string]bool{}
120+
flag.Var(k8sflag.NewMapStringBool(&featureGateArgs), "feature-gates", "A set of key=value pairs that describe feature gates for alpha/experimental features. "+
121+
"Options are:\n"+strings.Join(defaultMutableGate.KnownFeatures(), "\n"))
122+
105123
flag.Parse()
106124
if *watchNamespace != "" {
107125
log.Printf("Watching cluster-api objects only in namespace %q for reconciliation.", *watchNamespace)
@@ -120,7 +138,7 @@ func main() {
120138
})
121139

122140
// Create a new Cmd to provide shared dependencies and start components
123-
syncPeriod := 10 * time.Minute
141+
syncPeriod := timeout
124142
opts := manager.Options{
125143
Metrics: server.Options{
126144
BindAddress: *metricsAddress,
@@ -152,6 +170,14 @@ func main() {
152170
log.Fatal(err)
153171
}
154172

173+
// Sets feature gates from flags
174+
klog.Infof("Initializing feature gates: %s", strings.Join(defaultMutableGate.KnownFeatures(), ", "))
175+
err = defaultMutableGate.SetFromMap(featureGateArgs)
176+
if err != nil {
177+
klog.Fatalf("Error setting feature gates from flags: %v", err)
178+
}
179+
klog.Infof("FeatureGateMachineAPIMigration initialised: %t", defaultMutableGate.Enabled(featuregate.Feature(apifeatures.FeatureGateMachineAPIMigration)))
180+
155181
// Enable defaulting and validating webhooks
156182
machineDefaulter, err := mapiwebhooks.NewMachineDefaulter()
157183
if err != nil {
@@ -188,7 +214,7 @@ func main() {
188214
}
189215

190216
// Setup all Controllers
191-
if err := controller.AddToManager(mgr, opts, machineset.Add); err != nil {
217+
if err := controller.AddToManagerWithFeatureGates(mgr, opts, defaultMutableGate, machineset.Add); err != nil {
192218
log.Fatal(err)
193219
}
194220

go.mod

Lines changed: 41 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ require (
3535
)
3636

3737
require (
38-
github.com/golangci/golangci-lint v1.52.2
38+
github.com/golangci/golangci-lint v1.54.2
39+
github.com/openshift/cluster-api-actuator-pkg/testutils v0.0.0-20240626103413-ddea9c7c0aca
3940
golang.org/x/time v0.5.0
4041
k8s.io/component-base v0.30.1
4142
sigs.k8s.io/kube-storage-version-migrator v0.0.6-0.20230721195810-5c8923c5ff96
@@ -44,34 +45,38 @@ require (
4445
require (
4546
4d63.com/gocheckcompilerdirectives v1.2.1 // indirect
4647
4d63.com/gochecknoglobals v0.2.1 // indirect
47-
github.com/Abirdcfly/dupword v0.0.11 // indirect
48-
github.com/Antonboom/errname v0.1.9 // indirect
49-
github.com/Antonboom/nilnil v0.1.3 // indirect
48+
github.com/4meepo/tagalign v1.3.2 // indirect
49+
github.com/Abirdcfly/dupword v0.0.12 // indirect
50+
github.com/Antonboom/errname v0.1.12 // indirect
51+
github.com/Antonboom/nilnil v0.1.7 // indirect
5052
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect
51-
github.com/BurntSushi/toml v1.2.1 // indirect
53+
github.com/BurntSushi/toml v1.3.2 // indirect
5254
github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 // indirect
53-
github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0 // indirect
55+
github.com/GaijinEntertainment/go-exhaustruct/v3 v3.1.0 // indirect
5456
github.com/MakeNowJust/heredoc v1.0.0 // indirect
5557
github.com/Masterminds/semver v1.5.0 // indirect
56-
github.com/OpenPeeDeeP/depguard v1.1.1 // indirect
58+
github.com/OpenPeeDeeP/depguard/v2 v2.1.0 // indirect
59+
github.com/alexkohler/nakedret/v2 v2.0.2 // indirect
5760
github.com/alexkohler/prealloc v1.0.0 // indirect
5861
github.com/alingse/asasalint v0.0.11 // indirect
59-
github.com/ashanbrown/forbidigo v1.5.1 // indirect
62+
github.com/ashanbrown/forbidigo v1.6.0 // indirect
6063
github.com/ashanbrown/makezero v1.1.1 // indirect
6164
github.com/beorn7/perks v1.0.1 // indirect
62-
github.com/bkielbasa/cyclop v1.2.0 // indirect
65+
github.com/bkielbasa/cyclop v1.2.1 // indirect
6366
github.com/blang/semver/v4 v4.0.0 // indirect
6467
github.com/blizzy78/varnamelen v0.8.0 // indirect
6568
github.com/bombsimon/wsl/v3 v3.4.0 // indirect
6669
github.com/breml/bidichk v0.2.4 // indirect
6770
github.com/breml/errchkjson v0.3.1 // indirect
68-
github.com/butuzov/ireturn v0.1.1 // indirect
71+
github.com/butuzov/ireturn v0.2.0 // indirect
72+
github.com/butuzov/mirror v1.1.0 // indirect
73+
github.com/ccojocar/zxcvbn-go v1.0.1 // indirect
6974
github.com/cespare/xxhash/v2 v2.2.0 // indirect
7075
github.com/chai2010/gettext-go v1.0.2 // indirect
7176
github.com/charithe/durationcheck v0.0.10 // indirect
7277
github.com/chavacava/garif v0.0.0-20230227094218-b8c73b2037b8 // indirect
7378
github.com/curioswitch/go-reassign v0.2.0 // indirect
74-
github.com/daixiang0/gci v0.10.1 // indirect
79+
github.com/daixiang0/gci v0.11.0 // indirect
7580
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
7681
github.com/denis-tingaikin/go-header v0.4.3 // indirect
7782
github.com/emicklei/go-restful/v3 v3.12.0 // indirect
@@ -85,7 +90,7 @@ require (
8590
github.com/firefart/nonamedreturns v1.0.4 // indirect
8691
github.com/fsnotify/fsnotify v1.7.0 // indirect
8792
github.com/fzipp/gocyclo v0.6.0 // indirect
88-
github.com/go-critic/go-critic v0.7.0 // indirect
93+
github.com/go-critic/go-critic v0.9.0 // indirect
8994
github.com/go-errors/errors v1.4.2 // indirect
9095
github.com/go-logr/zapr v1.3.0 // indirect
9196
github.com/go-openapi/jsonpointer v0.21.0 // indirect
@@ -111,7 +116,7 @@ require (
111116
github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2 // indirect
112117
github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 // indirect
113118
github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca // indirect
114-
github.com/golangci/misspell v0.4.0 // indirect
119+
github.com/golangci/misspell v0.4.1 // indirect
115120
github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6 // indirect
116121
github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 // indirect
117122
github.com/google/btree v1.0.1 // indirect
@@ -120,7 +125,7 @@ require (
120125
github.com/google/gofuzz v1.2.0 // indirect
121126
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 // indirect
122127
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
123-
github.com/gordonklaus/ineffassign v0.0.0-20230107090616-13ace0543b28 // indirect
128+
github.com/gordonklaus/ineffassign v0.0.0-20230610083614-0e73809eb601 // indirect
124129
github.com/gorilla/websocket v1.5.0 // indirect
125130
github.com/gostaticanalysis/analysisutil v0.7.1 // indirect
126131
github.com/gostaticanalysis/comment v1.4.2 // indirect
@@ -140,15 +145,14 @@ require (
140145
github.com/josharian/intern v1.0.0 // indirect
141146
github.com/json-iterator/go v1.1.12 // indirect
142147
github.com/julz/importas v0.1.0 // indirect
143-
github.com/junk1tm/musttag v0.5.0 // indirect
144148
github.com/kisielk/errcheck v1.6.3 // indirect
145149
github.com/kisielk/gotool v1.0.0 // indirect
146150
github.com/kkHAIKE/contextcheck v1.1.4 // indirect
147151
github.com/kulti/thelper v0.6.3 // indirect
148-
github.com/kunwardeep/paralleltest v1.0.6 // indirect
152+
github.com/kunwardeep/paralleltest v1.0.8 // indirect
149153
github.com/kyoh86/exportloopref v0.1.11 // indirect
150154
github.com/ldez/gomoddirectives v0.2.3 // indirect
151-
github.com/ldez/tagliatelle v0.4.0 // indirect
155+
github.com/ldez/tagliatelle v0.5.0 // indirect
152156
github.com/leonklingele/grouper v1.1.1 // indirect
153157
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect
154158
github.com/lufeee/execinquery v1.2.1 // indirect
@@ -162,7 +166,7 @@ require (
162166
github.com/mattn/go-runewidth v0.0.14 // indirect
163167
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
164168
github.com/mbilski/exhaustivestruct v1.2.0 // indirect
165-
github.com/mgechev/revive v1.3.1 // indirect
169+
github.com/mgechev/revive v1.3.2 // indirect
166170
github.com/mitchellh/go-homedir v1.1.0 // indirect
167171
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
168172
github.com/mitchellh/mapstructure v1.5.0 // indirect
@@ -175,20 +179,19 @@ require (
175179
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
176180
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
177181
github.com/nakabonne/nestif v0.3.1 // indirect
178-
github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 // indirect
179-
github.com/nishanths/exhaustive v0.9.5 // indirect
182+
github.com/nishanths/exhaustive v0.11.0 // indirect
180183
github.com/nishanths/predeclared v0.2.2 // indirect
181-
github.com/nunnatsa/ginkgolinter v0.9.0 // indirect
184+
github.com/nunnatsa/ginkgolinter v0.13.5 // indirect
182185
github.com/olekukonko/tablewriter v0.0.5 // indirect
183186
github.com/pelletier/go-toml/v2 v2.1.0 // indirect
184187
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
185188
github.com/pkg/errors v0.9.1 // indirect
186189
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
187-
github.com/polyfloyd/go-errorlint v1.4.0 // indirect
190+
github.com/polyfloyd/go-errorlint v1.4.4 // indirect
188191
github.com/prometheus/client_model v0.5.0 // indirect
189192
github.com/prometheus/common v0.45.0 // indirect
190193
github.com/prometheus/procfs v0.12.0 // indirect
191-
github.com/quasilyte/go-ruleguard v0.3.19 // indirect
194+
github.com/quasilyte/go-ruleguard v0.4.0 // indirect
192195
github.com/quasilyte/gogrep v0.5.0 // indirect
193196
github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 // indirect
194197
github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 // indirect
@@ -201,11 +204,11 @@ require (
201204
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
202205
github.com/sanposhiho/wastedassign/v2 v2.0.7 // indirect
203206
github.com/sashamelentyev/interfacebloat v1.1.0 // indirect
204-
github.com/sashamelentyev/usestdlibvars v1.23.0 // indirect
205-
github.com/securego/gosec/v2 v2.15.0 // indirect
207+
github.com/sashamelentyev/usestdlibvars v1.24.0 // indirect
208+
github.com/securego/gosec/v2 v2.17.0 // indirect
206209
github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c // indirect
207-
github.com/sirupsen/logrus v1.9.0 // indirect
208-
github.com/sivchari/containedctx v1.0.2 // indirect
210+
github.com/sirupsen/logrus v1.9.3 // indirect
211+
github.com/sivchari/containedctx v1.0.3 // indirect
209212
github.com/sivchari/nosnakecase v1.7.0 // indirect
210213
github.com/sivchari/tenv v1.7.1 // indirect
211214
github.com/sonatard/noctx v0.0.2 // indirect
@@ -220,23 +223,26 @@ require (
220223
github.com/subosito/gotenv v1.6.0 // indirect
221224
github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c // indirect
222225
github.com/tdakkota/asciicheck v0.2.0 // indirect
223-
github.com/tetafro/godot v1.4.11 // indirect
224-
github.com/timakin/bodyclose v0.0.0-20221125081123-e39cf3fc478e // indirect
226+
github.com/tetafro/godot v1.4.14 // indirect
227+
github.com/timakin/bodyclose v0.0.0-20230421092635-574207250966 // indirect
225228
github.com/timonwong/loggercheck v0.9.4 // indirect
226229
github.com/tomarrell/wrapcheck/v2 v2.8.1 // indirect
227230
github.com/tommy-muehle/go-mnd/v2 v2.5.1 // indirect
228-
github.com/ultraware/funlen v0.0.3 // indirect
231+
github.com/ultraware/funlen v0.1.0 // indirect
229232
github.com/ultraware/whitespace v0.0.5 // indirect
230-
github.com/uudashr/gocognit v1.0.6 // indirect
233+
github.com/uudashr/gocognit v1.0.7 // indirect
234+
github.com/xen0n/gosmopolitan v1.2.1 // indirect
231235
github.com/xlab/treeprint v1.2.0 // indirect
232236
github.com/yagipy/maintidx v1.0.0 // indirect
233237
github.com/yeya24/promlinter v0.2.0 // indirect
234-
gitlab.com/bosi/decorder v0.2.3 // indirect
238+
github.com/ykadowak/zerologlint v0.1.3 // indirect
239+
gitlab.com/bosi/decorder v0.4.0 // indirect
235240
go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect
241+
go.tmz.dev/musttag v0.7.2 // indirect
236242
go.uber.org/multierr v1.11.0 // indirect
237243
go.uber.org/zap v1.26.0 // indirect
238244
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect
239-
golang.org/x/exp/typeparams v0.0.0-20230224173230-c95f2b4c22f2 // indirect
245+
golang.org/x/exp/typeparams v0.0.0-20230307190834-24139beb5833 // indirect
240246
golang.org/x/mod v0.16.0 // indirect
241247
golang.org/x/oauth2 v0.18.0 // indirect
242248
golang.org/x/sync v0.6.0 // indirect
@@ -252,12 +258,12 @@ require (
252258
gopkg.in/warnings.v0 v0.1.2 // indirect
253259
gopkg.in/yaml.v2 v2.4.0 // indirect
254260
gopkg.in/yaml.v3 v3.0.1 // indirect
255-
honnef.co/go/tools v0.4.3 // indirect
261+
honnef.co/go/tools v0.4.5 // indirect
256262
k8s.io/apiextensions-apiserver v0.30.1 // indirect
257263
k8s.io/cli-runtime v0.30.0 // indirect
258264
k8s.io/kube-aggregator v0.30.1 // indirect
259265
k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect
260-
mvdan.cc/gofumpt v0.4.0 // indirect
266+
mvdan.cc/gofumpt v0.5.0 // indirect
261267
mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed // indirect
262268
mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b // indirect
263269
mvdan.cc/unparam v0.0.0-20221223090309-7455f1af531d // indirect

0 commit comments

Comments
 (0)