Skip to content

Commit 2b4e873

Browse files
committed
Add config secret support
1 parent 2297ad4 commit 2b4e873

File tree

2 files changed

+85
-26
lines changed

2 files changed

+85
-26
lines changed

cmd/plugin/cmd/init.go

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,12 @@ type initOptions struct {
5252
infrastructureProviders []string
5353
// ipamProviders []string
5454
// runtimeExtensionProviders []string
55-
addonProviders []string
56-
targetNamespace string
57-
validate bool
58-
waitProviders bool
59-
waitProviderTimeout int
55+
addonProviders []string
56+
targetNamespace string
57+
configSecretName string
58+
configSecretNamespace string
59+
waitProviders bool
60+
waitProviderTimeout int
6061
}
6162

6263
const (
@@ -142,12 +143,14 @@ func init() {
142143
"Add-on providers and versions (e.g. helm:v0.1.0) to add to the management cluster.")
143144
initCmd.Flags().StringVarP(&initOpts.targetNamespace, "target-namespace", "n", "capi-operator-system",
144145
"The target namespace where the operator should be deployed. If unspecified, the 'capi-operator-system' namespace is used.")
146+
initCmd.Flags().StringVar(&initOpts.configSecretName, "config-secret-name", "",
147+
"The config secret name to be used for the management cluster.")
148+
initCmd.Flags().StringVar(&initOpts.configSecretNamespace, "config-secret-namespace", "capi-operator-system",
149+
"The config secret namespace to be used for the management cluster.")
145150
initCmd.Flags().BoolVar(&initOpts.waitProviders, "wait-providers", false,
146151
"Wait for providers to be installed.")
147152
initCmd.Flags().IntVar(&initOpts.waitProviderTimeout, "wait-provider-timeout", 5*60,
148153
"Wait timeout per provider installation in seconds. This value is ignored if --wait-providers is false")
149-
initCmd.Flags().BoolVar(&initOpts.validate, "validate", true,
150-
"If true, capioperator will validate that the deployments will succeed on the management cluster.")
151154

152155
RootCmd.AddCommand(initCmd)
153156
}
@@ -212,35 +215,35 @@ func runInit() error {
212215
func initProviders(ctx context.Context, client ctrlclient.Client, initOpts *initOptions) error {
213216
// Deploy Core Provider.
214217
if initOpts.coreProvider != "" {
215-
if err := createGenericProvider(ctx, client, newGenericProvider(clusterctlv1.CoreProviderType), initOpts.coreProvider, initOpts.targetNamespace); err != nil {
218+
if err := createGenericProvider(ctx, client, newGenericProvider(clusterctlv1.CoreProviderType), initOpts.coreProvider, initOpts.targetNamespace, initOpts.configSecretName, initOpts.configSecretNamespace); err != nil {
216219
return fmt.Errorf("cannot create core provider: %w", err)
217220
}
218221
}
219222

220223
// Deploy Bootstrap Providers.
221224
for _, bootstrapProvider := range initOpts.bootstrapProviders {
222-
if err := createGenericProvider(ctx, client, newGenericProvider(clusterctlv1.BootstrapProviderType), bootstrapProvider, initOpts.targetNamespace); err != nil {
225+
if err := createGenericProvider(ctx, client, newGenericProvider(clusterctlv1.BootstrapProviderType), bootstrapProvider, initOpts.targetNamespace, initOpts.configSecretName, initOpts.configSecretNamespace); err != nil {
223226
return fmt.Errorf("cannot create bootstrap provider: %w", err)
224227
}
225228
}
226229

227230
// Deploy Infrastructure Providers.
228231
for _, infrastructureProvider := range initOpts.infrastructureProviders {
229-
if err := createGenericProvider(ctx, client, newGenericProvider(clusterctlv1.InfrastructureProviderType), infrastructureProvider, initOpts.targetNamespace); err != nil {
232+
if err := createGenericProvider(ctx, client, newGenericProvider(clusterctlv1.InfrastructureProviderType), infrastructureProvider, initOpts.targetNamespace, initOpts.configSecretName, initOpts.configSecretNamespace); err != nil {
230233
return fmt.Errorf("cannot create infrastructure provider: %w", err)
231234
}
232235
}
233236

234237
// Deploy Control Plane Providers.
235238
for _, controlPlaneProvider := range initOpts.controlPlaneProviders {
236-
if err := createGenericProvider(ctx, client, newGenericProvider(clusterctlv1.ControlPlaneProviderType), controlPlaneProvider, initOpts.targetNamespace); err != nil {
239+
if err := createGenericProvider(ctx, client, newGenericProvider(clusterctlv1.ControlPlaneProviderType), controlPlaneProvider, initOpts.targetNamespace, initOpts.configSecretName, initOpts.configSecretNamespace); err != nil {
237240
return fmt.Errorf("cannot create control plane provider: %w", err)
238241
}
239242
}
240243

241244
// Deploy Add-on Providers.
242245
for _, addonProvider := range initOpts.addonProviders {
243-
if err := createGenericProvider(ctx, client, newGenericProvider(clusterctlv1.AddonProviderType), addonProvider, initOpts.targetNamespace); err != nil {
246+
if err := createGenericProvider(ctx, client, newGenericProvider(clusterctlv1.AddonProviderType), addonProvider, initOpts.targetNamespace, initOpts.configSecretName, initOpts.configSecretNamespace); err != nil {
244247
return fmt.Errorf("cannot create addon provider: %w", err)
245248
}
246249
}
@@ -375,7 +378,7 @@ func newGenericProvider(providerType clusterctlv1.ProviderType) genericprovider.
375378
}
376379

377380
// createGenericProvider creates a generic provider.
378-
func createGenericProvider(ctx context.Context, client ctrlclient.Client, provider genericprovider.GenericProvider, providerInput string, defaultNamespace string) error {
381+
func createGenericProvider(ctx context.Context, client ctrlclient.Client, provider genericprovider.GenericProvider, providerInput, defaultNamespace, configSecretName, configSecretNamespace string) error {
379382
// Parse the provider string
380383
// Format is <provider-name>:<optional-namespace>:<optional-version>
381384
// Example: aws:capa-system:v2.1.5 -> name: aws, namespace: capa-system, version: v2.1.5
@@ -421,6 +424,23 @@ func createGenericProvider(ctx context.Context, client ctrlclient.Client, provid
421424
version = "latest"
422425
}
423426

427+
// Set config secret
428+
if configSecretName != "" {
429+
spec := provider.GetSpec()
430+
431+
if configSecretNamespace == "" {
432+
configSecretNamespace = defaultNamespace
433+
}
434+
435+
spec.ConfigSecret = &operatorv1.SecretReference{
436+
Name: configSecretName,
437+
Namespace: configSecretNamespace,
438+
}
439+
provider.SetSpec(spec)
440+
} else if configSecretNamespace != "" {
441+
return fmt.Errorf("cannot specify config secret namespace without config secret name")
442+
}
443+
424444
// Ensure that desired namespace exists
425445
if err := EnsureNamespaceExists(ctx, client, namespace); err != nil {
426446
return fmt.Errorf("cannot ensure that namespace exists: %w", err)

cmd/plugin/cmd/init_test.go

Lines changed: 52 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ func TestInitProviders(t *testing.T) {
175175
{
176176
name: "core provider",
177177
wantedProviders: []genericprovider.GenericProvider{
178-
generateGenericProvider(clusterctlv1.CoreProviderType, "cluster-api", "capi-system", "v1.6.0"),
178+
generateGenericProvider(clusterctlv1.CoreProviderType, "cluster-api", "capi-system", "v1.6.0", "", ""),
179179
},
180180
wantErr: false,
181181
opts: &initOptions{
@@ -186,7 +186,7 @@ func TestInitProviders(t *testing.T) {
186186
{
187187
name: "core provider in default target namespace",
188188
wantedProviders: []genericprovider.GenericProvider{
189-
generateGenericProvider(clusterctlv1.CoreProviderType, "cluster-api", "capi-operator-system", "v1.6.0"),
189+
generateGenericProvider(clusterctlv1.CoreProviderType, "cluster-api", "capi-operator-system", "v1.6.0", "", ""),
190190
},
191191
wantErr: false,
192192
opts: &initOptions{
@@ -197,7 +197,7 @@ func TestInitProviders(t *testing.T) {
197197
{
198198
name: "core provider without version",
199199
wantedProviders: []genericprovider.GenericProvider{
200-
generateGenericProvider(clusterctlv1.CoreProviderType, "cluster-api", "capi-system", ""),
200+
generateGenericProvider(clusterctlv1.CoreProviderType, "cluster-api", "capi-system", "", "", ""),
201201
},
202202
wantErr: false,
203203
opts: &initOptions{
@@ -208,19 +208,54 @@ func TestInitProviders(t *testing.T) {
208208
{
209209
name: "core provider without namespace and version",
210210
wantedProviders: []genericprovider.GenericProvider{
211-
generateGenericProvider(clusterctlv1.CoreProviderType, "cluster-api", "capi-operator-system", ""),
211+
generateGenericProvider(clusterctlv1.CoreProviderType, "cluster-api", "capi-operator-system", "", "", ""),
212212
},
213213
wantErr: false,
214214
opts: &initOptions{
215215
coreProvider: "cluster-api",
216216
targetNamespace: "capi-operator-system",
217217
},
218218
},
219+
{
220+
name: "core provider with config secret",
221+
wantedProviders: []genericprovider.GenericProvider{
222+
generateGenericProvider(clusterctlv1.CoreProviderType, "cluster-api", "capi-operator-system", "", "capi-secrets", ""),
223+
},
224+
wantErr: false,
225+
opts: &initOptions{
226+
coreProvider: "cluster-api",
227+
targetNamespace: "capi-operator-system",
228+
configSecretName: "capi-secrets",
229+
},
230+
},
231+
{
232+
name: "core provider with config secret in a custom namespace",
233+
wantedProviders: []genericprovider.GenericProvider{
234+
generateGenericProvider(clusterctlv1.CoreProviderType, "cluster-api", "capi-operator-system", "", "capi-secrets", "custom-namespace"),
235+
},
236+
wantErr: false,
237+
opts: &initOptions{
238+
coreProvider: "cluster-api",
239+
targetNamespace: "capi-operator-system",
240+
configSecretName: "capi-secrets",
241+
configSecretNamespace: "custom-namespace",
242+
},
243+
},
244+
{
245+
name: "core provider with config secret namespace but with no name",
246+
wantedProviders: []genericprovider.GenericProvider{},
247+
wantErr: true,
248+
opts: &initOptions{
249+
coreProvider: "cluster-api",
250+
targetNamespace: "capi-operator-system",
251+
configSecretNamespace: "custom-namespace",
252+
},
253+
},
219254
{
220255
name: "multiple providers of one type",
221256
wantedProviders: []genericprovider.GenericProvider{
222-
generateGenericProvider(clusterctlv1.InfrastructureProviderType, "aws", "capa-operator-system", ""),
223-
generateGenericProvider(clusterctlv1.InfrastructureProviderType, "docker", "capd-operator-system", ""),
257+
generateGenericProvider(clusterctlv1.InfrastructureProviderType, "aws", "capa-operator-system", "", "", ""),
258+
generateGenericProvider(clusterctlv1.InfrastructureProviderType, "docker", "capd-operator-system", "", "", ""),
224259
},
225260
wantErr: false,
226261
opts: &initOptions{
@@ -234,12 +269,12 @@ func TestInitProviders(t *testing.T) {
234269
{
235270
name: "all providers",
236271
wantedProviders: []genericprovider.GenericProvider{
237-
generateGenericProvider(clusterctlv1.CoreProviderType, "cluster-api", "capi-system", "v1.6.0"),
238-
generateGenericProvider(clusterctlv1.InfrastructureProviderType, "aws", "capa-operator-system", ""),
239-
generateGenericProvider(clusterctlv1.InfrastructureProviderType, "docker", "capd-operator-system", ""),
240-
generateGenericProvider(clusterctlv1.ControlPlaneProviderType, "kubeadm", "kcp-system", ""),
241-
generateGenericProvider(clusterctlv1.BootstrapProviderType, "kubeadm", "bootstrap-system", ""),
242-
generateGenericProvider(clusterctlv1.AddonProviderType, "helm", "caaph-system", ""),
272+
generateGenericProvider(clusterctlv1.CoreProviderType, "cluster-api", "capi-system", "v1.6.0", "", ""),
273+
generateGenericProvider(clusterctlv1.InfrastructureProviderType, "aws", "capa-operator-system", "", "", ""),
274+
generateGenericProvider(clusterctlv1.InfrastructureProviderType, "docker", "capd-operator-system", "", "", ""),
275+
generateGenericProvider(clusterctlv1.ControlPlaneProviderType, "kubeadm", "kcp-system", "", "", ""),
276+
generateGenericProvider(clusterctlv1.BootstrapProviderType, "kubeadm", "bootstrap-system", "", "", ""),
277+
generateGenericProvider(clusterctlv1.AddonProviderType, "helm", "caaph-system", "", "", ""),
243278
},
244279
wantErr: false,
245280
opts: &initOptions{
@@ -450,7 +485,7 @@ func TestDeployCAPIOperator(t *testing.T) {
450485
}
451486
}
452487

453-
func generateGenericProvider(providerType clusterctlv1.ProviderType, name, namespace, version string) genericprovider.GenericProvider {
488+
func generateGenericProvider(providerType clusterctlv1.ProviderType, name, namespace, version, configSecretName, configSecretNamespace string) genericprovider.GenericProvider {
454489
genericProvider := newGenericProvider(providerType)
455490

456491
genericProvider.SetName(name)
@@ -459,6 +494,10 @@ func generateGenericProvider(providerType clusterctlv1.ProviderType, name, names
459494

460495
spec := genericProvider.GetSpec()
461496
spec.Version = version
497+
spec.ConfigSecret = &operatorv1.SecretReference{
498+
Name: configSecretName,
499+
Namespace: configSecretNamespace,
500+
}
462501
genericProvider.SetSpec(spec)
463502

464503
return genericProvider

0 commit comments

Comments
 (0)