|
|
@@ -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
|
|
|
-}
|