From 3aae80706a773ccaa18883e1534c8f2f5374b545 Mon Sep 17 00:00:00 2001 From: Prakash Kumar Date: Fri, 7 Jun 2024 16:17:48 +0530 Subject: [PATCH] env driven --- Wire.go | 1 + cmd/external-app/wire.go | 7 ++-- cmd/external-app/wire_gen.go | 6 ++- env_gen.md | 1 + pkg/app/AppCrudOperationService.go | 61 +++++++++++++++++++++--------- wire_gen.go | 6 ++- 6 files changed, 60 insertions(+), 22 deletions(-) diff --git a/Wire.go b/Wire.go index 867419b50c..a4d9c07562 100644 --- a/Wire.go +++ b/Wire.go @@ -750,6 +750,7 @@ func InitializeApp() (*App, error) { app.NewAppCrudOperationServiceImpl, wire.Bind(new(app.AppCrudOperationService), new(*app.AppCrudOperationServiceImpl)), + app.GetCrudOperationServiceConfig, pipelineConfig.NewAppLabelRepositoryImpl, wire.Bind(new(pipelineConfig.AppLabelRepository), new(*pipelineConfig.AppLabelRepositoryImpl)), diff --git a/cmd/external-app/wire.go b/cmd/external-app/wire.go index ad788461bd..15a9287f4d 100644 --- a/cmd/external-app/wire.go +++ b/cmd/external-app/wire.go @@ -1,3 +1,6 @@ +//go:build wireinject +// +build wireinject + /* * Copyright (c) 2024. Devtron Inc. * @@ -14,9 +17,6 @@ * limitations under the License. */ -//go:build wireinject -// +build wireinject - package main import ( @@ -147,6 +147,7 @@ func InitializeApp() (*App, error) { wire.Bind(new(app.AppCrudOperationService), new(*app.AppCrudOperationServiceImpl)), pipelineConfig.NewAppLabelRepositoryImpl, wire.Bind(new(pipelineConfig.AppLabelRepository), new(*pipelineConfig.AppLabelRepositoryImpl)), + app.GetCrudOperationServiceConfig, // acd session client bind with authenticator login wire.Bind(new(session.ServiceClient), new(*middleware.LoginService)), connector.NewPumpImpl, diff --git a/cmd/external-app/wire_gen.go b/cmd/external-app/wire_gen.go index d4e7974bb9..86c19f1a2c 100644 --- a/cmd/external-app/wire_gen.go +++ b/cmd/external-app/wire_gen.go @@ -392,7 +392,11 @@ func InitializeApp() (*App, error) { attributesRouterImpl := router.NewAttributesRouterImpl(attributesRestHandlerImpl) appLabelRepositoryImpl := pipelineConfig.NewAppLabelRepositoryImpl(db) materialRepositoryImpl := pipelineConfig.NewMaterialRepositoryImpl(db) - appCrudOperationServiceImpl := app2.NewAppCrudOperationServiceImpl(appLabelRepositoryImpl, sugaredLogger, appRepositoryImpl, userRepositoryImpl, installedAppRepositoryImpl, genericNoteServiceImpl, materialRepositoryImpl, installedAppDBServiceImpl) + crudOperationServiceConfig, err := app2.GetCrudOperationServiceConfig() + if err != nil { + return nil, err + } + appCrudOperationServiceImpl := app2.NewAppCrudOperationServiceImpl(appLabelRepositoryImpl, sugaredLogger, appRepositoryImpl, userRepositoryImpl, installedAppRepositoryImpl, genericNoteServiceImpl, materialRepositoryImpl, installedAppDBServiceImpl, crudOperationServiceConfig) appInfoRestHandlerImpl := appInfo.NewAppInfoRestHandlerImpl(sugaredLogger, appCrudOperationServiceImpl, userServiceImpl, validate, enforcerUtilImpl, enforcerImpl, helmAppServiceImpl, enforcerUtilHelmImpl, genericNoteServiceImpl) appInfoRouterImpl := appInfo2.NewAppInfoRouterImpl(sugaredLogger, appInfoRestHandlerImpl) appFilteringRestHandlerImpl := appList.NewAppFilteringRestHandlerImpl(sugaredLogger, teamServiceImpl, enforcerImpl, userServiceImpl, clusterServiceImpl, environmentServiceImpl) diff --git a/env_gen.md b/env_gen.md index 43e17cf998..67cb63d365 100644 --- a/env_gen.md +++ b/env_gen.md @@ -195,6 +195,7 @@ | PIPELINE_DEGRADED_TIME | 10 | | | PLUGIN_NAME | Pull images from container repository | | | PRE_CI_CACHE_PATH | /devtroncd-cache | | + | PROPAGATE_EXTRA_LABELS | false | | | PROXY_SERVICE_CONFIG | {} | | | REQ_CI_CPU | 0.5 | | | REQ_CI_MEM | 3G | | diff --git a/pkg/app/AppCrudOperationService.go b/pkg/app/AppCrudOperationService.go index 4cbd6dde22..89eccffaba 100644 --- a/pkg/app/AppCrudOperationService.go +++ b/pkg/app/AppCrudOperationService.go @@ -19,6 +19,7 @@ package app import ( "encoding/json" "fmt" + "github.com/caarlos0/env" client "github.com/devtron-labs/devtron/api/helm-app/service" "github.com/devtron-labs/devtron/internal/util" "github.com/devtron-labs/devtron/pkg/appStore/installedApp/service/EAMode" @@ -46,6 +47,10 @@ const ( ZERO_ENVIRONMENT_ID = 0 ) +type CrudOperationServiceConfig struct { + PropagateExtraLabels bool `env:"PROPAGATE_EXTRA_LABELS" envDefault:"false"` +} + type AppCrudOperationService interface { Create(request *bean.AppLabelDto, tx *pg.Tx) (*bean.AppLabelDto, error) FindById(id int) (*bean.AppLabelDto, error) @@ -60,15 +65,26 @@ type AppCrudOperationService interface { GetAppListByTeamIds(teamIds []int, appType string) ([]*TeamAppBean, error) } +func GetCrudOperationServiceConfig() (*CrudOperationServiceConfig, error) { + cfg := &CrudOperationServiceConfig{} + err := env.Parse(cfg) + if err != nil { + fmt.Println("failed to parse server CrudOperationServiceConfig,: " + err.Error()) + return nil, err + } + return cfg, nil +} + type AppCrudOperationServiceImpl struct { - logger *zap.SugaredLogger - appLabelRepository pipelineConfig.AppLabelRepository - appRepository appRepository.AppRepository - userRepository repository.UserRepository - installedAppRepository repository2.InstalledAppRepository - genericNoteService genericNotes.GenericNoteService - gitMaterialRepository pipelineConfig.MaterialRepository - installedAppDbService EAMode.InstalledAppDBService + logger *zap.SugaredLogger + appLabelRepository pipelineConfig.AppLabelRepository + appRepository appRepository.AppRepository + userRepository repository.UserRepository + installedAppRepository repository2.InstalledAppRepository + genericNoteService genericNotes.GenericNoteService + gitMaterialRepository pipelineConfig.MaterialRepository + installedAppDbService EAMode.InstalledAppDBService + crudOperationServiceConfig *CrudOperationServiceConfig } func NewAppCrudOperationServiceImpl(appLabelRepository pipelineConfig.AppLabelRepository, @@ -76,8 +92,9 @@ func NewAppCrudOperationServiceImpl(appLabelRepository pipelineConfig.AppLabelRe installedAppRepository repository2.InstalledAppRepository, genericNoteService genericNotes.GenericNoteService, gitMaterialRepository pipelineConfig.MaterialRepository, - installedAppDbService EAMode.InstalledAppDBService) *AppCrudOperationServiceImpl { - return &AppCrudOperationServiceImpl{ + installedAppDbService EAMode.InstalledAppDBService, + crudOperationServiceConfig *CrudOperationServiceConfig) *AppCrudOperationServiceImpl { + impl := &AppCrudOperationServiceImpl{ appLabelRepository: appLabelRepository, logger: logger, appRepository: appRepository, @@ -87,6 +104,12 @@ func NewAppCrudOperationServiceImpl(appLabelRepository pipelineConfig.AppLabelRe gitMaterialRepository: gitMaterialRepository, installedAppDbService: installedAppDbService, } + crudOperationServiceConfig, err := GetCrudOperationServiceConfig() + if err != nil { + return nil + } + impl.crudOperationServiceConfig = crudOperationServiceConfig + return impl } type AppBean struct { @@ -641,14 +664,18 @@ func (impl AppCrudOperationServiceImpl) GetAppLabelsForDeployment(appId int, app impl.logger.Errorw("error in getting app labels from db using appId", "appId", appId, "err", err) return nil, err } - extraAppLabelsToPropagate, err := impl.getExtraAppLabelsToPropagate(appId, appName, envName) - if err != nil { - impl.logger.Errorw("error in getting extra app labels to propagate", "appName", appName, "envName", envName, "err", err) - return nil, err + mergedAppLabels := appLabelsMapFromDb + + if impl.crudOperationServiceConfig.PropagateExtraLabels { + extraAppLabelsToPropagate, err := impl.getExtraAppLabelsToPropagate(appId, appName, envName) + if err != nil { + impl.logger.Errorw("error in getting extra app labels to propagate", "appName", appName, "envName", envName, "err", err) + return nil, err + } + //when app labels are provided by the user and share the same label key names as those in the extraAppLabelsToPropagate map, + //priority will be given to the user-provided label keys. + mergedAppLabels = MergeChildMapToParentMap(appLabelsMapFromDb, extraAppLabelsToPropagate) } - //when app labels are provided by the user and share the same label key names as those in the extraAppLabelsToPropagate map, - //priority will be given to the user-provided label keys. - mergedAppLabels := MergeChildMapToParentMap(appLabelsMapFromDb, extraAppLabelsToPropagate) appLabelJson.Labels = mergedAppLabels appLabelByte, err := json.Marshal(appLabelJson) diff --git a/wire_gen.go b/wire_gen.go index 4c8d0c1f98..cbb0c1a124 100644 --- a/wire_gen.go +++ b/wire_gen.go @@ -500,7 +500,11 @@ func InitializeApp() (*App, error) { appLabelRepositoryImpl := pipelineConfig.NewAppLabelRepositoryImpl(db) materialRepositoryImpl := pipelineConfig.NewMaterialRepositoryImpl(db) installedAppDBServiceImpl := EAMode.NewInstalledAppDBServiceImpl(sugaredLogger, installedAppRepositoryImpl, appRepositoryImpl, userServiceImpl, environmentServiceImpl, installedAppVersionHistoryRepositoryImpl) - appCrudOperationServiceImpl := app2.NewAppCrudOperationServiceImpl(appLabelRepositoryImpl, sugaredLogger, appRepositoryImpl, userRepositoryImpl, installedAppRepositoryImpl, genericNoteServiceImpl, materialRepositoryImpl, installedAppDBServiceImpl) + crudOperationServiceConfig, err := app2.GetCrudOperationServiceConfig() + if err != nil { + return nil, err + } + appCrudOperationServiceImpl := app2.NewAppCrudOperationServiceImpl(appLabelRepositoryImpl, sugaredLogger, appRepositoryImpl, userRepositoryImpl, installedAppRepositoryImpl, genericNoteServiceImpl, materialRepositoryImpl, installedAppDBServiceImpl, crudOperationServiceConfig) imageTagRepositoryImpl := repository2.NewImageTagRepository(db, sugaredLogger) customTagServiceImpl := pipeline.NewCustomTagService(sugaredLogger, imageTagRepositoryImpl) pluginInputVariableParserImpl := pipeline.NewPluginInputVariableParserImpl(sugaredLogger, dockerRegistryConfigImpl, customTagServiceImpl)