Просмотр исходного кода

fix state file does not exist error

Alexander Belanger 4 лет назад
Родитель
Сommit
32a17d928b
2 измененных файлов с 14 добавлено и 0 удалено
  1. 7 0
      api/server/handlers/infra/get_state.go
  2. 7 0
      provisioner/client/get_state.go

+ 7 - 0
api/server/handlers/infra/get_state.go

@@ -2,6 +2,7 @@ package infra
 
 
 import (
 import (
 	"context"
 	"context"
+	"errors"
 	"net/http"
 	"net/http"
 
 
 	"github.com/porter-dev/porter/api/server/handlers"
 	"github.com/porter-dev/porter/api/server/handlers"
@@ -10,6 +11,7 @@ import (
 	"github.com/porter-dev/porter/api/server/shared/config"
 	"github.com/porter-dev/porter/api/server/shared/config"
 	"github.com/porter-dev/porter/api/types"
 	"github.com/porter-dev/porter/api/types"
 	"github.com/porter-dev/porter/internal/models"
 	"github.com/porter-dev/porter/internal/models"
+	"github.com/porter-dev/porter/provisioner/client"
 )
 )
 
 
 type InfraGetStateHandler struct {
 type InfraGetStateHandler struct {
@@ -33,6 +35,11 @@ func (c *InfraGetStateHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
 	resp, err := c.Config().ProvisionerClient.GetState(context.Background(), proj.ID, infra.ID)
 	resp, err := c.Config().ProvisionerClient.GetState(context.Background(), proj.ID, infra.ID)
 
 
 	if err != nil {
 	if err != nil {
+		if errors.Is(err, client.ErrDoesNotExist) {
+			c.HandleAPIError(w, r, apierrors.NewErrPassThroughToClient(err, http.StatusNotFound))
+			return
+		}
+
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
 		return
 		return
 	}
 	}

+ 7 - 0
provisioner/client/get_state.go

@@ -3,10 +3,13 @@ package client
 import (
 import (
 	"context"
 	"context"
 	"fmt"
 	"fmt"
+	"strings"
 
 
 	ptypes "github.com/porter-dev/porter/provisioner/types"
 	ptypes "github.com/porter-dev/porter/provisioner/types"
 )
 )
 
 
+var ErrDoesNotExist = fmt.Errorf("state file does not exist")
+
 // CreateResource posts Terraform output to the provisioner service and creates the backing
 // CreateResource posts Terraform output to the provisioner service and creates the backing
 // resource in the database
 // resource in the database
 func (c *Client) GetState(
 func (c *Client) GetState(
@@ -24,5 +27,9 @@ func (c *Client) GetState(
 		resp,
 		resp,
 	)
 	)
 
 
+	if err != nil && strings.Contains(err.Error(), "current state file does not exist yet") {
+		return nil, ErrDoesNotExist
+	}
+
 	return resp, err
 	return resp, err
 }
 }