Skip to content

Commit 2dc4296

Browse files
committed
🐛: fix unknown provider errors with fetchConfigs
chore: refactor loadCustomProviders
1 parent fe7e70d commit 2dc4296

File tree

7 files changed

+30812
-25
lines changed

7 files changed

+30812
-25
lines changed

internal/controller/phases.go

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,16 @@ func (p *phaseReconciler) initializePhaseReconciler(ctx context.Context) (reconc
147147
return reconcile.Result{}, err
148148
}
149149

150+
customProviders, err := p.getCustomProviders(ctx)
151+
if err != nil {
152+
return reconcile.Result{}, err
153+
}
154+
155+
reader, err = loadCustomProviders(customProviders, reader)
156+
if err != nil {
157+
return reconcile.Result{}, err
158+
}
159+
150160
// Load provider's secret and config url.
151161
p.configClient, err = configclient.New(ctx, "", configclient.InjectReader(reader))
152162
if err != nil {
@@ -562,6 +572,69 @@ func getProvider(provider operatorv1.GenericProvider, defaultVersion string) clu
562572
return *clusterctlProvider
563573
}
564574

575+
func (p *phaseReconciler) getCustomProviders(ctx context.Context) ([]operatorv1.GenericProvider, error) {
576+
log := ctrl.LoggerFrom(ctx)
577+
578+
customProviders := []operatorv1.GenericProvider{}
579+
currProviderName := p.provider.GetName()
580+
currProviderType := p.provider.GetType()
581+
582+
providerLists := []client.ObjectList{
583+
&operatorv1.CoreProviderList{},
584+
&operatorv1.BootstrapProviderList{},
585+
&operatorv1.ControlPlaneProviderList{},
586+
&operatorv1.InfrastructureProviderList{},
587+
&operatorv1.AddonProviderList{},
588+
&operatorv1.IPAMProviderList{},
589+
&operatorv1.RuntimeExtensionProviderList{},
590+
}
591+
592+
for _, providerList := range providerLists {
593+
if err := p.ctrlClient.List(ctx, providerList); err != nil {
594+
return nil, fmt.Errorf("cannot get a list of providers from the server: %w", err)
595+
}
596+
597+
genericProviderList, ok := providerList.(operatorv1.GenericProviderList)
598+
if !ok {
599+
return nil, fmt.Errorf("cannot cast providers list to GenericProviderList")
600+
}
601+
602+
genericProviderListItems := genericProviderList.GetItems()
603+
for i, provider := range genericProviderListItems {
604+
if provider.GetName() == currProviderName && provider.GetType() == currProviderType || provider.GetSpec().FetchConfig == nil {
605+
continue
606+
}
607+
608+
log.Info("custom provider found", provider.GetName(), provider.GetType(), provider.GetNamespace())
609+
610+
customProviders = append(customProviders, genericProviderListItems[i])
611+
}
612+
}
613+
614+
return customProviders, nil
615+
}
616+
617+
func loadCustomProviders(providers []operatorv1.GenericProvider, reader configclient.Reader) (configclient.Reader, error) {
618+
mr, ok := reader.(*configclient.MemoryReader)
619+
if !ok {
620+
return nil, fmt.Errorf("unable to load custom providers, invalid reader passed")
621+
}
622+
623+
for _, provider := range providers {
624+
if provider.GetSpec().FetchConfig.URL == "" {
625+
if _, err := mr.AddProvider(provider.GetName(), util.ClusterctlProviderType(provider), fakeURL); err != nil {
626+
return nil, err
627+
}
628+
} else {
629+
if _, err := mr.AddProvider(provider.GetName(), util.ClusterctlProviderType(provider), provider.GetSpec().FetchConfig.URL); err != nil {
630+
return nil, err
631+
}
632+
}
633+
}
634+
635+
return mr, nil
636+
}
637+
565638
// delete deletes the provider components using clusterctl library.
566639
func (p *phaseReconciler) delete(ctx context.Context) (reconcile.Result, error) {
567640
log := ctrl.LoggerFrom(ctx)

0 commit comments

Comments
 (0)