@@ -19,6 +19,7 @@ package app
19
19
import (
20
20
"encoding/json"
21
21
"fmt"
22
+ "github.com/caarlos0/env"
22
23
client "github.com/devtron-labs/devtron/api/helm-app/service"
23
24
"github.com/devtron-labs/devtron/internal/util"
24
25
"github.com/devtron-labs/devtron/pkg/appStore/installedApp/service/EAMode"
@@ -46,6 +47,10 @@ const (
46
47
ZERO_ENVIRONMENT_ID = 0
47
48
)
48
49
50
+ type CrudOperationServiceConfig struct {
51
+ PropagateExtraLabels bool `env:"PROPAGATE_EXTRA_LABELS" envDefault:"false"`
52
+ }
53
+
49
54
type AppCrudOperationService interface {
50
55
Create (request * bean.AppLabelDto , tx * pg.Tx ) (* bean.AppLabelDto , error )
51
56
FindById (id int ) (* bean.AppLabelDto , error )
@@ -60,24 +65,36 @@ type AppCrudOperationService interface {
60
65
GetAppListByTeamIds (teamIds []int , appType string ) ([]* TeamAppBean , error )
61
66
}
62
67
68
+ func GetCrudOperationServiceConfig () (* CrudOperationServiceConfig , error ) {
69
+ cfg := & CrudOperationServiceConfig {}
70
+ err := env .Parse (cfg )
71
+ if err != nil {
72
+ fmt .Println ("failed to parse server CrudOperationServiceConfig,: " + err .Error ())
73
+ return nil , err
74
+ }
75
+ return cfg , nil
76
+ }
77
+
63
78
type AppCrudOperationServiceImpl struct {
64
- logger * zap.SugaredLogger
65
- appLabelRepository pipelineConfig.AppLabelRepository
66
- appRepository appRepository.AppRepository
67
- userRepository repository.UserRepository
68
- installedAppRepository repository2.InstalledAppRepository
69
- genericNoteService genericNotes.GenericNoteService
70
- gitMaterialRepository pipelineConfig.MaterialRepository
71
- installedAppDbService EAMode.InstalledAppDBService
79
+ logger * zap.SugaredLogger
80
+ appLabelRepository pipelineConfig.AppLabelRepository
81
+ appRepository appRepository.AppRepository
82
+ userRepository repository.UserRepository
83
+ installedAppRepository repository2.InstalledAppRepository
84
+ genericNoteService genericNotes.GenericNoteService
85
+ gitMaterialRepository pipelineConfig.MaterialRepository
86
+ installedAppDbService EAMode.InstalledAppDBService
87
+ crudOperationServiceConfig * CrudOperationServiceConfig
72
88
}
73
89
74
90
func NewAppCrudOperationServiceImpl (appLabelRepository pipelineConfig.AppLabelRepository ,
75
91
logger * zap.SugaredLogger , appRepository appRepository.AppRepository , userRepository repository.UserRepository ,
76
92
installedAppRepository repository2.InstalledAppRepository ,
77
93
genericNoteService genericNotes.GenericNoteService ,
78
94
gitMaterialRepository pipelineConfig.MaterialRepository ,
79
- installedAppDbService EAMode.InstalledAppDBService ) * AppCrudOperationServiceImpl {
80
- return & AppCrudOperationServiceImpl {
95
+ installedAppDbService EAMode.InstalledAppDBService ,
96
+ crudOperationServiceConfig * CrudOperationServiceConfig ) * AppCrudOperationServiceImpl {
97
+ impl := & AppCrudOperationServiceImpl {
81
98
appLabelRepository : appLabelRepository ,
82
99
logger : logger ,
83
100
appRepository : appRepository ,
@@ -87,6 +104,12 @@ func NewAppCrudOperationServiceImpl(appLabelRepository pipelineConfig.AppLabelRe
87
104
gitMaterialRepository : gitMaterialRepository ,
88
105
installedAppDbService : installedAppDbService ,
89
106
}
107
+ crudOperationServiceConfig , err := GetCrudOperationServiceConfig ()
108
+ if err != nil {
109
+ return nil
110
+ }
111
+ impl .crudOperationServiceConfig = crudOperationServiceConfig
112
+ return impl
90
113
}
91
114
92
115
type AppBean struct {
@@ -641,14 +664,18 @@ func (impl AppCrudOperationServiceImpl) GetAppLabelsForDeployment(appId int, app
641
664
impl .logger .Errorw ("error in getting app labels from db using appId" , "appId" , appId , "err" , err )
642
665
return nil , err
643
666
}
644
- extraAppLabelsToPropagate , err := impl .getExtraAppLabelsToPropagate (appId , appName , envName )
645
- if err != nil {
646
- impl .logger .Errorw ("error in getting extra app labels to propagate" , "appName" , appName , "envName" , envName , "err" , err )
647
- return nil , err
667
+ mergedAppLabels := appLabelsMapFromDb
668
+
669
+ if impl .crudOperationServiceConfig .PropagateExtraLabels {
670
+ extraAppLabelsToPropagate , err := impl .getExtraAppLabelsToPropagate (appId , appName , envName )
671
+ if err != nil {
672
+ impl .logger .Errorw ("error in getting extra app labels to propagate" , "appName" , appName , "envName" , envName , "err" , err )
673
+ return nil , err
674
+ }
675
+ //when app labels are provided by the user and share the same label key names as those in the extraAppLabelsToPropagate map,
676
+ //priority will be given to the user-provided label keys.
677
+ mergedAppLabels = MergeChildMapToParentMap (appLabelsMapFromDb , extraAppLabelsToPropagate )
648
678
}
649
- //when app labels are provided by the user and share the same label key names as those in the extraAppLabelsToPropagate map,
650
- //priority will be given to the user-provided label keys.
651
- mergedAppLabels := MergeChildMapToParentMap (appLabelsMapFromDb , extraAppLabelsToPropagate )
652
679
653
680
appLabelJson .Labels = mergedAppLabels
654
681
appLabelByte , err := json .Marshal (appLabelJson )
0 commit comments