Skip to content

Commit d75b79c

Browse files
committed
refactor(ibmcloud): remove PowerVS capacity retry logic and default to e1080 system type
1 parent baad7fb commit d75b79c

3 files changed

Lines changed: 25 additions & 212 deletions

File tree

cmd/mapt/cmd/params/params.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,8 @@ const (
157157
PIProcTypeDesc string = "PowerVS processor type (shared, dedicated, capped)"
158158
PIProcTypeDefault string = "shared"
159159
PISysType string = "pi-sys-type"
160-
PISysTypeDesc string = "preferred PowerVS system type (e.g. e1080, s1022, s1122); if unset, auto-discovered from zone"
161-
PISysTypeDefault string = ""
160+
PISysTypeDesc string = "PowerVS system type (e.g. e1080, s1022, s1122)"
161+
PISysTypeDefault string = "e1080"
162162
PIStorageType string = "pi-storage-type"
163163
PIStorageTypeDesc string = "PowerVS storage tier for instance and data volume (tier1, tier3)"
164164
PIStorageTypeDefault string = "tier1"

pkg/provider/ibmcloud/action/ibm-power/ibm-power.go

Lines changed: 23 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -119,105 +119,36 @@ func New(ctx *mc.ContextArgs, args *PWArgs) error {
119119
}
120120

121121
prefix := util.If(len(args.Prefix) > 0, args.Prefix, "main")
122-
123-
sysTypes, err := icdata.GetAvailableSystemTypes(mCtx, &icdata.SystemTypeRequirements{
124-
CloudInstanceId: args.WorkspaceID,
125-
Zone: os.Getenv("IC_ZONE"),
126-
ProcType: args.ProcType,
127-
PreferredType: args.SysType,
128-
})
129-
if err != nil {
130-
return fmt.Errorf("system type discovery failed: %w", err)
122+
r := &pwRequest{
123+
mCtx: mCtx,
124+
prefix: &prefix,
125+
piPrivateSubnetID: args.PIPrivateSubnetID,
126+
workspaceID: args.WorkspaceID,
127+
vpcPublicSubnetID: args.VPCPublicSubnetID,
128+
memory: args.Memory,
129+
processors: args.Processors,
130+
procType: args.ProcType,
131+
sysType: args.SysType,
132+
storageType: args.StorageType,
133+
diskSize: args.DiskSize,
134+
otelAppCode: args.OtelAppCode,
135+
otelAuthToken: args.OtelAuthToken,
136+
otelEndpoint: args.OtelEndpoint,
137+
otelIndex: args.OtelIndex,
138+
otelExtraAttrs: args.OtelExtraAttrs,
131139
}
132-
133-
var lastErr error
134-
for i, sysType := range sysTypes.Types {
135-
if i > 0 {
136-
logging.Warnf("retrying with system type %s (%d/%d) after capacity failure",
137-
sysType, i+1, len(sysTypes.Types))
138-
}
139-
140-
r := &pwRequest{
141-
mCtx: mCtx,
142-
prefix: &prefix,
143-
piPrivateSubnetID: args.PIPrivateSubnetID,
144-
workspaceID: args.WorkspaceID,
145-
vpcPublicSubnetID: args.VPCPublicSubnetID,
146-
memory: args.Memory,
147-
processors: args.Processors,
148-
procType: args.ProcType,
149-
sysType: sysType,
150-
storageType: args.StorageType,
151-
diskSize: args.DiskSize,
152-
otelAppCode: args.OtelAppCode,
153-
otelAuthToken: args.OtelAuthToken,
154-
otelEndpoint: args.OtelEndpoint,
155-
otelIndex: args.OtelIndex,
156-
otelExtraAttrs: args.OtelExtraAttrs,
157-
}
158-
cs := manager.Stack{
159-
StackName: mCtx.StackNameByProject(stackIBMPowerVS),
160-
ProjectName: mCtx.ProjectName(),
161-
BackedURL: mCtx.BackedURL(),
162-
ProviderCredentials: ibmcloudp.DefaultCredentials,
163-
DeployFunc: r.deploy,
164-
}
165-
sr, err := manager.UpStack(r.mCtx, cs)
166-
if err == nil {
167-
if i > 0 {
168-
logging.Infof("provisioning succeeded with system type %s (attempt %d)", sysType, i+1)
169-
}
170-
return manageResults(mCtx, sr, prefix, r.vpcPublicSubnetID != "")
171-
}
172-
173-
lastErr = err
174-
if !isCapacityError(err) {
175-
return fmt.Errorf("stack creation failed: %w", err)
176-
}
177-
178-
logging.Warnf("capacity error with system type %s: %v", sysType, err)
179-
180-
if i < len(sysTypes.Types)-1 {
181-
logging.Infof("destroying partial stack before retry...")
182-
if dErr := destroyForRetry(mCtx); dErr != nil {
183-
return fmt.Errorf("failed to destroy partial stack before retry: %w", dErr)
184-
}
185-
}
186-
}
187-
188-
return fmt.Errorf("all system types exhausted; last error: %w", lastErr)
189-
}
190-
191-
func isCapacityError(err error) bool {
192-
if err == nil {
193-
return false
194-
}
195-
errStr := strings.ToLower(err.Error())
196-
for _, pattern := range []string{
197-
"insufficient resources",
198-
"no available host",
199-
"capacity is not available",
200-
"not enough resources",
201-
"resource capacity",
202-
"no hosts available",
203-
"maximum capacity",
204-
"context deadline exceeded",
205-
} {
206-
if strings.Contains(errStr, pattern) {
207-
return true
208-
}
209-
}
210-
return false
211-
}
212-
213-
func destroyForRetry(mCtx *mc.Context) error {
214140
cs := manager.Stack{
215141
StackName: mCtx.StackNameByProject(stackIBMPowerVS),
216142
ProjectName: mCtx.ProjectName(),
217143
BackedURL: mCtx.BackedURL(),
218144
ProviderCredentials: ibmcloudp.DefaultCredentials,
145+
DeployFunc: r.deploy,
146+
}
147+
sr, err := manager.UpStack(r.mCtx, cs)
148+
if err != nil {
149+
return err
219150
}
220-
return manager.DestroyStack(mCtx, cs)
151+
return manageResults(mCtx, sr, prefix, r.vpcPublicSubnetID != "")
221152
}
222153

223154
// Destroy tears down the Power VS stack identified by mCtxArgs.

pkg/provider/ibmcloud/data/pisystemtypes.go

Lines changed: 0 additions & 118 deletions
This file was deleted.

0 commit comments

Comments
 (0)