Skip to content

Commit fa00c98

Browse files
committed
fix: handle 404 errors
1 parent eddcbfe commit fa00c98

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

akash/resource_deployment.go

+29-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ const DeploymentIdOseq = 2
2424
const DeploymentIdOwner = 3
2525
const DeploymentIdProvider = 4
2626

27+
var ErrDeploymentGone = errors.New("deployment is gone")
28+
29+
func isDeploymentNotFound(err error) bool {
30+
return err != nil && strings.Contains(err.Error(), "not found") || strings.Contains(err.Error(), "404")
31+
}
32+
2733
func resourceDeployment() *schema.Resource {
2834
return &schema.Resource{
2935
CreateContext: resourceDeploymentCreate,
@@ -357,6 +363,11 @@ func resourceDeploymentRead(ctx context.Context, d *schema.ResourceData, m inter
357363

358364
deployment, err := akash.GetDeployment(deploymentId[DeploymentIdDseq], deploymentId[DeploymentIdOwner])
359365
if err != nil {
366+
if isDeploymentNotFound(err) {
367+
tflog.Warn(ctx, "Deployment not found - marking for recreation")
368+
d.SetId("")
369+
return nil
370+
}
360371
return diag.FromErr(err)
361372
}
362373

@@ -385,6 +396,11 @@ func resourceDeploymentRead(ctx context.Context, d *schema.ResourceData, m inter
385396
Oseq: deploymentId[DeploymentIdOseq],
386397
}, deploymentId[DeploymentIdProvider])
387398
if err != nil {
399+
if isDeploymentNotFound(err) {
400+
tflog.Warn(ctx, "Deployment not found - marking for recreation")
401+
d.SetId("")
402+
return nil
403+
}
388404
return diag.FromErr(err)
389405
}
390406

@@ -457,6 +473,15 @@ func resourceDeploymentUpdate(ctx context.Context, d *schema.ResourceData, m int
457473
provider := deploymentId[DeploymentIdProvider]
458474

459475
if d.HasChange("sdl") {
476+
// First verify deployment still exists
477+
_, err := akash.GetDeployment(deploymentId[DeploymentIdDseq], deploymentId[DeploymentIdOwner])
478+
if err != nil {
479+
if isDeploymentNotFound(err) {
480+
return diag.FromErr(fmt.Errorf("%w: cannot update a deployment that was externally closed", ErrDeploymentGone))
481+
}
482+
return diag.FromErr(err)
483+
}
484+
460485
manifestLocation, err := CreateTemporaryFile(ctx, d.Get("sdl").(string))
461486

462487
// Update the deployment
@@ -491,7 +516,10 @@ func resourceDeploymentDelete(ctx context.Context, d *schema.ResourceData, m int
491516

492517
err := akash.DeleteDeployment(deploymentId[DeploymentIdDseq], deploymentId[DeploymentIdOwner])
493518
if err != nil {
494-
return diag.FromErr(err)
519+
if !isDeploymentNotFound(err) {
520+
return diag.FromErr(err)
521+
}
522+
tflog.Warn(ctx, "Deployment was already gone")
495523
}
496524

497525
// d.SetId("") is automatically called assuming delete returns no errors, but

0 commit comments

Comments
 (0)