瀏覽代碼

Delete datastore endpoint (#4493)

Feroze Mohideen 2 年之前
父節點
當前提交
1f6d3faa5b
共有 5 個文件被更改,包括 8 次插入166 次删除
  1. 5 38
      api/server/handlers/datastore/delete.go
  2. 1 1
      go.mod
  3. 2 2
      go.sum
  4. 0 80
      internal/datastore/create.go
  5. 0 45
      internal/datastore/delete.go

+ 5 - 38
api/server/handlers/datastore/delete.go

@@ -4,7 +4,6 @@ import (
 	"net/http"
 
 	"connectrpc.com/connect"
-	"github.com/google/uuid"
 	porterv1 "github.com/porter-dev/api-contracts/generated/go/porter/v1"
 	"github.com/porter-dev/porter/api/server/authz"
 	"github.com/porter-dev/porter/api/server/handlers"
@@ -55,45 +54,13 @@ func (h *DeleteDatastoreHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
 		return
 	}
 
-	if !datastoreRecord.OnManagementCluster {
-		if datastoreRecord == nil || datastoreRecord.ID == uuid.Nil {
-			err = telemetry.Error(ctx, span, nil, "datastore record does not exist")
-			h.HandleAPIError(w, r, apierrors.NewErrPassThroughToClient(err, http.StatusNotFound))
-			return
-		}
-
-		_, err = h.Repo().Datastore().UpdateStatus(ctx, datastoreRecord, models.DatastoreStatus_AwaitingDeletion)
-		if err != nil {
-			err = telemetry.Error(ctx, span, err, "error updating datastore status")
-			h.HandleAPIError(w, r, apierrors.NewErrPassThroughToClient(err, http.StatusInternalServerError))
-			return
-		}
-
-		updateReq := connect.NewRequest(&porterv1.UpdateDatastoreRequest{
-			ProjectId:   int64(project.ID),
-			DatastoreId: datastoreRecord.ID.String(),
-		})
-
-		_, err = h.Config().ClusterControlPlaneClient.UpdateDatastore(ctx, updateReq)
-		if err != nil {
-			err := telemetry.Error(ctx, span, err, "error calling ccp update datastore")
-			h.HandleAPIError(w, r, apierrors.NewErrPassThroughToClient(err, http.StatusInternalServerError))
-			return
-		}
-
-		w.WriteHeader(http.StatusAccepted)
-		return
-	}
-
-	req := connect.NewRequest(&porterv1.PatchCloudContractRequest{
-		ProjectId:    int64(project.ID),
-		Operation:    porterv1.EnumPatchCloudContractOperation_ENUM_PATCH_CLOUD_CONTRACT_OPERATION_DELETE,
-		ResourceType: porterv1.EnumPatchCloudContractType_ENUM_PATCH_CLOUD_CONTRACT_TYPE_DATASTORE,
-		ResourceId:   datastoreRecord.ID.String(),
+	req := connect.NewRequest(&porterv1.DeleteDatastoreRequest{
+		ProjectId:   int64(project.ID),
+		DatastoreId: datastoreRecord.ID.String(),
 	})
-	_, err = h.Config().ClusterControlPlaneClient.PatchCloudContract(ctx, req)
+	_, err = h.Config().ClusterControlPlaneClient.DeleteDatastore(ctx, req)
 	if err != nil {
-		err = telemetry.Error(ctx, span, err, "error patching cloud contract")
+		err = telemetry.Error(ctx, span, err, "error deleting datastore")
 		h.HandleAPIError(w, r, apierrors.NewErrPassThroughToClient(err, http.StatusInternalServerError))
 		return
 	}

+ 1 - 1
go.mod

@@ -85,7 +85,7 @@ require (
 	github.com/matryer/is v1.4.0
 	github.com/nats-io/nats.go v1.24.0
 	github.com/open-policy-agent/opa v0.44.0
-	github.com/porter-dev/api-contracts v0.2.138
+	github.com/porter-dev/api-contracts v0.2.139
 	github.com/riandyrn/otelchi v0.5.1
 	github.com/santhosh-tekuri/jsonschema/v5 v5.0.1
 	github.com/stefanmcshane/helm v0.0.0-20221213002717-88a4a2c6e77d

+ 2 - 2
go.sum

@@ -1552,8 +1552,8 @@ github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 github.com/polyfloyd/go-errorlint v0.0.0-20210722154253-910bb7978349/go.mod h1:wi9BfjxjF/bwiZ701TzmfKu6UKC357IOAtNr0Td0Lvw=
-github.com/porter-dev/api-contracts v0.2.138 h1:VG+1nYkn1fW2ryEmqGtJhNRjuN1J4GgysSzZee9cBaI=
-github.com/porter-dev/api-contracts v0.2.138/go.mod h1:VV5BzXd02ZdbWIPLVP+PX3GKawJSGQnxorVT2sUZALU=
+github.com/porter-dev/api-contracts v0.2.139 h1:nTL/tRqXus1O5C524Oo+/cZ62jEVIUI75odYkIvswHY=
+github.com/porter-dev/api-contracts v0.2.139/go.mod h1:VV5BzXd02ZdbWIPLVP+PX3GKawJSGQnxorVT2sUZALU=
 github.com/porter-dev/switchboard v0.0.3 h1:dBuYkiVLa5Ce7059d6qTe9a1C2XEORFEanhbtV92R+M=
 github.com/porter-dev/switchboard v0.0.3/go.mod h1:xSPzqSFMQ6OSbp42fhCi4AbGbQbsm6nRvOkrblFeXU4=
 github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=

+ 0 - 80
internal/datastore/create.go

@@ -1,80 +0,0 @@
-package datastore
-
-import (
-	"context"
-
-	"github.com/google/uuid"
-	"github.com/porter-dev/porter/internal/models"
-	"github.com/porter-dev/porter/internal/repository"
-	"github.com/porter-dev/porter/internal/telemetry"
-)
-
-// CreateOrGetRecordInput is the input type for CreateOrGetDatastoreRecord
-type CreateOrGetRecordInput struct {
-	ProjectID uint
-	ClusterID uint
-	Name      string
-	Type      string
-	Engine    string
-
-	DatastoreRepository repository.DatastoreRepository
-	ClusterRepository   repository.ClusterRepository
-}
-
-// CreateOrGetRecord creates a datastore record if it does not exist, or returns the existing one if it does
-func CreateOrGetRecord(ctx context.Context, inp CreateOrGetRecordInput) (*models.Datastore, error) {
-	ctx, span := telemetry.NewSpan(ctx, "create-or-get-datastore-record")
-	defer span.End()
-
-	telemetry.WithAttributes(span,
-		telemetry.AttributeKV{Key: "project-id", Value: inp.ProjectID},
-		telemetry.AttributeKV{Key: "name", Value: inp.Name},
-		telemetry.AttributeKV{Key: "cluster-id", Value: inp.ClusterID},
-		telemetry.AttributeKV{Key: "type", Value: inp.Type},
-		telemetry.AttributeKV{Key: "engine", Value: inp.Engine},
-	)
-
-	var datastore *models.Datastore
-	if inp.ProjectID == 0 {
-		return datastore, telemetry.Error(ctx, span, nil, "project id is 0")
-	}
-	if inp.Name == "" {
-		return datastore, telemetry.Error(ctx, span, nil, "name is empty")
-	}
-
-	datastore, err := inp.DatastoreRepository.GetByProjectIDAndName(ctx, inp.ProjectID, inp.Name)
-	if err != nil {
-		return datastore, telemetry.Error(ctx, span, err, "error reading datastore by project id and name")
-	}
-
-	if datastore != nil && datastore.ID != uuid.Nil {
-		telemetry.WithAttributes(span, telemetry.AttributeKV{Key: "existing-datastore-id", Value: datastore.ID})
-		return datastore, nil
-	}
-
-	if inp.ClusterID == 0 {
-		return datastore, telemetry.Error(ctx, span, nil, "cluster id is 0")
-	}
-
-	cluster, err := inp.ClusterRepository.ReadCluster(inp.ProjectID, inp.ClusterID)
-	if err != nil {
-		return datastore, telemetry.Error(ctx, span, err, "error reading cluster")
-	}
-
-	datastoreToSave := &models.Datastore{
-		ProjectID:                         inp.ProjectID,
-		Name:                              inp.Name,
-		Type:                              inp.Type,
-		Engine:                            inp.Engine,
-		CloudProvider:                     cluster.CloudProvider,
-		CloudProviderCredentialIdentifier: cluster.CloudProviderCredentialIdentifier,
-		Status:                            models.DatastoreStatus_Creating,
-	}
-
-	datastore, err = inp.DatastoreRepository.Insert(ctx, datastoreToSave)
-	if err != nil {
-		return datastore, telemetry.Error(ctx, span, err, "error inserting datastore")
-	}
-
-	return datastore, nil
-}

+ 0 - 45
internal/datastore/delete.go

@@ -1,45 +0,0 @@
-package datastore
-
-import (
-	"context"
-
-	"github.com/google/uuid"
-	"github.com/porter-dev/porter/internal/models"
-	"github.com/porter-dev/porter/internal/repository"
-	"github.com/porter-dev/porter/internal/telemetry"
-)
-
-// DeleteRecordInput is the input type for DeleteDatastoreRecord
-type DeleteRecordInput struct {
-	ProjectID uint
-	Name      string
-
-	DatastoreRepository repository.DatastoreRepository
-}
-
-// DeleteRecord deletes a datastore record by name
-func DeleteRecord(ctx context.Context, inp DeleteRecordInput) (*models.Datastore, error) {
-	ctx, span := telemetry.NewSpan(ctx, "delete-datastore-record")
-	defer span.End()
-
-	telemetry.WithAttributes(span,
-		telemetry.AttributeKV{Key: "project-id", Value: inp.ProjectID},
-		telemetry.AttributeKV{Key: "name", Value: inp.Name},
-	)
-
-	datastore, err := inp.DatastoreRepository.GetByProjectIDAndName(ctx, inp.ProjectID, inp.Name)
-	if err != nil {
-		return datastore, telemetry.Error(ctx, span, err, "error reading datastore by project id and name")
-	}
-
-	if datastore == nil || datastore.ID == uuid.Nil {
-		return datastore, telemetry.Error(ctx, span, nil, "datastore not found in table")
-	}
-
-	datastore, err = inp.DatastoreRepository.Delete(ctx, datastore)
-	if err != nil {
-		return datastore, telemetry.Error(ctx, span, err, "error deleting datastore")
-	}
-
-	return datastore, nil
-}