Skip to content

Commit 2dc1ef8

Browse files
committed
add check for CloudControllerManager capability
1 parent 28fae3a commit 2dc1ef8

File tree

2 files changed

+98
-5
lines changed

2 files changed

+98
-5
lines changed

pkg/types/validation/installconfig.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
azurevalidation "github.com/openshift/installer/pkg/types/azure/validation"
3131
"github.com/openshift/installer/pkg/types/baremetal"
3232
baremetalvalidation "github.com/openshift/installer/pkg/types/baremetal/validation"
33+
"github.com/openshift/installer/pkg/types/external"
3334
"github.com/openshift/installer/pkg/types/featuregates"
3435
"github.com/openshift/installer/pkg/types/gcp"
3536
gcpvalidation "github.com/openshift/installer/pkg/types/gcp/validation"
@@ -218,6 +219,17 @@ func ValidateInstallConfig(c *types.InstallConfig, usingAgentMethod bool) field.
218219
"disabling CloudCredential capability available only for baremetal platforms"))
219220
}
220221
}
222+
223+
if !enabledCaps.Has(configv1.ClusterVersionCapabilityCloudControllerManager) {
224+
if c.None == nil && c.BareMetal == nil && c.External == nil {
225+
allErrs = append(allErrs, field.Invalid(field.NewPath("capabilities"), c.Capabilities,
226+
"disabling CloudControllerManager is only supported on the Baremetal, None, or External platform with cloudControllerManager value none"))
227+
}
228+
if c.External != nil && c.External.CloudControllerManager == external.CloudControllerManagerTypeExternal {
229+
allErrs = append(allErrs, field.Invalid(field.NewPath("capabilities"), c.Capabilities,
230+
"disabling CloudControllerManager on External platform supported only with cloudControllerManager value none"))
231+
}
232+
}
221233
}
222234

223235
allErrs = append(allErrs, ValidateFeatureSet(c)...)

pkg/types/validation/installconfig_test.go

Lines changed: 86 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"github.com/openshift/installer/pkg/types/aws"
1919
"github.com/openshift/installer/pkg/types/azure"
2020
"github.com/openshift/installer/pkg/types/baremetal"
21+
"github.com/openshift/installer/pkg/types/external"
2122
"github.com/openshift/installer/pkg/types/gcp"
2223
"github.com/openshift/installer/pkg/types/ibmcloud"
2324
"github.com/openshift/installer/pkg/types/libvirt"
@@ -1550,7 +1551,7 @@ func TestValidateInstallConfig(t *testing.T) {
15501551
installConfig: func() *types.InstallConfig {
15511552
c := validInstallConfig()
15521553
c.Capabilities = &types.Capabilities{BaselineCapabilitySet: "v4.11"}
1553-
c.Capabilities.AdditionalEnabledCapabilities = append(c.Capabilities.AdditionalEnabledCapabilities, configv1.ClusterVersionCapabilityCloudCredential)
1554+
c.Capabilities.AdditionalEnabledCapabilities = append(c.Capabilities.AdditionalEnabledCapabilities, configv1.ClusterVersionCapabilityCloudCredential, configv1.ClusterVersionCapabilityCloudControllerManager)
15541555
return c
15551556
}(),
15561557
},
@@ -1597,7 +1598,7 @@ func TestValidateInstallConfig(t *testing.T) {
15971598
installConfig: func() *types.InstallConfig {
15981599
c := validInstallConfig()
15991600
c.Capabilities = &types.Capabilities{BaselineCapabilitySet: "v4.11"}
1600-
c.Capabilities.AdditionalEnabledCapabilities = append(c.Capabilities.AdditionalEnabledCapabilities, configv1.ClusterVersionCapabilityCloudCredential, configv1.ClusterVersionCapabilityOpenShiftSamples)
1601+
c.Capabilities.AdditionalEnabledCapabilities = append(c.Capabilities.AdditionalEnabledCapabilities, configv1.ClusterVersionCapabilityCloudCredential, configv1.ClusterVersionCapabilityOpenShiftSamples, configv1.ClusterVersionCapabilityCloudControllerManager)
16011602
return c
16021603
}(),
16031604
},
@@ -2253,7 +2254,7 @@ func TestValidateInstallConfig(t *testing.T) {
22532254
c.Capabilities = &types.Capabilities{
22542255
BaselineCapabilitySet: configv1.ClusterVersionCapabilitySetNone,
22552256
}
2256-
c.Capabilities.AdditionalEnabledCapabilities = append(c.Capabilities.AdditionalEnabledCapabilities, configv1.ClusterVersionCapabilityCloudCredential)
2257+
c.Capabilities.AdditionalEnabledCapabilities = append(c.Capabilities.AdditionalEnabledCapabilities, configv1.ClusterVersionCapabilityCloudCredential, configv1.ClusterVersionCapabilityCloudControllerManager)
22572258
return c
22582259
}(),
22592260
},
@@ -2263,7 +2264,7 @@ func TestValidateInstallConfig(t *testing.T) {
22632264
c := validInstallConfig()
22642265
c.Capabilities = &types.Capabilities{
22652266
BaselineCapabilitySet: configv1.ClusterVersionCapabilitySetNone,
2266-
AdditionalEnabledCapabilities: []configv1.ClusterVersionCapability{configv1.ClusterVersionCapabilityBaremetal, configv1.ClusterVersionCapabilityMachineAPI, configv1.ClusterVersionCapabilityCloudCredential},
2267+
AdditionalEnabledCapabilities: []configv1.ClusterVersionCapability{configv1.ClusterVersionCapabilityBaremetal, configv1.ClusterVersionCapabilityMachineAPI, configv1.ClusterVersionCapabilityCloudCredential, configv1.ClusterVersionCapabilityCloudControllerManager},
22672268
}
22682269
return c
22692270
}(),
@@ -2274,7 +2275,7 @@ func TestValidateInstallConfig(t *testing.T) {
22742275
c := validInstallConfig()
22752276
c.Capabilities = &types.Capabilities{
22762277
BaselineCapabilitySet: configv1.ClusterVersionCapabilitySetNone,
2277-
AdditionalEnabledCapabilities: []configv1.ClusterVersionCapability{configv1.ClusterVersionCapabilityMachineAPI, configv1.ClusterVersionCapabilityCloudCredential},
2278+
AdditionalEnabledCapabilities: []configv1.ClusterVersionCapability{configv1.ClusterVersionCapabilityMachineAPI, configv1.ClusterVersionCapabilityCloudCredential, configv1.ClusterVersionCapabilityCloudControllerManager},
22782279
}
22792280
return c
22802281
}(),
@@ -2338,6 +2339,86 @@ func TestValidateInstallConfig(t *testing.T) {
23382339
return c
23392340
}(),
23402341
},
2342+
{
2343+
name: "CloudController can't be disabled on cloud",
2344+
installConfig: func() *types.InstallConfig {
2345+
c := validInstallConfig()
2346+
c.Capabilities = &types.Capabilities{
2347+
BaselineCapabilitySet: configv1.ClusterVersionCapabilitySetNone,
2348+
}
2349+
return c
2350+
}(),
2351+
expectedError: "disabling CloudControllerManager is only supported on the Baremetal, None, or External platform with cloudControllerManager value none",
2352+
},
2353+
{
2354+
name: "valid disabled CloudController configuration none platform",
2355+
installConfig: func() *types.InstallConfig {
2356+
c := validInstallConfig()
2357+
c.Platform.AWS = nil
2358+
c.Platform.None = &none.Platform{}
2359+
c.Capabilities = &types.Capabilities{
2360+
BaselineCapabilitySet: configv1.ClusterVersionCapabilitySetNone,
2361+
}
2362+
return c
2363+
}(),
2364+
},
2365+
{
2366+
name: "valid disabled CloudController configuration platform baremetal",
2367+
installConfig: func() *types.InstallConfig {
2368+
c := validInstallConfig()
2369+
c.Platform.AWS = nil
2370+
c.Platform.BareMetal = validBareMetalPlatform()
2371+
c.Capabilities = &types.Capabilities{
2372+
BaselineCapabilitySet: configv1.ClusterVersionCapabilitySetNone,
2373+
AdditionalEnabledCapabilities: []configv1.ClusterVersionCapability{configv1.ClusterVersionCapabilityBaremetal, configv1.ClusterVersionCapabilityMachineAPI},
2374+
}
2375+
return c
2376+
}(),
2377+
},
2378+
{
2379+
name: "valid disabled CloudController configuration platform External",
2380+
installConfig: func() *types.InstallConfig {
2381+
c := validInstallConfig()
2382+
c.Platform.AWS = nil
2383+
c.Platform.External = &external.Platform{}
2384+
c.Capabilities = &types.Capabilities{
2385+
BaselineCapabilitySet: configv1.ClusterVersionCapabilitySetNone,
2386+
AdditionalEnabledCapabilities: []configv1.ClusterVersionCapability{configv1.ClusterVersionCapabilityCloudCredential},
2387+
}
2388+
return c
2389+
}(),
2390+
},
2391+
{
2392+
name: "valid disabled CloudController configuration platform External 2",
2393+
installConfig: func() *types.InstallConfig {
2394+
c := validInstallConfig()
2395+
c.Platform.AWS = nil
2396+
c.Platform.External = &external.Platform{
2397+
CloudControllerManager: external.CloudControllerManagerTypeNone,
2398+
}
2399+
c.Capabilities = &types.Capabilities{
2400+
BaselineCapabilitySet: configv1.ClusterVersionCapabilitySetNone,
2401+
AdditionalEnabledCapabilities: []configv1.ClusterVersionCapability{configv1.ClusterVersionCapabilityCloudCredential},
2402+
}
2403+
return c
2404+
}(),
2405+
},
2406+
{
2407+
name: "invalid disabled CloudController configuration platform External 2",
2408+
installConfig: func() *types.InstallConfig {
2409+
c := validInstallConfig()
2410+
c.Platform.AWS = nil
2411+
c.Platform.External = &external.Platform{
2412+
CloudControllerManager: external.CloudControllerManagerTypeExternal,
2413+
}
2414+
c.Capabilities = &types.Capabilities{
2415+
BaselineCapabilitySet: configv1.ClusterVersionCapabilitySetNone,
2416+
AdditionalEnabledCapabilities: []configv1.ClusterVersionCapability{configv1.ClusterVersionCapabilityCloudCredential},
2417+
}
2418+
return c
2419+
}(),
2420+
expectedError: "disabling CloudControllerManager on External platform supported only with cloudControllerManager value none",
2421+
},
23412422
}
23422423
for _, tc := range cases {
23432424
t.Run(tc.name, func(t *testing.T) {

0 commit comments

Comments
 (0)