diff --git a/cluster-api/providers/ibmcloud/vendor/github.com/ppc64le-cloud/powervs-utils/region.go b/cluster-api/providers/ibmcloud/vendor/github.com/ppc64le-cloud/powervs-utils/region.go index d22689241da..2e815ca2d34 100644 --- a/cluster-api/providers/ibmcloud/vendor/github.com/ppc64le-cloud/powervs-utils/region.go +++ b/cluster-api/providers/ibmcloud/vendor/github.com/ppc64le-cloud/powervs-utils/region.go @@ -61,6 +61,7 @@ var Regions = map[string]Region{ Zones: []string{ "dal10", "dal12", + "dal14", }, SysTypes: []string{"s922", "e980"}, VPCZones: []string{"us-south-1", "us-south-2", "us-south-3"}, diff --git a/cluster-api/providers/ibmcloud/vendor/sigs.k8s.io/cluster-api-provider-ibmcloud/api/v1beta2/ibmpowervsmachine_types.go b/cluster-api/providers/ibmcloud/vendor/sigs.k8s.io/cluster-api-provider-ibmcloud/api/v1beta2/ibmpowervsmachine_types.go index 9c2f92b6535..968a5358397 100644 --- a/cluster-api/providers/ibmcloud/vendor/sigs.k8s.io/cluster-api-provider-ibmcloud/api/v1beta2/ibmpowervsmachine_types.go +++ b/cluster-api/providers/ibmcloud/vendor/sigs.k8s.io/cluster-api-provider-ibmcloud/api/v1beta2/ibmpowervsmachine_types.go @@ -83,7 +83,7 @@ type IBMPowerVSMachineSpec struct { // When omitted, this means that the user has no opinion and the platform is left to choose a // reasonable default, which is subject to change over time. The current default is s922 which is generally available. // + This is not an enum because we expect other values to be added later which should be supported implicitly. - // +kubebuilder:validation:Enum:="s922";"e880";"e980";"s1022";"" + // +kubebuilder:validation:Enum:="s922";"e880";"e980";"s1022";"s1122";"" // +optional SystemType string `json:"systemType,omitempty"` diff --git a/pkg/asset/installconfig/powervs/client.go b/pkg/asset/installconfig/powervs/client.go index 49641b8dbf9..e669f148283 100644 --- a/pkg/asset/installconfig/powervs/client.go +++ b/pkg/asset/installconfig/powervs/client.go @@ -1113,7 +1113,6 @@ func (c *Client) GetDatacenterCapabilities(ctx context.Context, region string) ( return getOk.Payload.Capabilities, nil } -// GetDatacenterSupportedSystems retrieves the capabilities of the specified datacenter. func (c *Client) GetDatacenterSupportedSystems(ctx context.Context, region string) ([]string, error) { var err error if c.BXCli.PISession == nil { @@ -1122,12 +1121,15 @@ func (c *Client) GetDatacenterSupportedSystems(ctx context.Context, region strin return nil, fmt.Errorf("failed to initialize PISession in GetDatacenterSupportedSystems: %w", err) } } - params := datacenters.NewV1DatacentersGetParamsWithContext(ctx).WithDatacenterRegion(region) - getOk, err := c.BXCli.PISession.Power.Datacenters.V1DatacentersGet(params) + + // Use the global datacenter endpoint for accurate, non-cached data (other code uses a bulk endpoint) + datacenterClient := instance.NewIBMPIDatacenterClient(ctx, c.BXCli.PISession, "") + datacenter, err := datacenterClient.Get(region) if err != nil { return nil, fmt.Errorf("failed to get datacenter supported systems: %w", err) } - return getOk.Payload.CapabilitiesDetails.SupportedSystems.General, nil + + return datacenter.CapabilitiesDetails.SupportedSystems.General, nil } // TransitGatewayNameToID checks to see if the name is an existing transit gateway name. diff --git a/pkg/asset/machines/worker.go b/pkg/asset/machines/worker.go index d45fa469855..5ac6e28ac60 100644 --- a/pkg/asset/machines/worker.go +++ b/pkg/asset/machines/worker.go @@ -216,16 +216,30 @@ func defaultPowerVSMachinePoolPlatform(ic *types.InstallConfig) powervstypes.Mac fallback = true logrus.Warnf("For given zone %v, GetDatacenterSupportedSystems returns %v", ic.PowerVS.Zone, err) } else { - // Is the hardcoded default of s922 in the list? - found := false - for _, st := range sysTypes { - if st == sysType { - found = true - break + if ic.PowerVS.Zone == "dal14" { + // Prefer s1022 over s1222 for better support in dal14 region (s922 not supported anymore) + for _, st := range sysTypes { + if st == "s1022" { + sysType = "s1022" + break + } + } + // If s1022 not found, fall back to using the first available system type (in case of dal14 this is s1222) + if sysType != "s1022" { + sysType = sysTypes[0] + } + } else { + // For other zones, check if the hardcoded default of s922 is in the list, this is the prior case code + found := false + for _, st := range sysTypes { + if st == sysType { + found = true + break + } + } + if !found { + sysType = sysTypes[0] } - } - if !found { - sysType = sysTypes[0] } } } @@ -234,7 +248,22 @@ func defaultPowerVSMachinePoolPlatform(ic *types.InstallConfig) powervstypes.Mac // Fallback to hardcoded list sysTypes, err = powervstypes.AvailableSysTypes(ic.PowerVS.Region, ic.PowerVS.Zone) if err == nil { - sysType = sysTypes[0] + // For dal14, prefer s1022 if available + if ic.PowerVS.Zone == "dal14" { + for _, st := range sysTypes { + if st == "s1022" { + sysType = "s1022" + break + } + } + // If s1022 not found, use first in list + if sysType != "s1022" { + sysType = sysTypes[0] + } + } else { + // this is prior case behavior + sysType = sysTypes[0] + } } else { logrus.Warnf("For given zone %v, AvailableSysTypes returns %v", ic.PowerVS.Zone, err) } diff --git a/pkg/types/powervs/powervs_regions.go b/pkg/types/powervs/powervs_regions.go index 7f84d171970..b2da3170751 100644 --- a/pkg/types/powervs/powervs_regions.go +++ b/pkg/types/powervs/powervs_regions.go @@ -37,6 +37,9 @@ var Regions = map[string]Region{ "dal12": { SysTypes: []string{"s922", "e980"}, }, + "dal14": { + SysTypes: []string{"s1022", "e1080"}, + }, }, VPCZones: []string{"us-south-1", "us-south-2", "us-south-3"}, },