Skip to content

Commit ae6df92

Browse files
committed
support installing providers with custom names in air-gapped envs
Currently we do not support installation of providers with custom names for air-gapped environments. It happens because we inject new names in the list of known providers only for those with URL specified, ignoring config maps. This PR fixes it, so we support both URL and ConfigMap installations with custom names.
1 parent 72873f9 commit ae6df92

File tree

3 files changed

+26
-11
lines changed

3 files changed

+26
-11
lines changed

internal/controller/manifests_downloader.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,6 @@ const (
5050
func (p *phaseReconciler) downloadManifests(ctx context.Context) (reconcile.Result, error) {
5151
log := ctrl.LoggerFrom(ctx)
5252

53-
log.Info("Downloading provider manifests")
54-
5553
// Return immediately if a custom config map is used instead of a url.
5654
if p.provider.GetSpec().FetchConfig != nil && p.provider.GetSpec().FetchConfig.Selector != nil {
5755
log.V(5).Info("Custom config map is used, skip downloading provider manifests")
@@ -75,6 +73,8 @@ func (p *phaseReconciler) downloadManifests(ctx context.Context) (reconcile.Resu
7573
return reconcile.Result{}, nil
7674
}
7775

76+
log.Info("Downloading provider manifests")
77+
7878
repo, err := repositoryFactory(p.providerConfig, p.configClient.Variables())
7979
if err != nil {
8080
err = fmt.Errorf("failed to create repo from provider url for provider %q: %w", p.provider.GetName(), err)

internal/controller/phases.go

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -218,9 +218,23 @@ func (p *phaseReconciler) secretReader(ctx context.Context) (configclient.Reader
218218
}
219219

220220
// If provided store fetch config url in memory reader.
221-
if p.provider.GetSpec().FetchConfig != nil && p.provider.GetSpec().FetchConfig.URL != "" {
222-
log.Info("Custom fetch configuration url was provided")
223-
return mr.AddProvider(p.provider.GetName(), util.ClusterctlProviderType(p.provider), p.provider.GetSpec().FetchConfig.URL)
221+
if p.provider.GetSpec().FetchConfig != nil {
222+
if p.provider.GetSpec().FetchConfig.URL != "" {
223+
log.Info("Custom fetch configuration url was provided")
224+
return mr.AddProvider(p.provider.GetName(), util.ClusterctlProviderType(p.provider), p.provider.GetSpec().FetchConfig.URL)
225+
}
226+
227+
if p.provider.GetSpec().FetchConfig.Selector != nil {
228+
log.Info("Custom fetch configuration config map was provided")
229+
230+
// To register a new provider from the config map, we need to specify a URL with a valid
231+
// format. However, since we're using data from a local config map, URLs are not needed.
232+
// As a workaround, we add a fake but well-formatted URL.
233+
234+
fakeURL := "https://example.com/my-provider"
235+
236+
return mr.AddProvider(p.provider.GetName(), util.ClusterctlProviderType(p.provider), fakeURL)
237+
}
224238
}
225239

226240
return mr, nil

test/e2e/compressed_manifests_test.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333

3434
const (
3535
ociInfrastructureProviderName = "oci"
36+
ociInfrastructureProviderCustomName = "my-oci"
3637
ociInfrastructureProviderVersion = "v0.12.0"
3738
ociInfrastructureProviderDeploymentName = "capoci-controller-manager"
3839
compressedAnnotation = "provider.cluster.x-k8s.io/compressed"
@@ -186,11 +187,11 @@ var _ = Describe("Create and delete a provider with manifests that don't fit the
186187
}, timeout).Should(Equal(true))
187188
})
188189

189-
It("should successfully create and delete an InfrastructureProvider for OCI from a pre-created ConfigMap", func() {
190+
It("should successfully create and delete an InfrastructureProvider for OCI with custom name from a pre-created ConfigMap", func() {
190191
k8sclient := bootstrapClusterProxy.GetClient()
191192
infraProvider := &operatorv1.InfrastructureProvider{
192193
ObjectMeta: metav1.ObjectMeta{
193-
Name: ociInfrastructureProviderName,
194+
Name: ociInfrastructureProviderCustomName,
194195
Namespace: operatorNamespace,
195196
},
196197
Spec: operatorv1.InfrastructureProviderSpec{
@@ -219,7 +220,7 @@ var _ = Describe("Create and delete a provider with manifests that don't fit the
219220
By("Waiting for the infrastructure provider to be ready")
220221
Eventually(func() bool {
221222
infraProvider := &operatorv1.InfrastructureProvider{}
222-
key := client.ObjectKey{Namespace: operatorNamespace, Name: ociInfrastructureProviderName}
223+
key := client.ObjectKey{Namespace: operatorNamespace, Name: ociInfrastructureProviderCustomName}
223224
if err := k8sclient.Get(ctx, key, infraProvider); err != nil {
224225
return false
225226
}
@@ -235,7 +236,7 @@ var _ = Describe("Create and delete a provider with manifests that don't fit the
235236
By("Waiting for status.IntalledVersion to be set")
236237
Eventually(func() bool {
237238
infraProvider := &operatorv1.InfrastructureProvider{}
238-
key := client.ObjectKey{Namespace: operatorNamespace, Name: ociInfrastructureProviderName}
239+
key := client.ObjectKey{Namespace: operatorNamespace, Name: ociInfrastructureProviderCustomName}
239240
if err := k8sclient.Get(ctx, key, infraProvider); err != nil {
240241
return false
241242
}
@@ -256,8 +257,6 @@ var _ = Describe("Create and delete a provider with manifests that don't fit the
256257

257258
Expect(cm.BinaryData[componentsConfigMapKey]).ToNot(BeEmpty())
258259

259-
Expect(k8sclient.Delete(ctx, infraProvider)).To(Succeed())
260-
261260
By("Waiting for the infrastructure provider deployment to be created")
262261
Eventually(func() bool {
263262
deployment := &appsv1.Deployment{}
@@ -266,6 +265,8 @@ var _ = Describe("Create and delete a provider with manifests that don't fit the
266265
return k8sclient.Get(ctx, key, deployment) == nil
267266
}, timeout).Should(Equal(true))
268267

268+
Expect(k8sclient.Delete(ctx, infraProvider)).To(Succeed())
269+
269270
By("Waiting for the infrastructure provider deployment to be deleted")
270271
Eventually(func() bool {
271272
deployment := &appsv1.Deployment{}

0 commit comments

Comments
 (0)