From e5dfcb3a43f2dffa3424823944ac8805195519ef Mon Sep 17 00:00:00 2001 From: dhananjay0601 Date: Mon, 17 Jul 2023 19:59:56 +0530 Subject: [PATCH 1/5] Bulk deployemnet with appName and EnvName --- pkg/appClone/AppCloneService.go | 61 +++++++++++++++-------------- pkg/bean/app.go | 2 +- pkg/bulkAction/BulkUpdateService.go | 19 +++++++++ pkg/bulkAction/bean.go | 12 +++--- 4 files changed, 59 insertions(+), 35 deletions(-) diff --git a/pkg/appClone/AppCloneService.go b/pkg/appClone/AppCloneService.go index 04040f0990..2a26b4778a 100644 --- a/pkg/appClone/AppCloneService.go +++ b/pkg/appClone/AppCloneService.go @@ -905,37 +905,38 @@ func (impl *AppCloneServiceImpl) CreateCdPipeline(req *cloneCdPipelineRequest, c deploymentAppType = util.PIPELINE_DEPLOYMENT_TYPE_ACD } else if AllowedDeploymentAppTypes[util.PIPELINE_DEPLOYMENT_TYPE_HELM] { deploymentAppType = util.PIPELINE_DEPLOYMENT_TYPE_HELM + } - if refCdPipeline.ParentPipelineType == "WEBHOOK" { - cdPipeline := &bean.CDPipelineConfigObject{ - Id: 0, - EnvironmentId: refCdPipeline.EnvironmentId, - CiPipelineId: 0, - TriggerType: refCdPipeline.TriggerType, - Name: pipelineName, - Strategies: refCdPipeline.Strategies, - Namespace: refCdPipeline.Namespace, - AppWorkflowId: 0, - DeploymentTemplate: refCdPipeline.DeploymentTemplate, - PreStage: refCdPipeline.PreStage, //FIXME - PostStage: refCdPipeline.PostStage, - PreStageConfigMapSecretNames: refCdPipeline.PreStageConfigMapSecretNames, - PostStageConfigMapSecretNames: refCdPipeline.PostStageConfigMapSecretNames, - RunPostStageInEnv: refCdPipeline.RunPostStageInEnv, - RunPreStageInEnv: refCdPipeline.RunPreStageInEnv, - DeploymentAppType: refCdPipeline.DeploymentAppType, - ParentPipelineId: 0, - ParentPipelineType: refCdPipeline.ParentPipelineType, - } - cdPipelineReq := &bean.CdPipelines{ - Pipelines: []*bean.CDPipelineConfigObject{cdPipeline}, - AppId: req.appId, - UserId: req.userId, - } - cdPipelineRes, err := impl.pipelineBuilder.CreateCdPipelines(cdPipelineReq, ctx) - return cdPipelineRes, err - } + if refCdPipeline.ParentPipelineType == "WEBHOOK" { + cdPipeline := &bean.CDPipelineConfigObject{ + Id: 0, + EnvironmentId: refCdPipeline.EnvironmentId, + CiPipelineId: 0, + TriggerType: refCdPipeline.TriggerType, + Name: pipelineName, + Strategies: refCdPipeline.Strategies, + Namespace: refCdPipeline.Namespace, + AppWorkflowId: 0, + DeploymentTemplate: refCdPipeline.DeploymentTemplate, + PreStage: refCdPipeline.PreStage, //FIXME + PostStage: refCdPipeline.PostStage, + PreStageConfigMapSecretNames: refCdPipeline.PreStageConfigMapSecretNames, + PostStageConfigMapSecretNames: refCdPipeline.PostStageConfigMapSecretNames, + RunPostStageInEnv: refCdPipeline.RunPostStageInEnv, + RunPreStageInEnv: refCdPipeline.RunPreStageInEnv, + DeploymentAppType: refCdPipeline.DeploymentAppType, + ParentPipelineId: 0, + ParentPipelineType: refCdPipeline.ParentPipelineType, + } + cdPipelineReq := &bean.CdPipelines{ + Pipelines: []*bean.CDPipelineConfigObject{cdPipeline}, + AppId: req.appId, + UserId: req.userId, + } + cdPipelineRes, err := impl.pipelineBuilder.CreateCdPipelines(cdPipelineReq, ctx) + return cdPipelineRes, err } + cdPipeline := &bean.CDPipelineConfigObject{ Id: 0, EnvironmentId: refCdPipeline.EnvironmentId, @@ -953,6 +954,8 @@ func (impl *AppCloneServiceImpl) CreateCdPipeline(req *cloneCdPipelineRequest, c RunPostStageInEnv: refCdPipeline.RunPostStageInEnv, RunPreStageInEnv: refCdPipeline.RunPreStageInEnv, DeploymentAppType: deploymentAppType, + //ParentPipelineId: refCdPipeline.ParentPipelineId, + //ParentPipelineType: refCdPipeline.ParentPipelineType, } cdPipelineReq := &bean.CdPipelines{ Pipelines: []*bean.CDPipelineConfigObject{cdPipeline}, diff --git a/pkg/bean/app.go b/pkg/bean/app.go index 5e27766df9..86bd4285b7 100644 --- a/pkg/bean/app.go +++ b/pkg/bean/app.go @@ -512,7 +512,7 @@ type CDPipelineConfigObject struct { ChartBaseVersion string `json:"chartBaseVersion"` ContainerRegistryId int `json:"containerRegistryId"` RepoUrl string `json:"repoUrl"` - ManifestStorageType []string + ManifestStorageType string `json: "manifestStorageType"` } type PreStageConfigMapSecretNames struct { diff --git a/pkg/bulkAction/BulkUpdateService.go b/pkg/bulkAction/BulkUpdateService.go index 8f22cdc2f8..400dc33ad3 100644 --- a/pkg/bulkAction/BulkUpdateService.go +++ b/pkg/bulkAction/BulkUpdateService.go @@ -4,6 +4,7 @@ import ( "context" "encoding/base64" "encoding/json" + "errors" "fmt" pubsub "github.com/devtron-labs/common-lib/pubsub-lib" "github.com/devtron-labs/devtron/api/bean" @@ -1149,9 +1150,27 @@ func (impl BulkUpdateServiceImpl) BulkUnHibernate(request *BulkApplicationForEnv bulkOperationResponse.Response = response return bulkOperationResponse, nil } + func (impl BulkUpdateServiceImpl) BulkDeploy(request *BulkApplicationForEnvironmentPayload, emailId string, checkAuthBatch func(emailId string, appObject []string, envObject []string) (map[string]bool, map[string]bool)) (*BulkApplicationForEnvironmentResponse, error) { var pipelines []*pipelineConfig.Pipeline var err error + if len(request.AppNames) > 0 { + r, err := impl.appRepository.FindIdsByNames(request.AppNames) + if err != nil { + impl.logger.Errorw("error in fetching Ids", "err", err) + return nil, err + } + for _, id := range r { + request.AppIdIncludes = append(request.AppIdIncludes, id) + } + } + r, err := impl.environmentRepository.FindByName(request.EnvName) + if request.EnvId != r.Id && request.EnvId != 0 { + return nil, errors.New("select only one environment") + } else if request.EnvId == 0 { + request.EnvId = r.Id + } + if len(request.AppIdIncludes) > 0 { pipelines, err = impl.pipelineRepository.FindActiveByInFilter(request.EnvId, request.AppIdIncludes) } else if len(request.AppIdExcludes) > 0 { diff --git a/pkg/bulkAction/bean.go b/pkg/bulkAction/bean.go index 3b8fbb1945..bf92c94caf 100644 --- a/pkg/bulkAction/bean.go +++ b/pkg/bulkAction/bean.go @@ -82,11 +82,13 @@ type CmAndSecretBulkUpdateResponse struct { } type BulkApplicationForEnvironmentPayload struct { - AppIdIncludes []int `json:"appIdIncludes,omitempty"` - AppIdExcludes []int `json:"appIdExcludes,omitempty"` - EnvId int `json:"envId"` - UserId int32 `json:"-"` - InvalidateCache bool `json:"invalidateCache"` + AppIdIncludes []int `json:"appIdIncludes,omitempty"` + AppIdExcludes []int `json:"appIdExcludes,omitempty"` + EnvId int `json:"envId"` + EnvName string `json:"envNames, omitempty"` + AppNames []string `json:"appNames",omitempty` + UserId int32 `json:"-"` + InvalidateCache bool `json:"invalidateCache"` } type BulkApplicationForEnvironmentResponse struct { From 3828ef4d7b2cff95a8631cf186e40c3b28a61cff Mon Sep 17 00:00:00 2001 From: dhananjay0601 Date: Tue, 18 Jul 2023 11:53:13 +0530 Subject: [PATCH 2/5] indentation --- pkg/bulkAction/BulkUpdateService.go | 2 +- pkg/bulkAction/bean.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/bulkAction/BulkUpdateService.go b/pkg/bulkAction/BulkUpdateService.go index 400dc33ad3..c9ead6a658 100644 --- a/pkg/bulkAction/BulkUpdateService.go +++ b/pkg/bulkAction/BulkUpdateService.go @@ -1154,6 +1154,7 @@ func (impl BulkUpdateServiceImpl) BulkUnHibernate(request *BulkApplicationForEnv func (impl BulkUpdateServiceImpl) BulkDeploy(request *BulkApplicationForEnvironmentPayload, emailId string, checkAuthBatch func(emailId string, appObject []string, envObject []string) (map[string]bool, map[string]bool)) (*BulkApplicationForEnvironmentResponse, error) { var pipelines []*pipelineConfig.Pipeline var err error + if len(request.AppNames) > 0 { r, err := impl.appRepository.FindIdsByNames(request.AppNames) if err != nil { @@ -1170,7 +1171,6 @@ func (impl BulkUpdateServiceImpl) BulkDeploy(request *BulkApplicationForEnvironm } else if request.EnvId == 0 { request.EnvId = r.Id } - if len(request.AppIdIncludes) > 0 { pipelines, err = impl.pipelineRepository.FindActiveByInFilter(request.EnvId, request.AppIdIncludes) } else if len(request.AppIdExcludes) > 0 { diff --git a/pkg/bulkAction/bean.go b/pkg/bulkAction/bean.go index bf92c94caf..453ac9caf0 100644 --- a/pkg/bulkAction/bean.go +++ b/pkg/bulkAction/bean.go @@ -85,8 +85,8 @@ type BulkApplicationForEnvironmentPayload struct { AppIdIncludes []int `json:"appIdIncludes,omitempty"` AppIdExcludes []int `json:"appIdExcludes,omitempty"` EnvId int `json:"envId"` - EnvName string `json:"envNames, omitempty"` - AppNames []string `json:"appNames",omitempty` + EnvName string `json:"envNames,omitempty"` + AppNames []string `json:"appNames,omitempty"` UserId int32 `json:"-"` InvalidateCache bool `json:"invalidateCache"` } From e025d4cf8f0d586d6880dedc2628c29444ac996e Mon Sep 17 00:00:00 2001 From: dhananjay0601 Date: Tue, 18 Jul 2023 13:22:51 +0530 Subject: [PATCH 3/5] handling for environment name and id --- pkg/bulkAction/BulkUpdateService.go | 33 +++++++++++++++++++++++------ pkg/bulkAction/bean.go | 15 +++++++------ 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/pkg/bulkAction/BulkUpdateService.go b/pkg/bulkAction/BulkUpdateService.go index c9ead6a658..0dfc9ebf2f 100644 --- a/pkg/bulkAction/BulkUpdateService.go +++ b/pkg/bulkAction/BulkUpdateService.go @@ -1155,8 +1155,8 @@ func (impl BulkUpdateServiceImpl) BulkDeploy(request *BulkApplicationForEnvironm var pipelines []*pipelineConfig.Pipeline var err error - if len(request.AppNames) > 0 { - r, err := impl.appRepository.FindIdsByNames(request.AppNames) + if len(request.AppNamesIncludes) > 0 { + r, err := impl.appRepository.FindIdsByNames(request.AppNamesIncludes) if err != nil { impl.logger.Errorw("error in fetching Ids", "err", err) return nil, err @@ -1165,11 +1165,30 @@ func (impl BulkUpdateServiceImpl) BulkDeploy(request *BulkApplicationForEnvironm request.AppIdIncludes = append(request.AppIdIncludes, id) } } - r, err := impl.environmentRepository.FindByName(request.EnvName) - if request.EnvId != r.Id && request.EnvId != 0 { - return nil, errors.New("select only one environment") - } else if request.EnvId == 0 { - request.EnvId = r.Id + if len(request.AppNamesExcludes) > 0 { + r, err := impl.appRepository.FindIdsByNames(request.AppNamesExcludes) + if err != nil { + impl.logger.Errorw("error in fetching Ids", "err", err) + return nil, err + } + for _, id := range r { + request.AppIdExcludes = append(request.AppIdExcludes, id) + } + } + if len(request.EnvName) > 0 { + r, err := impl.environmentRepository.FindByName(request.EnvName) + if err != nil { + impl.logger.Errorw("error in fetching env details", "err", err) + return nil, err + } + if request.EnvId != 0 && request.EnvId != r.Id { + return nil, errors.New("environment id and environment name is different select only one environment") + } else if request.EnvId == 0 { + request.EnvId = r.Id + } + } + if len(request.EnvName) == 0 && request.EnvId == 0 { + return nil, errors.New("please mention environment id or environment name") } if len(request.AppIdIncludes) > 0 { pipelines, err = impl.pipelineRepository.FindActiveByInFilter(request.EnvId, request.AppIdIncludes) diff --git a/pkg/bulkAction/bean.go b/pkg/bulkAction/bean.go index 453ac9caf0..9d6aa262a8 100644 --- a/pkg/bulkAction/bean.go +++ b/pkg/bulkAction/bean.go @@ -82,13 +82,14 @@ type CmAndSecretBulkUpdateResponse struct { } type BulkApplicationForEnvironmentPayload struct { - AppIdIncludes []int `json:"appIdIncludes,omitempty"` - AppIdExcludes []int `json:"appIdExcludes,omitempty"` - EnvId int `json:"envId"` - EnvName string `json:"envNames,omitempty"` - AppNames []string `json:"appNames,omitempty"` - UserId int32 `json:"-"` - InvalidateCache bool `json:"invalidateCache"` + AppIdIncludes []int `json:"appIdIncludes,omitempty"` + AppIdExcludes []int `json:"appIdExcludes,omitempty"` + EnvId int `json:"envId,omitempty"` + EnvName string `json:"envName,omitempty"` + AppNamesIncludes []string `json:"appNamesIncludes,omitempty"` + AppNamesExcludes []string `json:"appNamesExcludes,omitempty"` + UserId int32 `json:"-"` + InvalidateCache bool `json:"invalidateCache"` } type BulkApplicationForEnvironmentResponse struct { From c80b13b2977624ea79499abeb95567a851d35d7b Mon Sep 17 00:00:00 2001 From: dhananjay0601 Date: Tue, 18 Jul 2023 13:27:12 +0530 Subject: [PATCH 4/5] commented code --- pkg/appClone/AppCloneService.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/pkg/appClone/AppCloneService.go b/pkg/appClone/AppCloneService.go index 3266bdf985..8858bb89d9 100644 --- a/pkg/appClone/AppCloneService.go +++ b/pkg/appClone/AppCloneService.go @@ -966,8 +966,6 @@ func (impl *AppCloneServiceImpl) CreateCdPipeline(req *cloneCdPipelineRequest, c RunPostStageInEnv: refCdPipeline.RunPostStageInEnv, RunPreStageInEnv: refCdPipeline.RunPreStageInEnv, DeploymentAppType: deploymentAppType, - //ParentPipelineId: refCdPipeline.ParentPipelineId, - //ParentPipelineType: refCdPipeline.ParentPipelineType, } cdPipelineReq := &bean.CdPipelines{ Pipelines: []*bean.CDPipelineConfigObject{cdPipeline}, From bb8100d93756903a824c536e68c85e9a8ec31b7f Mon Sep 17 00:00:00 2001 From: dhananjay0601 Date: Fri, 21 Jul 2023 15:40:33 +0530 Subject: [PATCH 5/5] WIP --- pkg/appClone/AppCloneService.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/appClone/AppCloneService.go b/pkg/appClone/AppCloneService.go index 8858bb89d9..43261039a5 100644 --- a/pkg/appClone/AppCloneService.go +++ b/pkg/appClone/AppCloneService.go @@ -918,7 +918,6 @@ func (impl *AppCloneServiceImpl) CreateCdPipeline(req *cloneCdPipelineRequest, c } else if AllowedDeploymentAppTypes[util.PIPELINE_DEPLOYMENT_TYPE_HELM] { deploymentAppType = util.PIPELINE_DEPLOYMENT_TYPE_HELM } - if refCdPipeline.ParentPipelineType == "WEBHOOK" { cdPipeline := &bean.CDPipelineConfigObject{ Id: 0,