Skip to content

Commit 82d7655

Browse files
committed
fix: restrict configmap lookup to the provider namespace
When we use configmaps as a provider source, we filter them by provided labels and then take the latest version. Unfortunatelly, we list configmaps in all namespaces, which is not correct. This PR restricts the search by the provider namespace only.
1 parent c76a729 commit 82d7655

File tree

7 files changed

+31
-29
lines changed

7 files changed

+31
-29
lines changed

internal/controller/manifests_downloader.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ func (p *phaseReconciler) checkConfigMapExists(ctx context.Context, labelSelecto
127127
labelSet := labels.Set(labelSelector.MatchLabels)
128128
listOpts := []client.ListOption{
129129
client.MatchingLabelsSelector{Selector: labels.SelectorFromSet(labelSet)},
130+
client.InNamespace(p.provider.GetNamespace()),
130131
}
131132

132133
var configMapList corev1.ConfigMapList

internal/controller/phases.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ func (p *phaseReconciler) load(ctx context.Context) (reconcile.Result, error) {
176176
return reconcile.Result{}, wrapPhaseError(err, "failed to load additional manifests", operatorv1.ProviderInstalledCondition)
177177
}
178178

179-
p.repo, err = p.configmapRepository(ctx, labelSelector, additionalManifests)
179+
p.repo, err = p.configmapRepository(ctx, labelSelector, p.provider.GetNamespace(), additionalManifests)
180180
if err != nil {
181181
return reconcile.Result{}, wrapPhaseError(err, "failed to load the repository", operatorv1.ProviderInstalledCondition)
182182
}
@@ -269,7 +269,7 @@ func (p *phaseReconciler) secretReader(ctx context.Context, providers ...configc
269269

270270
// configmapRepository use clusterctl NewMemoryRepository structure to store the manifests
271271
// and metadata from a given configmap.
272-
func (p *phaseReconciler) configmapRepository(ctx context.Context, labelSelector *metav1.LabelSelector, additionalManifests string) (repository.Repository, error) {
272+
func (p *phaseReconciler) configmapRepository(ctx context.Context, labelSelector *metav1.LabelSelector, namespace, additionalManifests string) (repository.Repository, error) {
273273
mr := repository.NewMemoryRepository()
274274
mr.WithPaths("", "components.yaml")
275275

@@ -280,7 +280,7 @@ func (p *phaseReconciler) configmapRepository(ctx context.Context, labelSelector
280280
return nil, err
281281
}
282282

283-
if err = p.ctrlClient.List(ctx, cml, &client.ListOptions{LabelSelector: selector}); err != nil {
283+
if err = p.ctrlClient.List(ctx, cml, &client.ListOptions{LabelSelector: selector, Namespace: namespace}); err != nil {
284284
return nil, err
285285
}
286286

internal/controller/phases_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,7 @@ metadata:
388388
g.Expect(fakeclient.Create(ctx, &tt.configMaps[i])).To(Succeed())
389389
}
390390

391-
got, err := p.configmapRepository(context.TODO(), p.provider.GetSpec().FetchConfig.Selector, tt.additionalManifests)
391+
got, err := p.configmapRepository(context.TODO(), p.provider.GetSpec().FetchConfig.Selector, "ns1", tt.additionalManifests)
392392
if len(tt.wantErr) > 0 {
393393
g.Expect(err).Should(MatchError(tt.wantErr))
394394
return

test/e2e/air_gapped_test.go

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,14 @@ var _ = Describe("Install Core Provider in an air-gapped environment", func() {
5454
configMaps = append(configMaps, configMap)
5555
}
5656

57+
By("Creating capi-system namespace")
58+
namespace := &corev1.Namespace{
59+
ObjectMeta: metav1.ObjectMeta{
60+
Name: capiSystemNamespace,
61+
},
62+
}
63+
Expect(bootstrapCluster.Create(ctx, namespace)).To(Succeed())
64+
5765
By("Applying core provider manifests to the cluster")
5866
for _, cm := range configMaps {
5967
Expect(bootstrapCluster.Create(ctx, &cm)).To(Succeed())
@@ -65,7 +73,7 @@ var _ = Describe("Install Core Provider in an air-gapped environment", func() {
6573
coreProvider := &operatorv1.CoreProvider{
6674
ObjectMeta: metav1.ObjectMeta{
6775
Name: coreProviderName,
68-
Namespace: operatorNamespace,
76+
Namespace: capiSystemNamespace,
6977
},
7078
Spec: operatorv1.CoreProviderSpec{
7179
ProviderSpec: operatorv1.ProviderSpec{
@@ -87,7 +95,7 @@ var _ = Describe("Install Core Provider in an air-gapped environment", func() {
8795
By("Waiting for the core provider deployment to be ready")
8896
framework.WaitForDeploymentsAvailable(ctx, framework.WaitForDeploymentsAvailableInput{
8997
Getter: bootstrapClusterProxy.GetClient(),
90-
Deployment: &appsv1.Deployment{ObjectMeta: metav1.ObjectMeta{Name: coreProviderDeploymentName, Namespace: operatorNamespace}},
98+
Deployment: &appsv1.Deployment{ObjectMeta: metav1.ObjectMeta{Name: coreProviderDeploymentName, Namespace: capiSystemNamespace}},
9199
}, e2eConfig.GetIntervals(bootstrapClusterProxy.GetName(), "wait-controllers")...)
92100

93101
By("Waiting for core provider to be ready")
@@ -104,7 +112,7 @@ var _ = Describe("Install Core Provider in an air-gapped environment", func() {
104112
It("should successfully upgrade a CoreProvider (v1.5.4 -> latest)", func() {
105113
bootstrapCluster := bootstrapClusterProxy.GetClient()
106114
coreProvider := &operatorv1.CoreProvider{}
107-
key := client.ObjectKey{Namespace: operatorNamespace, Name: coreProviderName}
115+
key := client.ObjectKey{Namespace: capiSystemNamespace, Name: coreProviderName}
108116
Expect(bootstrapCluster.Get(ctx, key, coreProvider)).To(Succeed())
109117

110118
coreProvider.Spec.Version = ""
@@ -114,7 +122,7 @@ var _ = Describe("Install Core Provider in an air-gapped environment", func() {
114122
By("Waiting for the core provider deployment to be ready")
115123
framework.WaitForDeploymentsAvailable(ctx, framework.WaitForDeploymentsAvailableInput{
116124
Getter: bootstrapClusterProxy.GetClient(),
117-
Deployment: &appsv1.Deployment{ObjectMeta: metav1.ObjectMeta{Name: coreProviderDeploymentName, Namespace: operatorNamespace}},
125+
Deployment: &appsv1.Deployment{ObjectMeta: metav1.ObjectMeta{Name: coreProviderDeploymentName, Namespace: capiSystemNamespace}},
118126
}, e2eConfig.GetIntervals(bootstrapClusterProxy.GetName(), "wait-controllers")...)
119127

120128
By("Waiting for core provider to be ready")
@@ -132,15 +140,15 @@ var _ = Describe("Install Core Provider in an air-gapped environment", func() {
132140
bootstrapCluster := bootstrapClusterProxy.GetClient()
133141
coreProvider := &operatorv1.CoreProvider{ObjectMeta: metav1.ObjectMeta{
134142
Name: coreProviderName,
135-
Namespace: operatorNamespace,
143+
Namespace: capiSystemNamespace,
136144
}}
137145

138146
Expect(bootstrapCluster.Delete(ctx, coreProvider)).To(Succeed())
139147

140148
By("Waiting for the core provider deployment to be deleted")
141149
WaitForDelete(ctx, For(&appsv1.Deployment{ObjectMeta: metav1.ObjectMeta{
142150
Name: coreProviderDeploymentName,
143-
Namespace: operatorNamespace,
151+
Namespace: capiSystemNamespace,
144152
}}).In(bootstrapCluster), e2eConfig.GetIntervals(bootstrapClusterProxy.GetName(), "wait-controllers")...)
145153

146154
By("Waiting for the core provider object to be deleted")
@@ -168,5 +176,13 @@ var _ = Describe("Install Core Provider in an air-gapped environment", func() {
168176
for _, cm := range configMaps {
169177
Expect(bootstrapCluster.Delete(ctx, &cm)).To(Succeed())
170178
}
179+
180+
By("Deleting capi-system namespace")
181+
namespace := &corev1.Namespace{
182+
ObjectMeta: metav1.ObjectMeta{
183+
Name: capiSystemNamespace,
184+
},
185+
}
186+
Expect(bootstrapCluster.Delete(ctx, namespace)).To(Succeed())
171187
})
172188
})

test/e2e/helpers_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ var (
2828
)
2929

3030
const (
31-
operatorNamespace = "capi-operator-system"
31+
operatorNamespace = "capi-operator-system"
32+
capiSystemNamespace = "capi-system"
3233

3334
previousCAPIVersion = "v1.5.4"
3435

test/e2e/resources/core-cluster-api-v1.5.4.yaml

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,6 @@
11
apiVersion: v1
22
data:
33
components: |
4-
apiVersion: v1
5-
kind: Namespace
6-
metadata:
7-
labels:
8-
cluster.x-k8s.io/provider: cluster-api
9-
control-plane: controller-manager
10-
name: capi-system
11-
---
124
apiVersion: apiextensions.k8s.io/v1
135
kind: CustomResourceDefinition
146
metadata:
@@ -11797,4 +11789,4 @@ metadata:
1179711789
provider.cluster.x-k8s.io/type: core
1179811790
provider.cluster.x-k8s.io/version: v1.5.4
1179911791
name: core-cluster-api-v1.5.4
11800-
namespace: capi-operator-system
11792+
namespace: capi-system

test/e2e/resources/core-cluster-api-v1.6.0.yaml

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,6 @@
11
apiVersion: v1
22
data:
33
components: |
4-
apiVersion: v1
5-
kind: Namespace
6-
metadata:
7-
labels:
8-
cluster.x-k8s.io/provider: cluster-api
9-
control-plane: controller-manager
10-
name: capi-system
11-
---
124
apiVersion: apiextensions.k8s.io/v1
135
kind: CustomResourceDefinition
146
metadata:
@@ -9860,4 +9852,4 @@ metadata:
98609852
provider.cluster.x-k8s.io/type: core
98619853
provider.cluster.x-k8s.io/version: v1.6.0
98629854
name: core-cluster-api-v1.6.0
9863-
namespace: capi-operator-system
9855+
namespace: capi-system

0 commit comments

Comments
 (0)