@@ -23,6 +23,7 @@ import (
23
23
"fmt"
24
24
"io"
25
25
"net/url"
26
+ "os"
26
27
"strings"
27
28
28
29
corev1 "k8s.io/api/core/v1"
@@ -114,18 +115,35 @@ func (p *phaseReconciler) preflightChecks(ctx context.Context) (reconcile.Result
114
115
115
116
// initializePhaseReconciler initializes phase reconciler.
116
117
func (p * phaseReconciler ) initializePhaseReconciler (ctx context.Context ) (reconcile.Result , error ) {
117
- // Load provider's secret and config url.
118
- reader , err := p .secretReader (ctx )
119
- if err != nil {
120
- return reconcile.Result {}, wrapPhaseError (err , "failed to load the secret reader" )
118
+ path := configPath
119
+ if _ , err := os .Stat (configPath ); os .IsNotExist (err ) {
120
+ path = ""
121
+ } else if err != nil {
122
+ return reconcile.Result {}, err
121
123
}
122
124
123
125
// Initialize a client for interacting with the clusterctl configuration.
124
- p .configClient , err = configclient .New (ctx , "" , configclient .InjectReader (reader ))
126
+ initConfig , err := configclient .New (ctx , path )
127
+ if err != nil {
128
+ return reconcile.Result {}, err
129
+ }
130
+
131
+ providers , err := initConfig .Providers ().List ()
125
132
if err != nil {
126
133
return reconcile.Result {}, err
127
134
}
128
135
136
+ reader , err := p .secretReader (ctx , providers ... )
137
+ if err != nil {
138
+ return reconcile.Result {}, err
139
+ }
140
+
141
+ // Load provider's secret and config url.
142
+ p .configClient , err = configclient .New (ctx , "" , configclient .InjectReader (reader ))
143
+ if err != nil {
144
+ return reconcile.Result {}, wrapPhaseError (err , "failed to load the secret reader" )
145
+ }
146
+
129
147
// Get returns the configuration for the provider with a given name/type.
130
148
// This is done using clusterctl internal API types.
131
149
p .providerConfig , err = p .configClient .Providers ().Get (p .provider .GetName (), util .ClusterctlProviderType (p .provider ))
@@ -197,7 +215,7 @@ func (p *phaseReconciler) load(ctx context.Context) (reconcile.Result, error) {
197
215
198
216
// secretReader use clusterctl MemoryReader structure to store the configuration variables
199
217
// that are obtained from a secret and try to set fetch url config.
200
- func (p * phaseReconciler ) secretReader (ctx context.Context ) (configclient.Reader , error ) {
218
+ func (p * phaseReconciler ) secretReader (ctx context.Context , providers ... configclient. Provider ) (configclient.Reader , error ) {
201
219
log := ctrl .LoggerFrom (ctx )
202
220
203
221
mr := configclient .NewMemoryReader ()
@@ -222,6 +240,12 @@ func (p *phaseReconciler) secretReader(ctx context.Context) (configclient.Reader
222
240
log .Info ("No configuration secret was specified" )
223
241
}
224
242
243
+ for _ , provider := range providers {
244
+ if _ , err := mr .AddProvider (provider .Name (), provider .Type (), provider .URL ()); err != nil {
245
+ return nil , err
246
+ }
247
+ }
248
+
225
249
// If provided store fetch config url in memory reader.
226
250
if p .provider .GetSpec ().FetchConfig != nil {
227
251
if p .provider .GetSpec ().FetchConfig .URL != "" {
0 commit comments