Skip to content

Commit 6d7ea16

Browse files
Pass image overrides to in-memory client
- Add tests verifying functionality of overrides client for image or provider URL resolve Signed-off-by: Danil-Grigorev <[email protected]>
1 parent 505d465 commit 6d7ea16

File tree

2 files changed

+73
-7
lines changed

2 files changed

+73
-7
lines changed

internal/controller/manifests_downloader_test.go

Lines changed: 53 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import (
2222

2323
. "github.com/onsi/gomega"
2424
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
25+
clusterctlv1 "sigs.k8s.io/cluster-api/cmd/clusterctl/api/v1alpha3"
26+
configclient "sigs.k8s.io/cluster-api/cmd/clusterctl/client/config"
2527
"sigs.k8s.io/controller-runtime/pkg/client/fake"
2628

2729
operatorv1 "sigs.k8s.io/cluster-api-operator/api/v1alpha2"
@@ -34,14 +36,12 @@ func TestManifestsDownloader(t *testing.T) {
3436

3537
fakeclient := fake.NewClientBuilder().WithObjects().Build()
3638

37-
namespace := "test-namespace"
38-
3939
p := &phaseReconciler{
4040
ctrlClient: fakeclient,
4141
provider: &operatorv1.CoreProvider{
4242
ObjectMeta: metav1.ObjectMeta{
4343
Name: "cluster-api",
44-
Namespace: namespace,
44+
Namespace: "test-namespace",
4545
},
4646
Spec: operatorv1.CoreProviderSpec{
4747
ProviderSpec: operatorv1.ProviderSpec{
@@ -67,3 +67,53 @@ func TestManifestsDownloader(t *testing.T) {
6767

6868
g.Expect(exists).To(BeTrue())
6969
}
70+
71+
func TestProviderDownloadWithOverrides(t *testing.T) {
72+
g := NewWithT(t)
73+
74+
ctx := context.Background()
75+
76+
fakeclient := fake.NewClientBuilder().WithObjects().Build()
77+
78+
namespace := "test-namespace"
79+
80+
reader := configclient.NewMemoryReader()
81+
g.Expect(
82+
reader.AddProvider("cluster-api", clusterctlv1.CoreProviderType, "https://github.com/kubernetes-sigs/cluster-api/releases/v1.4.3/core-components.yaml")
83+
).ToNot(HaveOccurred())
84+
85+
overridesClient, err := configclient.New(ctx, "", configclient.InjectReader(reader))
86+
g.Expect(err).ToNot(HaveOccurred())
87+
88+
overridesClient.Variables().Set("images", `
89+
all:
90+
repository: "myorg.io/local-repo"
91+
`)
92+
93+
p := &phaseReconciler{
94+
ctrlClient: fakeclient,
95+
provider: &operatorv1.CoreProvider{
96+
ObjectMeta: metav1.ObjectMeta{
97+
Name: "cluster-api",
98+
Namespace: namespace,
99+
},
100+
Spec: operatorv1.CoreProviderSpec{},
101+
},
102+
overridesClient: overridesClient,
103+
}
104+
105+
_, err = p.initializePhaseReconciler(ctx)
106+
g.Expect(err).ToNot(HaveOccurred())
107+
108+
_, err = p.downloadManifests(ctx)
109+
g.Expect(err).ToNot(HaveOccurred())
110+
111+
_, err = p.load(ctx)
112+
g.Expect(err).ToNot(HaveOccurred())
113+
114+
_, err = p.fetch(ctx)
115+
g.Expect(err).ToNot(HaveOccurred())
116+
117+
g.Expect(p.components.Images()).To(HaveExactElements([]string{"myorg.io/local-repo/cluster-api-controller:v1.4.3"}))
118+
g.Expect(p.components.Version()).To(Equal("v1.4.3"))
119+
}

internal/controller/phases.go

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ type phaseReconciler struct {
6565
options repository.ComponentsOptions
6666
providerConfig configclient.Provider
6767
configClient configclient.Client
68+
overridesClient configclient.Client
6869
components repository.Components
6970
clusterctlProvider *clusterctlv1.Provider
7071
}
@@ -126,18 +127,33 @@ func (p *phaseReconciler) initializePhaseReconciler(ctx context.Context) (reconc
126127
initConfig, err := configclient.New(ctx, path)
127128
if err != nil {
128129
return reconcile.Result{}, err
130+
} else if path != "" {
131+
// Set the image and providers override client
132+
p.overridesClient = initConfig
129133
}
130134

131-
providers, err := initConfig.Providers().List()
132-
if err != nil {
133-
return reconcile.Result{}, err
135+
overrideProviders := []configclient.Provider{}
136+
137+
if p.overridesClient != nil {
138+
providers, err := p.overridesClient.Providers().List()
139+
if err != nil {
140+
return reconcile.Result{}, err
141+
}
142+
143+
overrideProviders = providers
134144
}
135145

136-
reader, err := p.secretReader(ctx, providers...)
146+
reader, err := p.secretReader(ctx, overrideProviders...)
137147
if err != nil {
138148
return reconcile.Result{}, err
139149
}
140150

151+
if p.overridesClient != nil {
152+
if imageOverrides, err := p.overridesClient.Variables().Get("images"); err == nil {
153+
reader.Set("images", imageOverrides)
154+
}
155+
}
156+
141157
// Load provider's secret and config url.
142158
p.configClient, err = configclient.New(ctx, "", configclient.InjectReader(reader))
143159
if err != nil {

0 commit comments

Comments
 (0)