Skip to content

Commit

Permalink
Merge pull request #261 from kthcloud/dev
Browse files Browse the repository at this point in the history
fix broken repair logic for deployment, vms and storage managers, fix better model structure
  • Loading branch information
saffronjam authored Nov 9, 2023
2 parents 1ef0c90 + 52b8f61 commit bc4be93
Show file tree
Hide file tree
Showing 42 changed files with 354 additions and 336 deletions.
2 changes: 1 addition & 1 deletion models/sys/base/activityResource/helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ func (client *ActivityResourceClient[T]) ListByActivity(activity string) ([]T, e
func (client *ActivityResourceClient[T]) ListWithNoActivities() ([]T, error) {
filter := bson.D{{
"activities", bson.M{
"$size": 0,
"$gte": bson.M{},
},
}}

Expand Down
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package storage_manager

import (
"context"
"errors"
"fmt"
"go-deploy/models"
Expand Down Expand Up @@ -39,7 +40,26 @@ func (client *Client) CreateStorageManager(id string, params *CreateParams) (*St
return fetched, nil
}

func (client *Client) DeleteSubsystemByID(id, key string) error {
subsystemKey := fmt.Sprintf("subsystems.%s", key)
return client.UpdateWithBsonByID(id, bson.D{{"$unset", bson.D{{subsystemKey, ""}}}})
}

func (client *Client) UpdateSubsystemByID(id, key string, update interface{}) error {
subsystemKey := fmt.Sprintf("subsystems.%s", key)
return client.SetWithBsonByID(id, bson.D{{subsystemKey, update}})
}
func (client *Client) MarkRepaired(id string) error {
filter := bson.D{{"id", id}}
update := bson.D{
{"$set", bson.D{{"repairedAt", time.Now()}}},
{"$unset", bson.D{{"activities.repairing", ""}}},
}

_, err := client.Collection.UpdateOne(context.TODO(), filter, update)
if err != nil {
return err
}

return nil
}
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@ import (
)

type StorageManager struct {
ID string `json:"id" bson:"id"`
OwnerID string `json:"ownerId" bson:"ownerId"`
Zone string `json:"zone" bson:"zone"`
ID string `bson:"id"`
OwnerID string `bson:"ownerId"`
Zone string `bson:"zone"`

CreatedAt time.Time `json:"createdAt" bson:"createdAt"`
RepairedAt time.Time `json:"repairAt" bson:"repairAt"`
CreatedAt time.Time `bson:"createdAt"`
RepairedAt time.Time `bson:"repairedAt"`

Activities map[string]activity.Activity `json:"activities" bson:"activities"`
Subsystems Subsystems `json:"subsystems" bson:"subsystems"`
Activities map[string]activity.Activity `bson:"activities"`
Subsystems Subsystems `bson:"subsystems"`
}

func (storageManager *StorageManager) GetURL() *string {
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
8 changes: 4 additions & 4 deletions models/sys/user/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package user

import (
"fmt"
teamModels "go-deploy/models/sys/user/team"
"go-deploy/models/sys/team"
)

type PublicKey struct {
Expand Down Expand Up @@ -35,15 +35,15 @@ type User struct {
Onboarded bool `bson:"onboarded"`
}

func (user *User) GetTeamMap() (map[string]teamModels.Team, error) {
client := teamModels.New()
func (user *User) GetTeamMap() (map[string]team.Team, error) {
client := team.New()

teams, err := client.ListByUserID(user.ID)
if err != nil {
return nil, fmt.Errorf("failed to get teams for user %s. details: %w", user.Username, err)
}

teamsMap := make(map[string]teamModels.Team)
teamsMap := make(map[string]team.Team)
for _, team := range teams {
teamsMap[team.ID] = team
}
Expand Down
11 changes: 6 additions & 5 deletions pkg/jobs/jobs.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,12 @@ import (
"github.com/mitchellh/mapstructure"
"go-deploy/models/dto/body"
deploymentModel "go-deploy/models/sys/deployment"
storageManagerModel "go-deploy/models/sys/deployment/storage_manager"
jobModel "go-deploy/models/sys/job"
storageManagerModel "go-deploy/models/sys/storage_manager"
vmModel "go-deploy/models/sys/vm"
"go-deploy/pkg/workers/confirm"
"go-deploy/service/deployment_service"
"go-deploy/service/storage_manager_service"
"go-deploy/service/vm_service"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
Expand Down Expand Up @@ -397,9 +398,9 @@ func CreateStorageManager(job *jobModel.Job) error {
return makeTerminatedError(err)
}

err = deployment_service.CreateStorageManager(id, &params)
err = storage_manager_service.CreateStorageManager(id, &params)
if err != nil {
if errors.Is(err, deployment_service.StorageManagerAlreadyExistsErr) {
if errors.Is(err, storage_manager_service.StorageManagerAlreadyExistsErr) {
return makeTerminatedError(err)
}

Expand All @@ -417,7 +418,7 @@ func DeleteStorageManager(job *jobModel.Job) error {

id := job.Args["id"].(string)

err = deployment_service.DeleteStorageManager(id)
err = storage_manager_service.DeleteStorageManager(id)
if err != nil {
return makeFailedError(err)
}
Expand All @@ -433,7 +434,7 @@ func RepairStorageManager(job *jobModel.Job) error {

id := job.Args["id"].(string)

err = deployment_service.RepairStorageManager(id)
err = storage_manager_service.RepairStorageManager(id)
if err != nil {
return makeTerminatedError(err)
}
Expand Down
9 changes: 1 addition & 8 deletions pkg/subsystems/cs/models/vm_public.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,9 @@ func CreateVmPublicFromGet(vm *cloudstack.VirtualMachine) *VmPublic {

tags := FromCsTags(vm.Tags)

var name string
for _, tag := range tags {
if tag.Key == "deployName" {
name = tag.Value
}
}

return &VmPublic{
ID: vm.Id,
Name: name,
Name: vm.Name,
ServiceOfferingID: vm.Serviceofferingid,
TemplateID: vm.Templateid,
ExtraConfig: extraConfig,
Expand Down
11 changes: 5 additions & 6 deletions pkg/subsystems/cs/vm.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import (
"gopkg.in/yaml.v3"
"log"
"math/rand"
"net/url"
"strings"
"time"
)
Expand Down Expand Up @@ -121,11 +120,11 @@ func (client *Client) UpdateVM(public *models.VmPublic) (*models.VmPublic, error
params.SetName(public.Name)
params.SetDisplayname(public.Name)

if public.ExtraConfig == "" {
params.SetExtraconfig(url.QueryEscape("none"))
} else {
params.SetExtraconfig(url.QueryEscape(public.ExtraConfig))
}
//if public.ExtraConfig == "" {
// params.SetExtraconfig(url.QueryEscape("none"))
//} else {
// params.SetExtraconfig(url.QueryEscape(public.ExtraConfig))
//}

_, err = client.CsClient.VirtualMachine.UpdateVirtualMachine(params)
if err != nil {
Expand Down
12 changes: 10 additions & 2 deletions pkg/workers/repair/workers.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import (
"fmt"
"github.com/google/uuid"
deploymentModel "go-deploy/models/sys/deployment"
storageManagerModel "go-deploy/models/sys/deployment/storage_manager"
jobModel "go-deploy/models/sys/job"
storageManagerModel "go-deploy/models/sys/storage_manager"
vmModel "go-deploy/models/sys/vm"
"go-deploy/pkg/config"
"go-deploy/service/job_service"
Expand Down Expand Up @@ -97,7 +97,11 @@ func storageManagerRepairer(ctx context.Context) {
continue
}

err = deploymentModel.New().MarkRepaired(storageManager.ID)
err = storageManagerModel.New().MarkRepaired(storageManager.ID)
if err != nil {
utils.PrettyPrintError(fmt.Errorf("failed to mark storage manager %s as repaired. details: %w", storageManager.ID, err))
continue
}
}
}
case <-ctx.Done():
Expand Down Expand Up @@ -133,6 +137,10 @@ func vmRepairer(ctx context.Context) {
}

err = vmModel.New().MarkRepaired(vm.ID)
if err != nil {
log.Printf("failed to mark vm %s as repaired: %s\n", vm.Name, err.Error())
continue
}
}
}
case <-ctx.Done():
Expand Down
4 changes: 2 additions & 2 deletions routers/api/v1/middleware/create_storage_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"github.com/gin-gonic/gin"
"go-deploy/pkg/sys"
v1 "go-deploy/routers/api/v1"
"go-deploy/service/deployment_service"
"go-deploy/service/storage_manager_service"
"go-deploy/utils"
)

Expand All @@ -19,7 +19,7 @@ func CreateStorageManager() gin.HandlerFunc {
return
}

err = deployment_service.CreateStorageManagerIfNotExists(auth.UserID)
err = storage_manager_service.CreateStorageManagerIfNotExists(auth.UserID)
if err != nil {
utils.PrettyPrintError(fmt.Errorf("failed to create storage manager. details: %w", err))
return
Expand Down
3 changes: 2 additions & 1 deletion routers/api/v1/v1_deployment/deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,13 @@ import (
"go-deploy/service"
"go-deploy/service/deployment_service"
"go-deploy/service/job_service"
"go-deploy/service/storage_manager_service"
"go-deploy/service/user_service"
"go-deploy/service/zone_service"
)

func getStorageManagerURL(userID string, auth *service.AuthInfo) *string {
storageManager, err := deployment_service.GetStorageManagerByOwnerIdAuth(userID, auth)
storageManager, err := storage_manager_service.GetStorageManagerByOwnerIdAuth(userID, auth)
if err != nil {
return nil
}
Expand Down
10 changes: 5 additions & 5 deletions routers/api/v1/v1_deployment/storage_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import (
"go-deploy/pkg/app/status_codes"
"go-deploy/pkg/sys"
v1 "go-deploy/routers/api/v1"
"go-deploy/service/deployment_service"
"go-deploy/service/job_service"
"go-deploy/service/storage_manager_service"
"net/http"
)

Expand Down Expand Up @@ -44,7 +44,7 @@ func ListStorageManagers(c *gin.Context) {
}

if requestQuery.All {
storageManagers, _ := deployment_service.GetAllStorageManagers(auth)
storageManagers, _ := storage_manager_service.GetAllStorageManagers(auth)

dtoStorageManagers := make([]body.StorageManagerRead, len(storageManagers))
for i, deployment := range storageManagers {
Expand All @@ -55,7 +55,7 @@ func ListStorageManagers(c *gin.Context) {
return
}

storageManagers, err := deployment_service.ListStorageManagersAuth(requestQuery.All, requestQuery.UserID, auth, &requestQuery.Pagination)
storageManagers, err := storage_manager_service.ListStorageManagersAuth(requestQuery.All, requestQuery.UserID, auth, &requestQuery.Pagination)
if err != nil {
context.ServerError(err, v1.InternalError)
return
Expand Down Expand Up @@ -104,7 +104,7 @@ func GetStorageManager(c *gin.Context) {
return
}

storageManager, err := deployment_service.GetStorageManagerByIdAuth(requestURI.StorageManagerID, auth)
storageManager, err := storage_manager_service.GetStorageManagerByIdAuth(requestURI.StorageManagerID, auth)
if err != nil {
context.ErrorResponse(http.StatusInternalServerError, status_codes.ResourceValidationFailed, "Failed to validate")
return
Expand Down Expand Up @@ -148,7 +148,7 @@ func DeleteStorageManager(c *gin.Context) {
return
}

storageManager, err := deployment_service.GetStorageManagerByIdAuth(requestURI.StorageManagerID, auth)
storageManager, err := storage_manager_service.GetStorageManagerByIdAuth(requestURI.StorageManagerID, auth)
if err != nil {
context.ServerError(err, v1.InternalError)
return
Expand Down
2 changes: 1 addition & 1 deletion routers/api/v1/v1_user/team.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"go-deploy/models/dto/body"
"go-deploy/models/dto/query"
"go-deploy/models/dto/uri"
teamModels "go-deploy/models/sys/user/team"
teamModels "go-deploy/models/sys/team"
"go-deploy/pkg/sys"
v1 "go-deploy/routers/api/v1"
"go-deploy/service/deployment_service"
Expand Down
3 changes: 2 additions & 1 deletion routers/api/v1/v1_user/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
v1 "go-deploy/routers/api/v1"
"go-deploy/service"
"go-deploy/service/deployment_service"
"go-deploy/service/storage_manager_service"
"go-deploy/service/user_service"
"go-deploy/service/vm_service"
"go-deploy/utils"
Expand Down Expand Up @@ -42,7 +43,7 @@ func collectUsage(context *sys.ClientContext, userID string) *userModel.Usage {
}

func getStorageURL(userID string, auth *service.AuthInfo) (*string, error) {
storageManager, err := deployment_service.GetStorageManagerByOwnerIdAuth(userID, auth)
storageManager, err := storage_manager_service.GetStorageManagerByOwnerIdAuth(userID, auth)
if err != nil {
return nil, err
}
Expand Down
30 changes: 17 additions & 13 deletions service/deployment_service/base/deployment_context.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,10 @@ import (
)

type DeploymentContext struct {
Deployment *deploymentModels.Deployment
MainApp *deploymentModels.App
Zone *configModels.DeploymentZone
CreateParams *deploymentModels.CreateParams
UpdateParams *deploymentModels.UpdateParams
Generator *resources.PublicGeneratorType
Deployment *deploymentModels.Deployment
MainApp *deploymentModels.App
Zone *configModels.DeploymentZone
Generator *resources.PublicGeneratorType
}

func NewDeploymentBaseContext(deploymentID string) (*DeploymentContext, error) {
Expand Down Expand Up @@ -44,12 +42,18 @@ func NewDeploymentBaseContext(deploymentID string) (*DeploymentContext, error) {
}, nil
}

func (c *DeploymentContext) WithCreateParams(params *deploymentModels.CreateParams) *DeploymentContext {
c.CreateParams = params
return c
}
func (dc *DeploymentContext) Refresh() error {
deployment, err := deploymentModels.New().GetByID(dc.Deployment.ID)
if err != nil {
return err
}

if deployment == nil {
return DeploymentDeletedErr
}

func (c *DeploymentContext) WithUpdateParams(params *deploymentModels.UpdateParams) *DeploymentContext {
c.UpdateParams = params
return c
dc.Deployment = deployment
dc.Generator.WithDeployment(deployment)

return nil
}
12 changes: 3 additions & 9 deletions service/deployment_service/base/storage_manager_context.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,19 @@ package base

import (
configModels "go-deploy/models/config"
"go-deploy/models/sys/deployment/storage_manager"
storage_manager2 "go-deploy/models/sys/storage_manager"
"go-deploy/pkg/config"
"go-deploy/service/resources"
)

type StorageManagerContext struct {
StorageManager *storage_manager.StorageManager
StorageManager *storage_manager2.StorageManager
Zone *configModels.DeploymentZone
CreateParams *storage_manager.CreateParams
Generator *resources.PublicGeneratorType
}

func NewStorageManagerBaseContext(id string) (*StorageManagerContext, error) {
storageManager, err := storage_manager.New().GetByID(id)
storageManager, err := storage_manager2.New().GetByID(id)
if err != nil {
return nil, err
}
Expand All @@ -35,8 +34,3 @@ func NewStorageManagerBaseContext(id string) (*StorageManagerContext, error) {
Generator: resources.PublicGenerator().WithStorageManager(storageManager).WithDeploymentZone(zone),
}, nil
}

func (c *StorageManagerContext) WithCreateParams(params *storage_manager.CreateParams) *StorageManagerContext {
c.CreateParams = params
return c
}
Loading

0 comments on commit bc4be93

Please sign in to comment.