Skip to content

Commit f83d6ed

Browse files
Introduce generics to providers
Signed-off-by: Danil Grigorev <[email protected]>
1 parent 4f114a2 commit f83d6ed

Some content is hidden

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

48 files changed

+2214
-976
lines changed

cmd/main.go

Lines changed: 37 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ import (
4848
operatorv1 "sigs.k8s.io/cluster-api-operator/api/v1alpha2"
4949
providercontroller "sigs.k8s.io/cluster-api-operator/internal/controller"
5050
healtchcheckcontroller "sigs.k8s.io/cluster-api-operator/internal/controller/healthcheck"
51+
"sigs.k8s.io/cluster-api-operator/internal/controller/phases"
52+
"sigs.k8s.io/cluster-api-operator/internal/controller/providers"
5153
)
5254

5355
var (
@@ -220,79 +222,65 @@ func setupChecks(mgr ctrl.Manager) {
220222
}
221223

222224
func setupReconcilers(ctx context.Context, mgr ctrl.Manager, watchConfigSecretChanges bool) {
223-
if err := (&providercontroller.GenericProviderReconciler{
224-
Provider: &operatorv1.CoreProvider{},
225-
ProviderList: &operatorv1.CoreProviderList{},
226-
Client: mgr.GetClient(),
227-
Config: mgr.GetConfig(),
228-
WatchConfigSecretChanges: watchConfigSecretChanges,
229-
}).SetupWithManager(ctx, mgr, concurrency(concurrencyNumber)); err != nil {
225+
if err := providercontroller.NewProviderControllerWrapper(
226+
providers.NewCoreProviderReconcier(mgr),
227+
phases.NewPhase,
228+
watchConfigSecretChanges,
229+
).SetupWithManager(ctx, mgr, concurrency(concurrencyNumber)); err != nil {
230230
setupLog.Error(err, "unable to create controller", "controller", "CoreProvider")
231231
os.Exit(1)
232232
}
233233

234-
if err := (&providercontroller.GenericProviderReconciler{
235-
Provider: &operatorv1.InfrastructureProvider{},
236-
ProviderList: &operatorv1.InfrastructureProviderList{},
237-
Client: mgr.GetClient(),
238-
Config: mgr.GetConfig(),
239-
WatchConfigSecretChanges: watchConfigSecretChanges,
240-
}).SetupWithManager(ctx, mgr, concurrency(concurrencyNumber)); err != nil {
234+
if err := providercontroller.NewProviderControllerWrapper(
235+
providers.NewInfrastructureProviderReconciler(mgr),
236+
phases.NewPhase,
237+
watchConfigSecretChanges,
238+
).SetupWithManager(ctx, mgr, concurrency(concurrencyNumber)); err != nil {
241239
setupLog.Error(err, "unable to create controller", "controller", "InfrastructureProvider")
242240
os.Exit(1)
243241
}
244242

245-
if err := (&providercontroller.GenericProviderReconciler{
246-
Provider: &operatorv1.BootstrapProvider{},
247-
ProviderList: &operatorv1.BootstrapProviderList{},
248-
Client: mgr.GetClient(),
249-
Config: mgr.GetConfig(),
250-
WatchConfigSecretChanges: watchConfigSecretChanges,
251-
}).SetupWithManager(ctx, mgr, concurrency(concurrencyNumber)); err != nil {
243+
if err := providercontroller.NewProviderControllerWrapper(
244+
providers.NewBootstrapProviderReconciler(mgr),
245+
phases.NewPhase,
246+
watchConfigSecretChanges,
247+
).SetupWithManager(ctx, mgr, concurrency(concurrencyNumber)); err != nil {
252248
setupLog.Error(err, "unable to create controller", "controller", "BootstrapProvider")
253249
os.Exit(1)
254250
}
255251

256-
if err := (&providercontroller.GenericProviderReconciler{
257-
Provider: &operatorv1.ControlPlaneProvider{},
258-
ProviderList: &operatorv1.ControlPlaneProviderList{},
259-
Client: mgr.GetClient(),
260-
Config: mgr.GetConfig(),
261-
WatchConfigSecretChanges: watchConfigSecretChanges,
262-
}).SetupWithManager(ctx, mgr, concurrency(concurrencyNumber)); err != nil {
252+
if err := providercontroller.NewProviderControllerWrapper(
253+
providers.NewControlPlaneProviderReconciler(mgr),
254+
phases.NewPhase,
255+
watchConfigSecretChanges,
256+
).SetupWithManager(ctx, mgr, concurrency(concurrencyNumber)); err != nil {
263257
setupLog.Error(err, "unable to create controller", "controller", "ControlPlaneProvider")
264258
os.Exit(1)
265259
}
266260

267-
if err := (&providercontroller.GenericProviderReconciler{
268-
Provider: &operatorv1.AddonProvider{},
269-
ProviderList: &operatorv1.AddonProviderList{},
270-
Client: mgr.GetClient(),
271-
Config: mgr.GetConfig(),
272-
WatchConfigSecretChanges: watchConfigSecretChanges,
273-
}).SetupWithManager(ctx, mgr, concurrency(concurrencyNumber)); err != nil {
261+
if err := providercontroller.NewProviderControllerWrapper(
262+
providers.NewAddonProviderReconciler(mgr),
263+
phases.NewPhase,
264+
watchConfigSecretChanges,
265+
).SetupWithManager(ctx, mgr, concurrency(concurrencyNumber)); err != nil {
274266
setupLog.Error(err, "unable to create controller", "controller", "AddonProvider")
275267
os.Exit(1)
276268
}
277269

278-
if err := (&providercontroller.GenericProviderReconciler{
279-
Provider: &operatorv1.IPAMProvider{},
280-
ProviderList: &operatorv1.IPAMProviderList{},
281-
Client: mgr.GetClient(),
282-
Config: mgr.GetConfig(),
283-
WatchConfigSecretChanges: watchConfigSecretChanges,
284-
}).SetupWithManager(ctx, mgr, concurrency(concurrencyNumber)); err != nil {
270+
if err := providercontroller.NewProviderControllerWrapper(
271+
providers.NewIPAMProviderReconciler(mgr),
272+
phases.NewPhase,
273+
watchConfigSecretChanges,
274+
).SetupWithManager(ctx, mgr, concurrency(concurrencyNumber)); err != nil {
285275
setupLog.Error(err, "unable to create controller", "controller", "IPAMProvider")
286276
os.Exit(1)
287277
}
288278

289-
if err := (&providercontroller.GenericProviderReconciler{
290-
Provider: &operatorv1.RuntimeExtensionProvider{},
291-
ProviderList: &operatorv1.RuntimeExtensionProviderList{},
292-
Client: mgr.GetClient(),
293-
Config: mgr.GetConfig(),
294-
WatchConfigSecretChanges: watchConfigSecretChanges,
295-
}).SetupWithManager(ctx, mgr, concurrency(concurrencyNumber)); err != nil {
279+
if err := providercontroller.NewProviderControllerWrapper(
280+
providers.NewRuntimeExtensionProviderReconciler(mgr),
281+
phases.NewPhase,
282+
watchConfigSecretChanges,
283+
).SetupWithManager(ctx, mgr, concurrency(concurrencyNumber)); err != nil {
296284
setupLog.Error(err, "unable to create controller", "controller", "RuntimeExtensionProvider")
297285
os.Exit(1)
298286
}

cmd/plugin/cmd/delete.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import (
3838
ctrlclient "sigs.k8s.io/controller-runtime/pkg/client"
3939

4040
operatorv1 "sigs.k8s.io/cluster-api-operator/api/v1alpha2"
41+
"sigs.k8s.io/cluster-api-operator/internal/controller/generic"
4142
)
4243

4344
type deleteOptions struct {
@@ -168,7 +169,7 @@ func runDelete() error {
168169

169170
group := &DeleteGroup{
170171
selectors: []fields.Set{},
171-
providers: []genericProviderList{},
172+
providers: []generic.ProviderList{},
172173
}
173174
errors := append([]error{},
174175
group.delete(&operatorv1.BootstrapProviderList{}, deleteOpts.bootstrapProviders...),
@@ -195,10 +196,10 @@ func runDelete() error {
195196

196197
type DeleteGroup struct {
197198
selectors []fields.Set
198-
providers []genericProviderList
199+
providers []generic.ProviderList
199200
}
200201

201-
func (d *DeleteGroup) delete(providerType genericProviderList, names ...string) error {
202+
func (d *DeleteGroup) delete(providerType generic.ProviderList, names ...string) error {
202203
for _, provider := range names {
203204
selector, err := selectorFromProvider(provider)
204205
if err != nil {
@@ -214,7 +215,7 @@ func (d *DeleteGroup) delete(providerType genericProviderList, names ...string)
214215

215216
func (d *DeleteGroup) deleteAll() {
216217
for _, list := range operatorv1.ProviderLists {
217-
providerList, ok := list.(genericProviderList)
218+
providerList, ok := list.(generic.ProviderList)
218219
if !ok {
219220
log.V(5).Info("Expected to get GenericProviderList")
220221
continue
@@ -282,9 +283,9 @@ func selectorFromProvider(provider string) (fields.Set, error) {
282283
return selector, nil
283284
}
284285

285-
func deleteProviders(ctx context.Context, client ctrlclient.Client, providerList genericProviderList, selector ctrlclient.MatchingFieldsSelector) (bool, error) {
286+
func deleteProviders(ctx context.Context, client ctrlclient.Client, providerList generic.ProviderList, selector ctrlclient.MatchingFieldsSelector) (bool, error) {
286287
//nolint:forcetypeassert
287-
providerList = providerList.DeepCopyObject().(genericProviderList)
288+
providerList = providerList.DeepCopyObject().(generic.ProviderList)
288289
ready := true
289290

290291
gvks, _, err := scheme.ObjectKinds(providerList)
@@ -305,7 +306,7 @@ func deleteProviders(ctx context.Context, client ctrlclient.Client, providerList
305306
for _, provider := range providerList.GetItems() {
306307
log.Info(fmt.Sprintf("Deleting %s %s/%s", provider.GetType(), provider.GetName(), provider.GetNamespace()))
307308

308-
provider, ok := provider.(genericProvider)
309+
provider, ok := provider.(generic.Provider)
309310
if !ok {
310311
log.Info(fmt.Sprintf("Expected to get GenericProvider for %s", gvk))
311312
continue

cmd/plugin/cmd/delete_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"k8s.io/apimachinery/pkg/fields"
2525

2626
operatorv1 "sigs.k8s.io/cluster-api-operator/api/v1alpha2"
27+
"sigs.k8s.io/cluster-api-operator/internal/controller/generic"
2728
ctrlclient "sigs.k8s.io/controller-runtime/pkg/client"
2829
)
2930

@@ -79,13 +80,13 @@ func TestSelectorFromProvider(t *testing.T) {
7980
func TestDeleteProviders(t *testing.T) {
8081
tests := []struct {
8182
name string
82-
list genericProviderList
83-
providers []genericProvider
83+
list generic.ProviderList
84+
providers []generic.Provider
8485
selector fields.Set
8586
}{{
8687
name: "Delete providers",
8788
list: &operatorv1.AddonProviderList{},
88-
providers: []genericProvider{&operatorv1.AddonProvider{
89+
providers: []generic.Provider{&operatorv1.AddonProvider{
8990
ObjectMeta: metav1.ObjectMeta{
9091
Name: "addon",
9192
Namespace: "default",

cmd/plugin/cmd/init.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,16 @@ import (
2828
corev1 "k8s.io/api/core/v1"
2929
apierrors "k8s.io/apimachinery/pkg/api/errors"
3030
"k8s.io/apimachinery/pkg/util/wait"
31+
operatorv1 "sigs.k8s.io/cluster-api-operator/api/v1alpha2"
32+
"sigs.k8s.io/cluster-api-operator/internal/controller/generic"
33+
"sigs.k8s.io/cluster-api-operator/util"
3134
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
3235
clusterctlv1 "sigs.k8s.io/cluster-api/cmd/clusterctl/api/v1alpha3"
3336
"sigs.k8s.io/cluster-api/cmd/clusterctl/client/cluster"
3437
configclient "sigs.k8s.io/cluster-api/cmd/clusterctl/client/config"
3538
"sigs.k8s.io/cluster-api/cmd/clusterctl/client/repository"
3639
"sigs.k8s.io/cluster-api/cmd/clusterctl/client/yamlprocessor"
3740
ctrlclient "sigs.k8s.io/controller-runtime/pkg/client"
38-
39-
operatorv1 "sigs.k8s.io/cluster-api-operator/api/v1alpha2"
40-
"sigs.k8s.io/cluster-api-operator/util"
4141
)
4242

4343
type initOptions struct {
@@ -482,7 +482,8 @@ func templateGenericProvider(providerType clusterctlv1.ProviderType, providerInp
482482
return nil, fmt.Errorf("provider name can't be empty")
483483
}
484484

485-
provider := NewGenericProvider(providerType)
485+
rec := generic.ProviderReconcilers[providerType]
486+
provider := rec.GenericProvider()
486487

487488
// Set name and namespace
488489
provider.SetName(name)

0 commit comments

Comments
 (0)