@@ -63,13 +63,20 @@ import (
6363 "github.com/openshift/cluster-capi-operator/pkg/controllers/kubeconfig"
6464 "github.com/openshift/cluster-capi-operator/pkg/controllers/secretsync"
6565 "github.com/openshift/cluster-capi-operator/pkg/operatorstatus"
66+ "github.com/openshift/cluster-capi-operator/pkg/providerimages"
6667 "github.com/openshift/cluster-capi-operator/pkg/util"
6768 "github.com/openshift/cluster-capi-operator/pkg/webhook"
6869)
6970
7071const (
71- defaultImagesLocation = "./dev-images.json"
72+ defaultImagesLocation = "./dev-images.json"
73+
7274 defaultMachineAPINamespace = "openshift-machine-api"
75+
76+ pullSecretPathEnvVar = "PULL_SECRET_PATH"
77+ defaultPullSecretPath = "/var/run/secrets/pull-secret/config.json"
78+ providerImageDirEnvVar = "PROVIDER_IMAGE_DIR"
79+ defaultProviderImageDirPath = "/var/lib/provider-images"
7380)
7481
7582func initScheme (scheme * runtime.Scheme ) {
@@ -208,6 +215,28 @@ func main() {
208215 os .Exit (1 )
209216 }
210217
218+ pullSecretPath := os .Getenv (pullSecretPathEnvVar )
219+ if pullSecretPath == "" {
220+ pullSecretPath = defaultPullSecretPath
221+ }
222+
223+ providerImageDir := os .Getenv (providerImageDirEnvVar )
224+ if providerImageDir == "" {
225+ providerImageDir = defaultProviderImageDirPath
226+ }
227+
228+ pullSecret , err := os .ReadFile (pullSecretPath )
229+ if err != nil {
230+ klog .Error (err , "unable to read pull secret" , "path" , pullSecretPath )
231+ os .Exit (1 )
232+ }
233+
234+ providerImages , err := providerimages .ReadProviderImages (context .Background (), containerImages , providerImageDir , pullSecret )
235+ if err != nil {
236+ klog .Error (err , "unable to get provider image metadata" )
237+ os .Exit (1 )
238+ }
239+
211240 infra , err := util .GetInfra (context .Background (), mgr .GetAPIReader ())
212241 if err != nil {
213242 klog .Error (err , "unable to get infrastructure object" )
@@ -220,7 +249,7 @@ func main() {
220249 os .Exit (1 )
221250 }
222251
223- setupPlatformReconcilers (mgr , infra , platform , containerImages , applyClient , apiextensionsClient , * managedNamespace )
252+ setupPlatformReconcilers (mgr , infra , platform , containerImages , providerImages , applyClient , apiextensionsClient , * managedNamespace )
224253
225254 // +kubebuilder:scaffold:builder
226255
@@ -252,17 +281,17 @@ func getClusterOperatorStatusClient(mgr manager.Manager, controller string, plat
252281 }
253282}
254283
255- func setupPlatformReconcilers (mgr manager.Manager , infra * configv1.Infrastructure , platform configv1.PlatformType , containerImages map [string ]string , applyClient * kubernetes.Clientset , apiextensionsClient * apiextensionsclient.Clientset , managedNamespace string ) {
284+ func setupPlatformReconcilers (mgr manager.Manager , infra * configv1.Infrastructure , platform configv1.PlatformType , containerImages map [string ]string , providerImages map [ string ]providerimages. ProviderImageManifests , applyClient * kubernetes.Clientset , apiextensionsClient * apiextensionsclient.Clientset , managedNamespace string ) {
256285 // Only setup reconcile controllers and webhooks when the platform is supported.
257286 // This avoids unnecessary CAPI providers discovery, installs and reconciles when the platform is not supported.
258287 isUnsupportedPlatform := false
259288
260289 switch platform {
261290 case configv1 .AWSPlatformType :
262- setupReconcilers (mgr , infra , platform , & awsv1.AWSCluster {}, containerImages , applyClient , apiextensionsClient , managedNamespace )
291+ setupReconcilers (mgr , infra , platform , & awsv1.AWSCluster {}, containerImages , providerImages , applyClient , apiextensionsClient , managedNamespace )
263292 setupWebhooks (mgr )
264293 case configv1 .GCPPlatformType :
265- setupReconcilers (mgr , infra , platform , & gcpv1.GCPCluster {}, containerImages , applyClient , apiextensionsClient , managedNamespace )
294+ setupReconcilers (mgr , infra , platform , & gcpv1.GCPCluster {}, containerImages , providerImages , applyClient , apiextensionsClient , managedNamespace )
266295 setupWebhooks (mgr )
267296 case configv1 .AzurePlatformType :
268297 azureCloudEnvironment := getAzureCloudEnvironment (infra .Status .PlatformStatus )
@@ -272,20 +301,20 @@ func setupPlatformReconcilers(mgr manager.Manager, infra *configv1.Infrastructur
272301 isUnsupportedPlatform = true
273302 } else {
274303 // The ClusterOperator Controller must run in all cases.
275- setupReconcilers (mgr , infra , platform , & azurev1.AzureCluster {}, containerImages , applyClient , apiextensionsClient , managedNamespace )
304+ setupReconcilers (mgr , infra , platform , & azurev1.AzureCluster {}, containerImages , providerImages , applyClient , apiextensionsClient , managedNamespace )
276305 setupWebhooks (mgr )
277306 }
278307 case configv1 .PowerVSPlatformType :
279- setupReconcilers (mgr , infra , platform , & ibmpowervsv1.IBMPowerVSCluster {}, containerImages , applyClient , apiextensionsClient , managedNamespace )
308+ setupReconcilers (mgr , infra , platform , & ibmpowervsv1.IBMPowerVSCluster {}, containerImages , providerImages , applyClient , apiextensionsClient , managedNamespace )
280309 setupWebhooks (mgr )
281310 case configv1 .VSpherePlatformType :
282- setupReconcilers (mgr , infra , platform , & vspherev1.VSphereCluster {}, containerImages , applyClient , apiextensionsClient , managedNamespace )
311+ setupReconcilers (mgr , infra , platform , & vspherev1.VSphereCluster {}, containerImages , providerImages , applyClient , apiextensionsClient , managedNamespace )
283312 setupWebhooks (mgr )
284313 case configv1 .OpenStackPlatformType :
285- setupReconcilers (mgr , infra , platform , & openstackv1.OpenStackCluster {}, containerImages , applyClient , apiextensionsClient , managedNamespace )
314+ setupReconcilers (mgr , infra , platform , & openstackv1.OpenStackCluster {}, containerImages , providerImages , applyClient , apiextensionsClient , managedNamespace )
286315 setupWebhooks (mgr )
287316 case configv1 .BareMetalPlatformType :
288- setupReconcilers (mgr , infra , platform , & metal3v1.Metal3Cluster {}, containerImages , applyClient , apiextensionsClient , managedNamespace )
317+ setupReconcilers (mgr , infra , platform , & metal3v1.Metal3Cluster {}, containerImages , providerImages , applyClient , apiextensionsClient , managedNamespace )
289318 setupWebhooks (mgr )
290319 default :
291320 klog .Infof ("Detected platform %q is not supported, skipping capi controllers setup" , platform )
@@ -297,7 +326,7 @@ func setupPlatformReconcilers(mgr manager.Manager, infra *configv1.Infrastructur
297326 setupClusterOperatorController (mgr , platform , managedNamespace , isUnsupportedPlatform )
298327}
299328
300- func setupReconcilers (mgr manager.Manager , infra * configv1.Infrastructure , platform configv1.PlatformType , infraClusterObject client.Object , containerImages map [string ]string , applyClient * kubernetes.Clientset , apiextensionsClient * apiextensionsclient.Clientset , managedNamespace string ) {
329+ func setupReconcilers (mgr manager.Manager , infra * configv1.Infrastructure , platform configv1.PlatformType , infraClusterObject client.Object , containerImages map [string ]string , providerImages map [ string ]providerimages. ProviderImageManifests , applyClient * kubernetes.Clientset , apiextensionsClient * apiextensionsclient.Clientset , managedNamespace string ) {
301330 if err := (& corecluster.CoreClusterController {
302331 ClusterOperatorStatusClient : getClusterOperatorStatusClient (mgr , "cluster-capi-operator-cluster-resource-controller" , platform , managedNamespace ),
303332 Cluster : & clusterv1beta1.Cluster {},
@@ -333,6 +362,7 @@ func setupReconcilers(mgr manager.Manager, infra *configv1.Infrastructure, platf
333362 Platform : platform ,
334363 ApplyClient : applyClient ,
335364 APIExtensionsClient : apiextensionsClient ,
365+ ProviderImages : providerImages ,
336366 }).SetupWithManager (mgr ); err != nil {
337367 klog .Error (err , "unable to create capi installer controller" , "controller" , "CAPIInstaller" )
338368 os .Exit (1 )
0 commit comments