@@ -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.
0 commit comments