Skip to content

Commit 77d4e11

Browse files
Introduce generics to providers
Signed-off-by: Danil Grigorev <[email protected]>
1 parent b174f6c commit 77d4e11

Some content is hidden

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

41 files changed

+2031
-1235
lines changed

cmd/main.go

+26-36
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ import (
4747
operatorv1 "sigs.k8s.io/cluster-api-operator/api/v1alpha2"
4848
providercontroller "sigs.k8s.io/cluster-api-operator/internal/controller"
4949
healtchcheckcontroller "sigs.k8s.io/cluster-api-operator/internal/controller/healthcheck"
50+
"sigs.k8s.io/cluster-api-operator/internal/controller/phases"
51+
"sigs.k8s.io/cluster-api-operator/internal/controller/providers"
5052
)
5153

5254
var (
@@ -210,62 +212,50 @@ func setupChecks(mgr ctrl.Manager) {
210212
}
211213

212214
func setupReconcilers(mgr ctrl.Manager) {
213-
if err := (&providercontroller.GenericProviderReconciler{
214-
Provider: &operatorv1.CoreProvider{},
215-
ProviderList: &operatorv1.CoreProviderList{},
216-
Client: mgr.GetClient(),
217-
Config: mgr.GetConfig(),
218-
}).SetupWithManager(mgr, concurrency(concurrencyNumber)); err != nil {
215+
if err := providercontroller.NewProviderControllerWrapper(
216+
providers.NewCoreProviderReconcier(mgr),
217+
phases.NewPhase,
218+
).SetupWithManager(mgr, concurrency(concurrencyNumber)); err != nil {
219219
setupLog.Error(err, "unable to create controller", "controller", "CoreProvider")
220220
os.Exit(1)
221221
}
222222

223-
if err := (&providercontroller.GenericProviderReconciler{
224-
Provider: &operatorv1.InfrastructureProvider{},
225-
ProviderList: &operatorv1.InfrastructureProviderList{},
226-
Client: mgr.GetClient(),
227-
Config: mgr.GetConfig(),
228-
}).SetupWithManager(mgr, concurrency(concurrencyNumber)); err != nil {
223+
if err := providercontroller.NewProviderControllerWrapper(
224+
providers.NewInfrastructureProviderReconciler(mgr),
225+
phases.NewPhase,
226+
).SetupWithManager(mgr, concurrency(concurrencyNumber)); err != nil {
229227
setupLog.Error(err, "unable to create controller", "controller", "InfrastructureProvider")
230228
os.Exit(1)
231229
}
232230

233-
if err := (&providercontroller.GenericProviderReconciler{
234-
Provider: &operatorv1.BootstrapProvider{},
235-
ProviderList: &operatorv1.BootstrapProviderList{},
236-
Client: mgr.GetClient(),
237-
Config: mgr.GetConfig(),
238-
}).SetupWithManager(mgr, concurrency(concurrencyNumber)); err != nil {
231+
if err := providercontroller.NewProviderControllerWrapper(
232+
providers.NewBootstrapProviderReconciler(mgr),
233+
phases.NewPhase,
234+
).SetupWithManager(mgr, concurrency(concurrencyNumber)); err != nil {
239235
setupLog.Error(err, "unable to create controller", "controller", "BootstrapProvider")
240236
os.Exit(1)
241237
}
242238

243-
if err := (&providercontroller.GenericProviderReconciler{
244-
Provider: &operatorv1.ControlPlaneProvider{},
245-
ProviderList: &operatorv1.ControlPlaneProviderList{},
246-
Client: mgr.GetClient(),
247-
Config: mgr.GetConfig(),
248-
}).SetupWithManager(mgr, concurrency(concurrencyNumber)); err != nil {
239+
if err := providercontroller.NewProviderControllerWrapper(
240+
providers.NewControlPlaneProviderReconciler(mgr),
241+
phases.NewPhase,
242+
).SetupWithManager(mgr, concurrency(concurrencyNumber)); err != nil {
249243
setupLog.Error(err, "unable to create controller", "controller", "ControlPlaneProvider")
250244
os.Exit(1)
251245
}
252246

253-
if err := (&providercontroller.GenericProviderReconciler{
254-
Provider: &operatorv1.AddonProvider{},
255-
ProviderList: &operatorv1.AddonProviderList{},
256-
Client: mgr.GetClient(),
257-
Config: mgr.GetConfig(),
258-
}).SetupWithManager(mgr, concurrency(concurrencyNumber)); err != nil {
247+
if err := providercontroller.NewProviderControllerWrapper(
248+
providers.NewAddonProviderReconciler(mgr),
249+
phases.NewPhase,
250+
).SetupWithManager(mgr, concurrency(concurrencyNumber)); err != nil {
259251
setupLog.Error(err, "unable to create controller", "controller", "AddonProvider")
260252
os.Exit(1)
261253
}
262254

263-
if err := (&providercontroller.GenericProviderReconciler{
264-
Provider: &operatorv1.IPAMProvider{},
265-
ProviderList: &operatorv1.IPAMProviderList{},
266-
Client: mgr.GetClient(),
267-
Config: mgr.GetConfig(),
268-
}).SetupWithManager(mgr, concurrency(concurrencyNumber)); err != nil {
255+
if err := providercontroller.NewProviderControllerWrapper(
256+
providers.NewIPAMProviderReconciler(mgr),
257+
phases.NewPhase,
258+
).SetupWithManager(mgr, concurrency(concurrencyNumber)); err != nil {
269259
setupLog.Error(err, "unable to create controller", "controller", "IPAMProvider")
270260
os.Exit(1)
271261
}

cmd/plugin/cmd/delete.go

+8-7
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import (
4040
ctrlclient "sigs.k8s.io/controller-runtime/pkg/client"
4141

4242
operatorv1 "sigs.k8s.io/cluster-api-operator/api/v1alpha2"
43+
"sigs.k8s.io/cluster-api-operator/internal/controller/generic"
4344
)
4445

4546
type deleteOptions struct {
@@ -170,7 +171,7 @@ func runDelete() error {
170171

171172
group := &DeleteGroup{
172173
selectors: []fields.Set{},
173-
providers: []genericProviderList{},
174+
providers: []generic.ProviderList{},
174175
}
175176
errors := append([]error{},
176177
group.delete(&operatorv1.BootstrapProviderList{}, deleteOpts.bootstrapProviders...),
@@ -196,10 +197,10 @@ func runDelete() error {
196197

197198
type DeleteGroup struct {
198199
selectors []fields.Set
199-
providers []genericProviderList
200+
providers []generic.ProviderList
200201
}
201202

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

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

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

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

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

cmd/plugin/cmd/delete_test.go

+4-3
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

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

cmd/plugin/cmd/init.go

+5-4
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 {
@@ -467,7 +467,8 @@ func createGenericProvider(ctx context.Context, client ctrlclient.Client, provid
467467
return nil, fmt.Errorf("provider name can't be empty")
468468
}
469469

470-
provider := NewGenericProvider(providerType)
470+
rec := generic.ProviderReconcilers[providerType]
471+
provider := rec.GenericProvider()
471472

472473
// Set name and namespace
473474
provider.SetName(name)

0 commit comments

Comments
 (0)