From a004ab25aeefe042077e69daf43f771bc26f6275 Mon Sep 17 00:00:00 2001 From: Abin Simon Date: Fri, 18 Mar 2022 12:29:47 +0530 Subject: [PATCH] Consistent error handling in services (partner,project,cluster,org) --- pkg/service/cluster.go | 117 ++++------------------------ pkg/service/organization.go | 149 +++++------------------------------- pkg/service/partner.go | 88 ++------------------- pkg/service/project.go | 96 +++-------------------- server/cluster.go | 48 ++++++------ server/organization.go | 57 +++++++------- server/partner.go | 52 ++++++------- server/project.go | 67 ++++++++-------- 8 files changed, 164 insertions(+), 510 deletions(-) diff --git a/pkg/service/cluster.go b/pkg/service/cluster.go index c1e76ea..e9a5384 100644 --- a/pkg/service/cluster.go +++ b/pkg/service/cluster.go @@ -114,12 +114,7 @@ func (es *clusterService) Create(ctx context.Context, cluster *infrav3.Cluster) var proj models.Project _, err := pg.GetByName(ctx, es.db, cluster.Metadata.Project, &proj) if err != nil { - cluster.Status = &commonv3.Status{ - ConditionType: "Create", - ConditionStatus: commonv3.ConditionStatus_StatusFailed, - Reason: err.Error(), - } - return cluster, err + return &infrav3.Cluster{}, err } /*reqAuth, err := c.requestAuth(r, ctx, ps) @@ -129,31 +124,16 @@ func (es *clusterService) Create(ctx context.Context, cluster *infrav3.Cluster) }*/ if cluster.Metadata.Name == "" { - cluster.Status = &commonv3.Status{ - ConditionType: "Create", - ConditionStatus: commonv3.ConditionStatus_StatusFailed, - Reason: "Invalid cluster data, Name is missing.", - } - return cluster, fmt.Errorf("invalid cluster data, name is missing") + return &infrav3.Cluster{}, fmt.Errorf("invalid cluster data, name is missing") } if cluster.Spec.ClusterType == "" { - cluster.Status = &commonv3.Status{ - ConditionType: "Create", - ConditionStatus: commonv3.ConditionStatus_StatusFailed, - Reason: "Invalid cluster data, Cluster type is missing.", - } - return cluster, fmt.Errorf("invalid cluster data, cluster type is missing") + return &infrav3.Cluster{}, fmt.Errorf("invalid cluster data, cluster type is missing") } clusterGeneration, err := clstrutil.GetClusterGeneration(cluster.Spec.ClusterType) if err != nil { - cluster.Status = &commonv3.Status{ - ConditionType: "Create", - ConditionStatus: commonv3.ConditionStatus_StatusFailed, - Reason: "Invalid cluster data, Cluster generation is invalid.", - } - return cluster, fmt.Errorf("invalid cluster data, cluster generation is invalid") + return &infrav3.Cluster{}, fmt.Errorf("invalid cluster data, cluster generation is invalid") } if !clstrutil.HasValidCharacters(strings.ToLower(cluster.Metadata.Name)) { @@ -181,12 +161,7 @@ func (es *clusterService) Create(ctx context.Context, cluster *infrav3.Cluster) _log.Infof("Skipping as first time cluster create ") } else if clusterPresent != nil { errormsg = "cluster name is already taken. please try another name" - cluster.Status = &commonv3.Status{ - ConditionType: "Create", - ConditionStatus: commonv3.ConditionStatus_StatusFailed, - Reason: errormsg, - } - return cluster, fmt.Errorf(errormsg) + return &infrav3.Cluster{}, fmt.Errorf(errormsg) } metro := &models.Metro{} @@ -264,13 +239,9 @@ func (es *clusterService) Create(ctx context.Context, cluster *infrav3.Cluster) return dao.CreateCluster(ctx, tx, edb) }) if err != nil { - cluster.Status = &commonv3.Status{ - ConditionType: "Create", - ConditionStatus: commonv3.ConditionStatus_StatusFailed, - Reason: err.Error(), - } - return cluster, err + return &infrav3.Cluster{}, err } + // if project is set create project cluster var pc *models.ProjectCluster pcList := make([]models.ProjectCluster, 0) @@ -281,12 +252,7 @@ func (es *clusterService) Create(ctx context.Context, cluster *infrav3.Cluster) } err = dao.CreateProjectCluster(ctx, es.db, pc) if err != nil { - cluster.Status = &commonv3.Status{ - ConditionType: "Create", - ConditionStatus: commonv3.ConditionStatus_StatusFailed, - Reason: err.Error(), - } - return cluster, err + return &infrav3.Cluster{}, err } pcList = append(pcList, *pc) } @@ -298,12 +264,7 @@ func (es *clusterService) Create(ctx context.Context, cluster *infrav3.Cluster) operatorSpecStr, err := clstrutil.GetClusterOperatorYaml(ctx, &es.downloadData, clusterResp) if err != nil { _log.Errorw("Error downloading v2 cluster operator yaml", "Error", err) - cluster.Status = &commonv3.Status{ - ConditionType: "Create", - ConditionStatus: commonv3.ConditionStatus_StatusFailed, - Reason: err.Error(), - } - return cluster, err + return &infrav3.Cluster{}, err } _log.Infow("Creating cluster operator yaml", "clusterid", edb.ID) operatorSpecEncoded := base64.StdEncoding.EncodeToString([]byte(operatorSpecStr)) @@ -346,23 +307,14 @@ func (s *clusterService) Select(ctx context.Context, cluster *infrav3.Cluster, i } c, err := dao.GetCluster(ctx, s.db, &models.Cluster{ID: id, Name: cluster.Metadata.Name}) if err != nil { - clstr.Status = &commonv3.Status{ - ConditionStatus: commonv3.ConditionStatus_StatusFailed, - Reason: err.Error(), - LastUpdated: timestamppb.Now(), - } - return clstr, err + return &infrav3.Cluster{}, err } + var projects []models.ProjectCluster if isExtended { projects, err = dao.GetProjectsForCluster(ctx, s.db, c.ID) if err != nil { - clstr.Status = &commonv3.Status{ - ConditionStatus: commonv3.ConditionStatus_StatusFailed, - Reason: err.Error(), - LastUpdated: timestamppb.Now(), - } - return clstr, err + return &infrav3.Cluster{}, err } } @@ -398,23 +350,13 @@ func (s *clusterService) Get(ctx context.Context, opts ...query.Option) (*infrav } c, err := dao.GetCluster(ctx, s.db, &models.Cluster{ID: id, Name: queryOptions.Name}) if err != nil { - clstr.Status = &commonv3.Status{ - ConditionStatus: commonv3.ConditionStatus_StatusFailed, - Reason: err.Error(), - LastUpdated: timestamppb.Now(), - } - return clstr, err + return &infrav3.Cluster{}, err } var projects []models.ProjectCluster if queryOptions.Extended { projects, err = dao.GetProjectsForCluster(ctx, s.db, c.ID) if err != nil { - clstr.Status = &commonv3.Status{ - ConditionStatus: commonv3.ConditionStatus_StatusFailed, - Reason: err.Error(), - LastUpdated: timestamppb.Now(), - } - return clstr, err + return &infrav3.Cluster{}, err } } @@ -508,10 +450,6 @@ func (s *clusterService) prepareClusterResponse(ctx context.Context, clstr *infr Country: metro.Country, } } - clstr.Status = &commonv3.Status{ - ConditionStatus: commonv3.ConditionStatus_StatusOK, - LastUpdated: timestamppb.New(c.ModifiedAt), - } return clstr } @@ -530,12 +468,7 @@ func (cs *clusterService) Update(ctx context.Context, cluster *infrav3.Cluster) edb, err := pg.GetByName(ctx, cs.db, cluster.Metadata.Name, &models.Cluster{}) if err != nil { - cluster.Status = &commonv3.Status{ - ConditionType: "Update", - ConditionStatus: commonv3.ConditionStatus_StatusFailed, - Reason: err.Error(), - } - return cluster, fmt.Errorf(errormsg) + return &infrav3.Cluster{}, fmt.Errorf(errormsg) } cdb := edb.(*models.Cluster) @@ -551,12 +484,7 @@ func (cs *clusterService) Update(ctx context.Context, cluster *infrav3.Cluster) _, err = clstrutil.GetClusterGeneration(cluster.Spec.ClusterType) if err != nil { - cluster.Status = &commonv3.Status{ - ConditionType: "Update", - ConditionStatus: commonv3.ConditionStatus_StatusFailed, - Reason: "Invalid cluster data, Cluster generation is invalid.", - } - return cluster, fmt.Errorf("invalid cluster data, cluster generation is invalid") + return &infrav3.Cluster{}, fmt.Errorf("invalid cluster data, cluster generation is invalid") } if len(cluster.Metadata.Labels) == 0 { @@ -622,18 +550,7 @@ func (cs *clusterService) Update(ctx context.Context, cluster *infrav3.Cluster) } err = dao.UpdateCluster(ctx, cs.db, cdb) if err != nil { - cluster.Status = &commonv3.Status{ - ConditionStatus: commonv3.ConditionStatus_StatusFailed, - ConditionType: "Update", - LastUpdated: timestamppb.New(cdb.ModifiedAt), - } - return cluster, err - } - - cluster.Status = &commonv3.Status{ - ConditionStatus: commonv3.ConditionStatus_StatusOK, - ConditionType: "Update", - LastUpdated: timestamppb.New(cdb.ModifiedAt), + return &infrav3.Cluster{}, err } cs.notifyCluster(ctx, cluster) diff --git a/pkg/service/organization.go b/pkg/service/organization.go index 9fee198..4864962 100644 --- a/pkg/service/organization.go +++ b/pkg/service/organization.go @@ -51,7 +51,7 @@ func (s *organizationService) Create(ctx context.Context, org *systemv3.Organiza var partner models.Partner _, err := pg.GetByName(ctx, s.db, org.Metadata.Partner, &partner) if err != nil { - return nil, err + return &systemv3.Organization{}, err } //update default organization setting values @@ -65,12 +65,7 @@ func (s *organizationService) Create(ctx context.Context, org *systemv3.Organiza } sb, err := json.MarshalIndent(org.GetSpec().GetSettings(), "", "\t") if err != nil { - org.Status = &v3.Status{ - ConditionType: "Create", - ConditionStatus: v3.ConditionStatus_StatusFailed, - LastUpdated: timestamppb.Now(), - Reason: err.Error(), - } + return &systemv3.Organization{}, err } //convert v3 spec to internal models organization := models.Organization{ @@ -98,23 +93,12 @@ func (s *organizationService) Create(ctx context.Context, org *systemv3.Organiza } entity, err := pg.Create(ctx, s.db, &organization) if err != nil { - org.Status = &v3.Status{ - ConditionType: "Create", - ConditionStatus: v3.ConditionStatus_StatusFailed, - LastUpdated: timestamppb.Now(), - Reason: err.Error(), - } - return org, err + return &systemv3.Organization{}, err } if createdOrg, ok := entity.(*models.Organization); ok { //update v3 spec org.Metadata.Id = createdOrg.ID.String() - org.Status = &v3.Status{ - ConditionType: "Create", - ConditionStatus: v3.ConditionStatus_StatusOK, - LastUpdated: timestamppb.Now(), - } } return org, nil @@ -133,21 +117,11 @@ func (s *organizationService) GetByID(ctx context.Context, id string) (*systemv3 uid, err := uuid.Parse(id) if err != nil { - organization.Status = &v3.Status{ - ConditionType: "Describe", - LastUpdated: timestamppb.Now(), - ConditionStatus: v3.ConditionStatus_StatusFailed, - } - return organization, err + return &systemv3.Organization{}, err } entity, err := pg.GetByID(ctx, s.db, uid, &models.Organization{}) if err != nil { - organization.Status = &v3.Status{ - ConditionType: "Describe", - LastUpdated: timestamppb.Now(), - ConditionStatus: v3.ConditionStatus_StatusFailed, - } - return organization, err + return &systemv3.Organization{}, err } if org, ok := entity.(*models.Organization); ok { @@ -155,24 +129,12 @@ func (s *organizationService) GetByID(ctx context.Context, id string) (*systemv3 var partner models.Partner _, err := pg.GetByID(ctx, s.db, org.PartnerId, &partner) if err != nil { - organization.Status = &v3.Status{ - ConditionType: "Describe", - ConditionStatus: v3.ConditionStatus_StatusFailed, - Reason: err.Error(), - LastUpdated: timestamppb.Now(), - } - return organization, err + return &systemv3.Organization{}, err } organization, err = prepareOrganizationResponse(organization, org, partner.Name) if err != nil { - return organization, err - } - - organization.Status = &v3.Status{ - ConditionType: "Describe", - LastUpdated: timestamppb.Now(), - ConditionStatus: v3.ConditionStatus_StatusOK, + return &systemv3.Organization{}, err } return organization, nil @@ -205,16 +167,7 @@ func (s *organizationService) GetByName(ctx context.Context, name string) (*syst } entity, err := pg.GetByName(ctx, s.db, name, &models.Organization{}) if err != nil { - organization.Metadata = &v3.Metadata{ - Name: name, - } - organization.Status = &v3.Status{ - ConditionType: "Describe", - ConditionStatus: v3.ConditionStatus_StatusFailed, - Reason: err.Error(), - LastUpdated: timestamppb.Now(), - } - return organization, err + return &systemv3.Organization{}, err } if org, ok := entity.(*models.Organization); ok { @@ -222,27 +175,12 @@ func (s *organizationService) GetByName(ctx context.Context, name string) (*syst var partner models.Partner _, err := pg.GetByID(ctx, s.db, org.PartnerId, &partner) if err != nil { - organization.Metadata = &v3.Metadata{ - Name: name, - } - organization.Status = &v3.Status{ - ConditionType: "Describe", - ConditionStatus: v3.ConditionStatus_StatusFailed, - Reason: err.Error(), - LastUpdated: timestamppb.Now(), - } - return organization, err + return &systemv3.Organization{}, err } organization, err = prepareOrganizationResponse(organization, org, partner.Name) if err != nil { - return organization, err - } - - organization.Status = &v3.Status{ - ConditionType: "Describe", - LastUpdated: timestamppb.Now(), - ConditionStatus: v3.ConditionStatus_StatusOK, + return &systemv3.Organization{}, err } } @@ -253,25 +191,14 @@ func (s *organizationService) Update(ctx context.Context, organization *systemv3 entity, err := pg.GetByName(ctx, s.db, organization.Metadata.Name, &models.Organization{}) if err != nil { - organization.Status = &v3.Status{ - ConditionType: "Update", - ConditionStatus: v3.ConditionStatus_StatusFailed, - Reason: err.Error(), - LastUpdated: timestamppb.Now(), - } - return organization, err + return &systemv3.Organization{}, err } if org, ok := entity.(*models.Organization); ok { sb, err := json.MarshalIndent(organization.GetSpec().GetSettings(), "", "\t") if err != nil { - organization.Status = &v3.Status{ - ConditionType: "Update", - ConditionStatus: v3.ConditionStatus_StatusFailed, - Reason: err.Error(), - LastUpdated: timestamppb.Now(), - } + return &systemv3.Organization{}, err } //update organization details @@ -297,22 +224,7 @@ func (s *organizationService) Update(ctx context.Context, organization *systemv3 _, err = pg.Update(ctx, s.db, org.ID, org) if err != nil { - organization.Status = &v3.Status{ - ConditionType: "Update", - ConditionStatus: v3.ConditionStatus_StatusFailed, - LastUpdated: timestamppb.Now(), - Reason: err.Error(), - } - return organization, err - } - - //update status - if organization.Status != nil { - organization.Status = &v3.Status{ - ConditionType: "Update", - ConditionStatus: v3.ConditionStatus_StatusOK, - LastUpdated: timestamppb.Now(), - } + return &systemv3.Organization{}, err } } @@ -323,35 +235,19 @@ func (s *organizationService) Delete(ctx context.Context, organization *systemv3 entity, err := pg.GetByName(ctx, s.db, organization.Metadata.Name, &models.Organization{}) if err != nil { - organization.Status = &v3.Status{ - ConditionType: "Delete", - ConditionStatus: v3.ConditionStatus_StatusFailed, - Reason: err.Error(), - LastUpdated: timestamppb.Now(), - } - return organization, err + return &systemv3.Organization{}, err } if org, ok := entity.(*models.Organization); ok { org.Trash = true _, err := pg.Update(ctx, s.db, org.ID, org) if err != nil { - organization.Status = &v3.Status{ - ConditionType: "Delete", - ConditionStatus: v3.ConditionStatus_StatusFailed, - Reason: err.Error(), - LastUpdated: timestamppb.Now(), - } - return organization, err + return &systemv3.Organization{}, err } + //update v3 status organization.Metadata.Name = org.Name organization.Metadata.ModifiedAt = timestamppb.New(org.ModifiedAt) - organization.Status = &v3.Status{ - ConditionType: "Deleted", - ConditionStatus: v3.ConditionStatus_StatusOK, - LastUpdated: timestamppb.Now(), - } } return organization, nil @@ -371,20 +267,20 @@ func (s *organizationService) List(ctx context.Context, organization *systemv3.O var partner models.Partner _, err := pg.GetByName(ctx, s.db, organization.Metadata.Partner, &partner) if err != nil { - return organinzationList, err + return &systemv3.OrganizationList{}, err } var orgs []models.Organization entities, err := pg.List(ctx, s.db, uuid.NullUUID{UUID: partner.ID, Valid: true}, uuid.NullUUID{UUID: uuid.Nil}, &orgs) if err != nil { - return organinzationList, err + return &systemv3.OrganizationList{}, err } if orgs, ok := entities.(*[]models.Organization); ok { for _, org := range *orgs { var settings systemv3.OrganizationSettings err := json.Unmarshal(org.Settings, &settings) if err != nil { - return nil, err + return &systemv3.OrganizationList{}, err } organization.Metadata = &v3.Metadata{ Name: org.Name, @@ -431,12 +327,7 @@ func prepareOrganizationResponse(organization *systemv3.Organization, org *model if org.Settings != nil { err := json.Unmarshal(org.Settings, &settings) if err != nil { - organization.Status = &v3.Status{ - ConditionType: "Describe", - LastUpdated: timestamppb.Now(), - ConditionStatus: v3.ConditionStatus_StatusFailed, - } - return organization, err + return &systemv3.Organization{}, err } } diff --git a/pkg/service/partner.go b/pkg/service/partner.go index fc7e1fc..92a2891 100644 --- a/pkg/service/partner.go +++ b/pkg/service/partner.go @@ -67,23 +67,13 @@ func (s *partnerService) Create(ctx context.Context, partner *systemv3.Partner) } entity, err := pg.Create(ctx, s.db, &part) if err != nil { - partner.Status = &v3.Status{ - ConditionStatus: v3.ConditionStatus_StatusFailed, - Reason: err.Error(), - } - return partner, err + return &systemv3.Partner{}, err } if createdPartner, ok := entity.(*models.Partner); ok { //update v3 spec partner.Metadata.Id = createdPartner.ID.String() partner.Metadata.ModifiedAt = timestamppb.New(createdPartner.ModifiedAt) - if partner.Status != nil { - partner.Status = &v3.Status{ - ConditionStatus: v3.ConditionStatus_StatusOK, - LastUpdated: timestamppb.Now(), - } - } } return partner, nil @@ -102,23 +92,11 @@ func (s *partnerService) GetByID(ctx context.Context, id string) (*systemv3.Part uid, err := uuid.Parse(id) if err != nil { - partner.Status = &v3.Status{ - ConditionType: "Describe", - ConditionStatus: v3.ConditionStatus_StatusFailed, - Reason: err.Error(), - LastUpdated: timestamppb.Now(), - } - return partner, err + return &systemv3.Partner{}, err } entity, err := pg.GetByID(ctx, s.db, uid, &models.Partner{}) if err != nil { - partner.Status = &v3.Status{ - ConditionType: "Describe", - ConditionStatus: v3.ConditionStatus_StatusFailed, - Reason: err.Error(), - LastUpdated: timestamppb.Now(), - } - return partner, err + return &systemv3.Partner{}, err } if part, ok := entity.(*models.Partner); ok { @@ -142,11 +120,6 @@ func (s *partnerService) GetByID(ctx context.Context, id string) (*systemv3.Part IsTOTPEnabled: part.IsTOTPEnabled, Settings: nil, //TODO } - partner.Status = &v3.Status{ - ConditionType: "Describe", - ConditionStatus: v3.ConditionStatus_StatusOK, - LastUpdated: timestamppb.New(part.ModifiedAt), - } return partner, nil @@ -181,13 +154,7 @@ func (s *partnerService) GetByName(ctx context.Context, name string) (*systemv3. entity, err := pg.GetByName(ctx, s.db, name, &models.Partner{}) if err != nil { - partner.Status = &v3.Status{ - ConditionType: "Describe", - ConditionStatus: v3.ConditionStatus_StatusFailed, - Reason: err.Error(), - LastUpdated: timestamppb.Now(), - } - return partner, err + return &systemv3.Partner{}, err } if part, ok := entity.(*models.Partner); ok { @@ -212,11 +179,6 @@ func (s *partnerService) GetByName(ctx context.Context, name string) (*systemv3. IsTOTPEnabled: part.IsTOTPEnabled, Settings: nil, //TODO } - partner.Status = &v3.Status{ - ConditionType: "Describe", - ConditionStatus: v3.ConditionStatus_StatusOK, - LastUpdated: timestamppb.New(part.ModifiedAt), - } return partner, nil } else { @@ -243,12 +205,7 @@ func (s *partnerService) Update(ctx context.Context, partner *systemv3.Partner) entity, err := pg.GetByName(ctx, s.db, partner.Metadata.Name, &models.Partner{}) if err != nil { - partner.Status = &v3.Status{ - ConditionStatus: v3.ConditionStatus_StatusFailed, - Reason: err.Error(), - LastUpdated: timestamppb.Now(), - } - return partner, err + return &systemv3.Partner{}, err } var sb []byte @@ -277,20 +234,11 @@ func (s *partnerService) Update(ctx context.Context, partner *systemv3.Partner) //Update the partner details _, err = pg.Update(ctx, s.db, part.ID, part) if err != nil { - partner.Status = &v3.Status{ - ConditionStatus: v3.ConditionStatus_StatusFailed, - Reason: err.Error(), - LastUpdated: timestamppb.Now(), - } - return partner, err + return &systemv3.Partner{}, err } //update metadata and status partner.Metadata.ModifiedAt = timestamppb.New(part.ModifiedAt) - partner.Status = &v3.Status{ - ConditionStatus: v3.ConditionStatus_StatusOK, - LastUpdated: timestamppb.Now(), - } } @@ -300,34 +248,14 @@ func (s *partnerService) Update(ctx context.Context, partner *systemv3.Partner) func (s *partnerService) Delete(ctx context.Context, partner *systemv3.Partner) (*systemv3.Partner, error) { entity, err := pg.GetByName(ctx, s.db, partner.Metadata.Name, &models.Partner{}) if err != nil { - partner.Status = &v3.Status{ - ConditionType: "Delete", - ConditionStatus: v3.ConditionStatus_StatusFailed, - Reason: err.Error(), - LastUpdated: timestamppb.Now(), - } - return partner, err + return &systemv3.Partner{}, err } if part, ok := entity.(*models.Partner); ok { part.Trash = true _, err := pg.Update(ctx, s.db, part.ID, part) if err != nil { - partner.Status = &v3.Status{ - ConditionType: "Delete", - ConditionStatus: v3.ConditionStatus_StatusFailed, - Reason: err.Error(), - LastUpdated: timestamppb.Now(), - } - return partner, err - } - //update status - if partner != nil { - partner.Metadata.Name = part.Name - partner.Status = &v3.Status{ - ConditionStatus: v3.ConditionStatus_StatusOK, - ConditionType: "Delete", - } + return &systemv3.Partner{}, err } return partner, nil } diff --git a/pkg/service/project.go b/pkg/service/project.go index 998d556..e7f40ba 100644 --- a/pkg/service/project.go +++ b/pkg/service/project.go @@ -71,12 +71,7 @@ func (s *projectService) Create(ctx context.Context, project *systemv3.Project) } entity, err := pg.Create(ctx, s.db, &proj) if err != nil { - project.Status = &v3.Status{ - ConditionType: "Create", - ConditionStatus: v3.ConditionStatus_StatusFailed, - LastUpdated: timestamppb.Now(), - } - return project, err + return &systemv3.Project{}, err } //update v3 spec @@ -85,13 +80,6 @@ func (s *projectService) Create(ctx context.Context, project *systemv3.Project) project.Spec = &systemv3.ProjectSpec{ Default: createdProject.Default, } - if project.Status != nil { - project.Status = &v3.Status{ - ConditionType: "Create", - ConditionStatus: v3.ConditionStatus_StatusOK, - LastUpdated: timestamppb.Now(), - } - } } return project, nil @@ -110,23 +98,11 @@ func (s *projectService) GetByID(ctx context.Context, id string) (*systemv3.Proj uid, err := uuid.Parse(id) if err != nil { - project.Status = &v3.Status{ - ConditionType: "Describe", - ConditionStatus: v3.ConditionStatus_StatusFailed, - LastUpdated: timestamppb.Now(), - Reason: err.Error(), - } - return project, err + return &systemv3.Project{}, err } entity, err := pg.GetByID(ctx, s.db, uid, &models.Project{}) if err != nil { - project.Status = &v3.Status{ - ConditionType: "Describe", - ConditionStatus: v3.ConditionStatus_StatusFailed, - LastUpdated: timestamppb.Now(), - Reason: err.Error(), - } - return project, err + return &systemv3.Project{}, err } if proj, ok := entity.(*models.Project); ok { @@ -142,11 +118,6 @@ func (s *projectService) GetByID(ctx context.Context, id string) (*systemv3.Proj project.Spec = &systemv3.ProjectSpec{ Default: proj.Default, } - project.Status = &v3.Status{ - LastUpdated: timestamppb.Now(), - ConditionType: "Describe", - ConditionStatus: v3.ConditionStatus_StatusOK, - } return project, nil } @@ -166,13 +137,7 @@ func (s *projectService) GetByName(ctx context.Context, name string) (*systemv3. entity, err := pg.GetByName(ctx, s.db, name, &models.Project{}) if err != nil { - project.Status = &v3.Status{ - ConditionType: "Describe", - ConditionStatus: v3.ConditionStatus_StatusFailed, - LastUpdated: timestamppb.Now(), - Reason: err.Error(), - } - return project, err + return &systemv3.Project{}, err } if proj, ok := entity.(*models.Project); ok { @@ -199,11 +164,6 @@ func (s *projectService) GetByName(ctx context.Context, name string) (*systemv3. project.Spec = &systemv3.ProjectSpec{ Default: proj.Default, } - project.Status = &v3.Status{ - LastUpdated: timestamppb.Now(), - ConditionType: "Describe", - ConditionStatus: v3.ConditionStatus_StatusOK, - } return project, nil } @@ -215,13 +175,7 @@ func (s *projectService) Update(ctx context.Context, project *systemv3.Project) entity, err := pg.GetByName(ctx, s.db, project.Metadata.Name, &models.Project{}) if err != nil { - project.Status = &v3.Status{ - ConditionType: "Update", - ConditionStatus: v3.ConditionStatus_StatusFailed, - LastUpdated: timestamppb.Now(), - Reason: err.Error(), - } - return project, err + return &systemv3.Project{}, err } if proj, ok := entity.(*models.Project); ok { @@ -232,24 +186,13 @@ func (s *projectService) Update(ctx context.Context, project *systemv3.Project) _, err = pg.Update(ctx, s.db, proj.ID, proj) if err != nil { - project.Status = &v3.Status{ - ConditionType: "Update", - ConditionStatus: v3.ConditionStatus_StatusFailed, - LastUpdated: timestamppb.Now(), - Reason: err.Error(), - } - return project, err + return &systemv3.Project{}, err } //update spec and status project.Spec = &systemv3.ProjectSpec{ Default: proj.Default, } - project.Status = &v3.Status{ - ConditionType: "Update", - ConditionStatus: v3.ConditionStatus_StatusOK, - LastUpdated: timestamppb.Now(), - } } return project, nil @@ -258,34 +201,17 @@ func (s *projectService) Update(ctx context.Context, project *systemv3.Project) func (s *projectService) Delete(ctx context.Context, project *systemv3.Project) (*systemv3.Project, error) { entity, err := pg.GetByName(ctx, s.db, project.Metadata.Name, &models.Project{}) if err != nil { - project.Status = &v3.Status{ - ConditionType: "Delete", - ConditionStatus: v3.ConditionStatus_StatusFailed, - LastUpdated: timestamppb.Now(), - Reason: err.Error(), - } - return project, err + return &systemv3.Project{}, err } if proj, ok := entity.(*models.Project); ok { proj.Trash = true _, err := pg.Update(ctx, s.db, proj.ID, proj) if err != nil { - project.Status = &v3.Status{ - ConditionType: "Delete", - ConditionStatus: v3.ConditionStatus_StatusFailed, - LastUpdated: timestamppb.Now(), - Reason: err.Error(), - } - return project, err + return &systemv3.Project{}, err } //update v3 spec project.Metadata.Id = proj.ID.String() project.Metadata.Name = proj.Name - project.Status = &v3.Status{ - ConditionType: "Delete", - ConditionStatus: v3.ConditionStatus_StatusOK, - LastUpdated: timestamppb.Now(), - } } return project, nil @@ -305,17 +231,17 @@ func (s *projectService) List(ctx context.Context, project *systemv3.Project) (* var org models.Organization _, err := pg.GetByName(ctx, s.db, project.Metadata.Organization, &org) if err != nil { - return projectList, err + return &systemv3.ProjectList{}, err } var part models.Partner _, err = pg.GetByName(ctx, s.db, project.Metadata.Partner, &part) if err != nil { - return projectList, err + return &systemv3.ProjectList{}, err } var projs []models.Project entities, err := pg.List(ctx, s.db, uuid.NullUUID{UUID: part.ID, Valid: true}, uuid.NullUUID{UUID: org.ID, Valid: true}, &projs) if err != nil { - return projectList, err + return &systemv3.ProjectList{}, err } if projs, ok := entities.(*[]models.Project); ok { for _, proj := range *projs { diff --git a/server/cluster.go b/server/cluster.go index 3d4a430..f5c7638 100644 --- a/server/cluster.go +++ b/server/cluster.go @@ -11,7 +11,9 @@ import ( "github.com/RafaySystems/rcloud-base/pkg/service" rpcv3 "github.com/RafaySystems/rcloud-base/proto/rpc/scheduler" commonv3 "github.com/RafaySystems/rcloud-base/proto/types/commonpb/v3" + v3 "github.com/RafaySystems/rcloud-base/proto/types/commonpb/v3" infrapbv3 "github.com/RafaySystems/rcloud-base/proto/types/infrapb/v3" + "google.golang.org/protobuf/types/known/timestamppb" ) type clusterServer struct { @@ -27,28 +29,31 @@ func NewClusterServer(es service.ClusterService, data *common.DownloadData) rpcv } } -func (s *clusterServer) CreateCluster(ctx context.Context, e *infrapbv3.Cluster) (*infrapbv3.Cluster, error) { - edge, err := s.Create(ctx, e) +func updateClusterStatus(req *infrapbv3.Cluster, resp *infrapbv3.Cluster, err error) *infrapbv3.Cluster { if err != nil { - return nil, err + req.Status = &v3.Status{ + ConditionStatus: v3.ConditionStatus_StatusFailed, + LastUpdated: timestamppb.Now(), + Reason: err.Error(), + } + return req } - return edge, nil + resp.Status = &v3.Status{ConditionStatus: v3.ConditionStatus_StatusOK} + return resp } -func (s *clusterServer) GetClusters(ctx context.Context, e *commonv3.QueryOptions) (*infrapbv3.ClusterList, error) { - clusters, err := s.List(ctx, query.WithOptions(e)) - if err != nil { - return nil, err - } - return clusters, nil +func (s *clusterServer) CreateCluster(ctx context.Context, req *infrapbv3.Cluster) (*infrapbv3.Cluster, error) { + resp, err := s.Create(ctx, req) + return updateClusterStatus(req, resp, err), err } -func (s *clusterServer) GetCluster(ctx context.Context, e *infrapbv3.Cluster) (*infrapbv3.Cluster, error) { - cluster, err := s.Select(ctx, e, true) - if err != nil { - return nil, err - } - return cluster, nil +func (s *clusterServer) GetClusters(ctx context.Context, req *commonv3.QueryOptions) (*infrapbv3.ClusterList, error) { + return s.List(ctx, query.WithOptions(req)) +} + +func (s *clusterServer) GetCluster(ctx context.Context, req *infrapbv3.Cluster) (*infrapbv3.Cluster, error) { + resp, err := s.Select(ctx, req, true) + return updateClusterStatus(req, resp, err), err } func (s *clusterServer) DeleteCluster(ctx context.Context, e *infrapbv3.Cluster) (*rpcv3.DeleteClusterResponse, error) { @@ -59,12 +64,9 @@ func (s *clusterServer) DeleteCluster(ctx context.Context, e *infrapbv3.Cluster) return &rpcv3.DeleteClusterResponse{}, nil } -func (s *clusterServer) UpdateCluster(ctx context.Context, e *infrapbv3.Cluster) (*infrapbv3.Cluster, error) { - edge, err := s.Update(ctx, e) - if err != nil { - return nil, err - } - return edge, nil +func (s *clusterServer) UpdateCluster(ctx context.Context, req *infrapbv3.Cluster) (*infrapbv3.Cluster, error) { + resp, err := s.Update(ctx, req) + return updateClusterStatus(req, resp, err), err } func (s *clusterServer) DownloadCluster(ctx context.Context, cluster *infrapbv3.Cluster) (*commonv3.HttpBody, error) { @@ -100,7 +102,7 @@ func (s *clusterServer) DownloadCluster(ctx context.Context, cluster *infrapbv3. func (s *clusterServer) UpdateClusterStatus(ctx context.Context, cluster *infrapbv3.Cluster) (*infrapbv3.Cluster, error) { err := s.UpdateClusterConditionStatus(ctx, cluster) if err != nil { - return nil, err + return updateClusterStatus(cluster, cluster, err), err } return cluster, nil } diff --git a/server/organization.go b/server/organization.go index 2360ecc..7885464 100644 --- a/server/organization.go +++ b/server/organization.go @@ -5,7 +5,9 @@ import ( "github.com/RafaySystems/rcloud-base/pkg/service" systemrpc "github.com/RafaySystems/rcloud-base/proto/rpc/system" + v3 "github.com/RafaySystems/rcloud-base/proto/types/commonpb/v3" systempbv3 "github.com/RafaySystems/rcloud-base/proto/types/systempb/v3" + "google.golang.org/protobuf/types/known/timestamppb" ) type organizationServer struct { @@ -17,44 +19,39 @@ func NewOrganizationServer(ps service.OrganizationService) systemrpc.Organizatio return &organizationServer{ps} } -func (s *organizationServer) CreateOrganization(ctx context.Context, o *systempbv3.Organization) (*systempbv3.Organization, error) { - organization, err := s.Create(ctx, o) +func updateOrganizationStatus(req *systempbv3.Organization, resp *systempbv3.Organization, err error) *systempbv3.Organization { if err != nil { - return o, err + req.Status = &v3.Status{ + ConditionStatus: v3.ConditionStatus_StatusFailed, + LastUpdated: timestamppb.Now(), + Reason: err.Error(), + } + return req } - return organization, nil + resp.Status = &v3.Status{ConditionStatus: v3.ConditionStatus_StatusOK} + return resp } -func (s *organizationServer) GetOrganizations(ctx context.Context, o *systempbv3.Organization) (*systempbv3.OrganizationList, error) { - organizations, err := s.List(ctx, o) - if err != nil { - return nil, err - } - return organizations, nil +func (s *organizationServer) CreateOrganization(ctx context.Context, req *systempbv3.Organization) (*systempbv3.Organization, error) { + resp, err := s.Create(ctx, req) + return updateOrganizationStatus(req, resp, err), err } -func (s *organizationServer) GetOrganization(ctx context.Context, o *systempbv3.Organization) (*systempbv3.Organization, error) { - - organization, err := s.GetByName(ctx, o.Metadata.Name) - if err != nil { - return nil, err - } - - return organization, nil +func (s *organizationServer) GetOrganizations(ctx context.Context, req *systempbv3.Organization) (*systempbv3.OrganizationList, error) { + return s.List(ctx, req) } -func (s *organizationServer) DeleteOrganization(ctx context.Context, o *systempbv3.Organization) (*systempbv3.Organization, error) { - organization, err := s.Delete(ctx, o) - if err != nil { - return o, err - } - return organization, nil +func (s *organizationServer) GetOrganization(ctx context.Context, req *systempbv3.Organization) (*systempbv3.Organization, error) { + resp, err := s.GetByName(ctx, req.Metadata.Name) + return updateOrganizationStatus(req, resp, err), err } -func (s *organizationServer) UpdateOrganization(ctx context.Context, o *systempbv3.Organization) (*systempbv3.Organization, error) { - organization, err := s.Update(ctx, o) - if err != nil { - return o, err - } - return organization, nil +func (s *organizationServer) DeleteOrganization(ctx context.Context, req *systempbv3.Organization) (*systempbv3.Organization, error) { + resp, err := s.Delete(ctx, req) + return updateOrganizationStatus(req, resp, err), err +} + +func (s *organizationServer) UpdateOrganization(ctx context.Context, req *systempbv3.Organization) (*systempbv3.Organization, error) { + resp, err := s.Update(ctx, req) + return updateOrganizationStatus(req, resp, err), err } diff --git a/server/partner.go b/server/partner.go index d266369..a6c649f 100644 --- a/server/partner.go +++ b/server/partner.go @@ -5,7 +5,9 @@ import ( "github.com/RafaySystems/rcloud-base/pkg/service" systemrpc "github.com/RafaySystems/rcloud-base/proto/rpc/system" + v3 "github.com/RafaySystems/rcloud-base/proto/types/commonpb/v3" systempbv3 "github.com/RafaySystems/rcloud-base/proto/types/systempb/v3" + "google.golang.org/protobuf/types/known/timestamppb" ) type partnerServer struct { @@ -17,38 +19,34 @@ func NewPartnerServer(ps service.PartnerService) systemrpc.PartnerServer { return &partnerServer{ps} } -func (s *partnerServer) CreatePartner(ctx context.Context, p *systempbv3.Partner) (*systempbv3.Partner, error) { - p, err := s.Create(ctx, p) +func updatePartnerStatus(req *systempbv3.Partner, resp *systempbv3.Partner, err error) *systempbv3.Partner { if err != nil { - return nil, err - } - return p, nil -} -func (s *partnerServer) GetPartner(ctx context.Context, p *systempbv3.Partner) (*systempbv3.Partner, error) { - - partner, err := s.GetByName(ctx, p.Metadata.Name) - if err != nil { - partner, err = s.GetByID(ctx, p.Metadata.Id) - if err != nil { - return nil, err + req.Status = &v3.Status{ + ConditionStatus: v3.ConditionStatus_StatusFailed, + LastUpdated: timestamppb.Now(), + Reason: err.Error(), } + return req } - - return partner, nil + resp.Status = &v3.Status{ConditionStatus: v3.ConditionStatus_StatusOK} + return resp } -func (s *partnerServer) DeletePartner(ctx context.Context, p *systempbv3.Partner) (*systempbv3.Partner, error) { - partner, err := s.Delete(ctx, p) - if err != nil { - return nil, err - } - return partner, nil +func (s *partnerServer) CreatePartner(ctx context.Context, req *systempbv3.Partner) (*systempbv3.Partner, error) { + resp, err := s.Create(ctx, req) + return updatePartnerStatus(req, resp, err), err +} +func (s *partnerServer) GetPartner(ctx context.Context, req *systempbv3.Partner) (*systempbv3.Partner, error) { + resp, err := s.GetByName(ctx, req.Metadata.Name) + return updatePartnerStatus(req, resp, err), err } -func (s *partnerServer) UpdatePartner(ctx context.Context, p *systempbv3.Partner) (*systempbv3.Partner, error) { - partner, err := s.Update(ctx, p) - if err != nil { - return nil, err - } - return partner, nil +func (s *partnerServer) DeletePartner(ctx context.Context, req *systempbv3.Partner) (*systempbv3.Partner, error) { + resp, err := s.Delete(ctx, req) + return updatePartnerStatus(req, resp, err), err +} + +func (s *partnerServer) UpdatePartner(ctx context.Context, req *systempbv3.Partner) (*systempbv3.Partner, error) { + resp, err := s.Update(ctx, req) + return updatePartnerStatus(req, resp, err), err } diff --git a/server/project.go b/server/project.go index 6f165c9..3835067 100644 --- a/server/project.go +++ b/server/project.go @@ -5,7 +5,9 @@ import ( "github.com/RafaySystems/rcloud-base/pkg/service" systemrpc "github.com/RafaySystems/rcloud-base/proto/rpc/system" + v3 "github.com/RafaySystems/rcloud-base/proto/types/commonpb/v3" systempbv3 "github.com/RafaySystems/rcloud-base/proto/types/systempb/v3" + "google.golang.org/protobuf/types/known/timestamppb" ) type projectServer struct { @@ -17,47 +19,40 @@ func NewProjectServer(ps service.ProjectService) systemrpc.ProjectServer { return &projectServer{ps} } -func (s *projectServer) CreateProject(ctx context.Context, p *systempbv3.Project) (*systempbv3.Project, error) { - project, err := s.Create(ctx, p) +func updateProjectStatus(req *systempbv3.Project, resp *systempbv3.Project, err error) *systempbv3.Project { if err != nil { - return nil, err - } - return project, nil -} - -func (s *projectServer) GetProjects(ctx context.Context, p *systempbv3.Project) (*systempbv3.ProjectList, error) { - projects, err := s.List(ctx, p) - if err != nil { - return nil, err - } - return projects, nil -} - -func (s *projectServer) GetProject(ctx context.Context, p *systempbv3.Project) (*systempbv3.Project, error) { - - project, err := s.GetByName(ctx, p.Metadata.Name) - if err != nil { - project, err = s.GetByID(ctx, p.Metadata.Id) - if err != nil { - return nil, err + req.Status = &v3.Status{ + ConditionStatus: v3.ConditionStatus_StatusFailed, + LastUpdated: timestamppb.Now(), + Reason: err.Error(), } + return req } - - return project, nil + resp.Status = &v3.Status{ConditionStatus: v3.ConditionStatus_StatusOK} + return resp } -func (s *projectServer) DeleteProject(ctx context.Context, p *systempbv3.Project) (*systempbv3.Project, error) { - project, err := s.Delete(ctx, p) - if err != nil { - return nil, err - } - return project, nil +func (s *projectServer) CreateProject(ctx context.Context, req *systempbv3.Project) (*systempbv3.Project, error) { + resp, err := s.Create(ctx, req) + return updateProjectStatus(req, resp, err), err } -func (s *projectServer) UpdateProject(ctx context.Context, p *systempbv3.Project) (*systempbv3.Project, error) { - project, err := s.Update(ctx, p) - if err != nil { - return nil, err - } - return project, nil +func (s *projectServer) GetProjects(ctx context.Context, req *systempbv3.Project) (*systempbv3.ProjectList, error) { + return s.List(ctx, req) +} + +func (s *projectServer) GetProject(ctx context.Context, req *systempbv3.Project) (*systempbv3.Project, error) { + + resp, err := s.GetByName(ctx, req.Metadata.Name) + return updateProjectStatus(req, resp, err), err +} + +func (s *projectServer) DeleteProject(ctx context.Context, req *systempbv3.Project) (*systempbv3.Project, error) { + resp, err := s.Delete(ctx, req) + return updateProjectStatus(req, resp, err), err +} + +func (s *projectServer) UpdateProject(ctx context.Context, req *systempbv3.Project) (*systempbv3.Project, error) { + resp, err := s.Update(ctx, req) + return updateProjectStatus(req, resp, err), err }