Skip to content

fix: extra labels propagation made env driven #5274

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Wire.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)),

Expand Down
7 changes: 4 additions & 3 deletions cmd/external-app/wire.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
//go:build wireinject
// +build wireinject

/*
* Copyright (c) 2024. Devtron Inc.
*
Expand All @@ -14,9 +17,6 @@
* limitations under the License.
*/

//go:build wireinject
// +build wireinject

package main

import (
Expand Down Expand Up @@ -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,
Expand Down
6 changes: 5 additions & 1 deletion cmd/external-app/wire_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions env_gen.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 | |
Expand Down
61 changes: 44 additions & 17 deletions pkg/app/AppCrudOperationService.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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)
Expand All @@ -60,24 +65,36 @@ 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,
logger *zap.SugaredLogger, appRepository appRepository.AppRepository, userRepository repository.UserRepository,
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,
Expand All @@ -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 {
Expand Down Expand Up @@ -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)
Expand Down
6 changes: 5 additions & 1 deletion wire_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading