1
0
mirror of https://github.com/openshift/installer.git synced 2026-02-05 15:47:14 +01:00

Merge pull request #10286 from vimauro/add-tna-platform-external

OCPEDGE-2276: Add support for platform None and External in TNA clusters
This commit is contained in:
openshift-merge-bot[bot]
2026-02-04 19:59:49 +00:00
committed by GitHub
4 changed files with 78 additions and 47 deletions

View File

@@ -31,6 +31,7 @@ import (
"github.com/openshift/installer/pkg/asset/rhcos"
"github.com/openshift/installer/pkg/types"
baremetaltypes "github.com/openshift/installer/pkg/types/baremetal"
externaltypes "github.com/openshift/installer/pkg/types/external"
nonetypes "github.com/openshift/installer/pkg/types/none"
ibmcloudapi "github.com/openshift/machine-api-provider-ibmcloud/pkg/apis"
ibmcloudprovider "github.com/openshift/machine-api-provider-ibmcloud/pkg/apis/ibmcloudprovider/v1"
@@ -116,8 +117,8 @@ func (m *Arbiter) Generate(ctx context.Context, dependencies asset.Parents) erro
if ic.Arbiter == nil {
return nil
}
if ic.Platform.Name() != baremetaltypes.Name && ic.Platform.Name() != nonetypes.Name {
return fmt.Errorf("only BareMetal and None platforms are supported for Arbiter deployments")
if ic.Platform.Name() != baremetaltypes.Name && ic.Platform.Name() != externaltypes.Name && ic.Platform.Name() != nonetypes.Name {
return fmt.Errorf("only BareMetal, External, and None platforms are supported for Arbiter deployments")
}
pool := *ic.Arbiter

View File

@@ -15,6 +15,7 @@ import (
"github.com/openshift/installer/pkg/types"
awstypes "github.com/openshift/installer/pkg/types/aws"
"github.com/openshift/installer/pkg/types/baremetal"
"github.com/openshift/installer/pkg/types/external"
"github.com/openshift/installer/pkg/types/none"
)
@@ -220,10 +221,25 @@ func TestArbiterInstallOnlyForBaremetal(t *testing.T) {
arbiter := &Arbiter{}
err := arbiter.Generate(context.Background(), parents)
assert.NotNil(t, err, "expected arbiter generate to fail for non baremetal platforms")
assert.Contains(t, err.Error(), "only BareMetal and None platforms are supported for Arbiter deployments")
assert.Contains(t, err.Error(), "only BareMetal, External, and None platforms are supported for Arbiter deployments")
}
func TestArbiterInstallNonePlatform(t *testing.T) {
func TestArbiterInstallNoneExternalPlatforms(t *testing.T) {
cases := []struct {
name string
platform types.Platform
}{
{
name: "None platform",
platform: types.Platform{None: &none.Platform{}},
},
{
name: "External platform",
platform: types.Platform{External: &external.Platform{}},
},
}
for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
parents := asset.Parents{}
installConfig := installconfig.MakeAsset(
&types.InstallConfig{
@@ -232,9 +248,7 @@ func TestArbiterInstallNonePlatform(t *testing.T) {
},
SSHKey: "ssh-rsa: dummy-key",
BaseDomain: "test-domain",
Platform: types.Platform{
None: &none.Platform{},
},
Platform: tc.platform,
Arbiter: &types.MachinePool{
Hyperthreading: types.HyperthreadingDisabled,
Replicas: ptr.To(int64(1)),
@@ -258,13 +272,15 @@ func TestArbiterInstallNonePlatform(t *testing.T) {
)
arbiter := &Arbiter{}
err := arbiter.Generate(context.Background(), parents)
assert.Nil(t, err, "expected arbiter generate to succeed for None platform")
// For None platform, no Machine API objects or BareMetalHost CRs should be generated
assert.Equal(t, 0, len(arbiter.MachineFiles), "expected no machine files for None platform")
assert.Equal(t, 0, len(arbiter.HostFiles), "expected no host files for None platform")
assert.Equal(t, 0, len(arbiter.SecretFiles), "expected no secret files for None platform")
assert.Nil(t, err, "expected arbiter generate to succeed for %s", tc.name)
// For non-baremetal platforms, no Machine API objects or BareMetalHost CRs should be generated
assert.Equal(t, 0, len(arbiter.MachineFiles), "expected no machine files for %s", tc.name)
assert.Equal(t, 0, len(arbiter.HostFiles), "expected no host files for %s", tc.name)
assert.Equal(t, 0, len(arbiter.SecretFiles), "expected no secret files for %s", tc.name)
// MachineConfigs should still be generated (hyperthreading disabled + SSH key)
assert.Greater(t, len(arbiter.MachineConfigFiles), 0, "expected machine config files for None platform")
assert.Greater(t, len(arbiter.MachineConfigFiles), 0, "expected machine config files for %s", tc.name)
})
}
}
func TestArbiterIsNotModified(t *testing.T) {

View File

@@ -779,8 +779,8 @@ func validateControlPlane(installConfig *types.InstallConfig, fldPath *field.Pat
func validateArbiter(platform *types.Platform, arbiterPool, masterPool *types.MachinePool, fldPath *field.Path) field.ErrorList {
allErrs := field.ErrorList{}
if platform != nil && platform.BareMetal == nil && platform.None == nil {
allErrs = append(allErrs, field.NotSupported(fldPath.Child("platform"), platform.Name(), []string{baremetal.Name, none.Name}))
if platform != nil && platform.BareMetal == nil && platform.External == nil && platform.None == nil {
allErrs = append(allErrs, field.NotSupported(fldPath.Child("platform"), platform.Name(), []string{baremetal.Name, external.Name, none.Name}))
}
if arbiterPool.Name != types.MachinePoolArbiterRoleName {
allErrs = append(allErrs, field.NotSupported(fldPath.Child("name"), arbiterPool.Name, []string{types.MachinePoolArbiterRoleName}))

View File

@@ -3232,6 +3232,20 @@ func TestValidateArbiter(t *testing.T) {
name: "valid_platform_baremetal",
expected: "",
},
{
config: installConfig().
PlatformExternal().
MachinePoolArbiter(
machinePool().
Name("arbiter").
Hyperthreading(types.HyperthreadingEnabled).
Architecture(types.ArchitectureAMD64)).
MachinePoolCP(machinePool()).
ArbiterReplicas(1).
CpReplicas(2).build(),
name: "valid_platform_external",
expected: "",
},
{
config: installConfig().
PlatformAWS().
@@ -3243,7 +3257,7 @@ func TestValidateArbiter(t *testing.T) {
ArbiterReplicas(1).
CpReplicas(2).build(),
name: "invalid_platform",
expected: `supported values: "baremetal", "none"`,
expected: `supported values: "baremetal", "external", "none"`,
},
{
config: installConfig().