Skip to content

Commit 0745be4

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 0745be4

File tree

2 files changed

+72
-7
lines changed

2 files changed

+72
-7
lines changed

internal/controller/manifests_downloader_test.go

Lines changed: 52 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,52 @@ 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+
_, err := reader.AddProvider("cluster-api", clusterctlv1.CoreProviderType, "https://github.com/kubernetes-sigs/cluster-api/releases/v1.4.3/core-components.yaml")
82+
g.Expect(err).ToNot(HaveOccurred())
83+
84+
overridesClient, err := configclient.New(ctx, "", configclient.InjectReader(reader))
85+
g.Expect(err).ToNot(HaveOccurred())
86+
87+
overridesClient.Variables().Set("images", `
88+
all:
89+
repository: "myorg.io/local-repo"
90+
`)
91+
92+
p := &phaseReconciler{
93+
ctrlClient: fakeclient,
94+
provider: &operatorv1.CoreProvider{
95+
ObjectMeta: metav1.ObjectMeta{
96+
Name: "cluster-api",
97+
Namespace: namespace,
98+
},
99+
Spec: operatorv1.CoreProviderSpec{},
100+
},
101+
overridesClient: overridesClient,
102+
}
103+
104+
_, err = p.initializePhaseReconciler(ctx)
105+
g.Expect(err).ToNot(HaveOccurred())
106+
107+
_, err = p.downloadManifests(ctx)
108+
g.Expect(err).ToNot(HaveOccurred())
109+
110+
_, err = p.load(ctx)
111+
g.Expect(err).ToNot(HaveOccurred())
112+
113+
_, err = p.fetch(ctx)
114+
g.Expect(err).ToNot(HaveOccurred())
115+
116+
g.Expect(p.components.Images()).To(HaveExactElements([]string{"myorg.io/local-repo/cluster-api-controller:v1.4.3"}))
117+
g.Expect(p.components.Version()).To(Equal("v1.4.3"))
118+
}

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)