Merge pull request #72 from RafaySystems/consistent-errors

Consistent error handling in services (partner,project,cluster,org)
This commit is contained in:
nirav-rafay
2022-03-21 11:38:10 +05:30
committed by GitHub
8 changed files with 164 additions and 510 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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