-
Notifications
You must be signed in to change notification settings - Fork 465
/
EnforcerUtilHelm.go
142 lines (118 loc) · 5.6 KB
/
EnforcerUtilHelm.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
package rbac
import (
"fmt"
"github.com/devtron-labs/devtron/internal/sql/repository/app"
repository2 "github.com/devtron-labs/devtron/pkg/appStore/deployment/repository"
"github.com/devtron-labs/devtron/pkg/cluster/repository"
"github.com/devtron-labs/devtron/pkg/team"
"github.com/go-pg/pg"
"go.uber.org/zap"
)
type EnforcerUtilHelm interface {
GetHelmObjectByClusterId(clusterId int, namespace string, appName string) string
GetHelmObjectByTeamIdAndClusterId(teamId int, clusterId int, namespace string, appName string) string
GetHelmObjectByClusterIdNamespaceAndAppName(clusterId int, namespace string, appName string) (string, string)
GetAppRBACNameByInstalledAppId(installedAppId int) (string, string)
}
type EnforcerUtilHelmImpl struct {
logger *zap.SugaredLogger
clusterRepository repository.ClusterRepository
teamRepository team.TeamRepository
appRepository app.AppRepository
environmentRepository repository.EnvironmentRepository
InstalledAppRepository repository2.InstalledAppRepository
}
func NewEnforcerUtilHelmImpl(logger *zap.SugaredLogger,
clusterRepository repository.ClusterRepository,
teamRepository team.TeamRepository,
appRepository app.AppRepository,
environmentRepository repository.EnvironmentRepository,
installedAppRepository repository2.InstalledAppRepository,
) *EnforcerUtilHelmImpl {
return &EnforcerUtilHelmImpl{
logger: logger,
clusterRepository: clusterRepository,
teamRepository: teamRepository,
appRepository: appRepository,
environmentRepository: environmentRepository,
InstalledAppRepository: installedAppRepository,
}
}
func (impl EnforcerUtilHelmImpl) GetHelmObjectByClusterId(clusterId int, namespace string, appName string) string {
cluster, err := impl.clusterRepository.FindById(clusterId)
if err != nil {
return fmt.Sprintf("%s/%s/%s", "", "", "")
}
return fmt.Sprintf("%s/%s__%s/%s", team.UNASSIGNED_PROJECT, cluster.ClusterName, namespace, appName)
}
func (impl EnforcerUtilHelmImpl) GetHelmObjectByTeamIdAndClusterId(teamId int, clusterId int, namespace string, appName string) string {
cluster, err := impl.clusterRepository.FindById(clusterId)
teamObj, err := impl.teamRepository.FindOne(teamId)
if err != nil {
return fmt.Sprintf("%s/%s/%s", "", "", "")
}
return fmt.Sprintf("%s/%s__%s/%s", teamObj.Name, cluster.ClusterName, namespace, appName)
}
func (impl EnforcerUtilHelmImpl) GetHelmObjectByClusterIdNamespaceAndAppName(clusterId int, namespace string, appName string) (string, string) {
installedApp, installedAppErr := impl.InstalledAppRepository.GetInstalledApplicationByClusterIdAndNamespaceAndAppName(clusterId, namespace, appName)
if installedAppErr != nil && installedAppErr != pg.ErrNoRows {
impl.logger.Errorw("error on fetching data for rbac object from installed app repository", "err", installedAppErr)
return "", ""
}
cluster, err := impl.clusterRepository.FindById(clusterId)
if err != nil {
impl.logger.Errorw("error on fetching data for rbac object from cluster repository", "err", err)
return "", ""
}
if installedApp == nil || installedAppErr == pg.ErrNoRows {
// for cli apps which are not yet linked
app, err := impl.appRepository.FindAppAndProjectByAppName(appName)
if err != nil && err != pg.ErrNoRows {
impl.logger.Errorw("error in fetching app details", "err", err)
return "", ""
}
if app.TeamId == 0 {
// case if project is not assigned to cli app
return fmt.Sprintf("%s/%s__%s/%s", team.UNASSIGNED_PROJECT, cluster.ClusterName, namespace, appName), ""
} else {
// case if project is assigned
return fmt.Sprintf("%s/%s__%s/%s", app.Team.Name, cluster.ClusterName, namespace, appName), ""
}
}
if installedApp.App.TeamId == 0 {
// for EA apps which have no project assigned to them
return fmt.Sprintf("%s/%s__%s/%s", team.UNASSIGNED_PROJECT, cluster.ClusterName, namespace, appName),
fmt.Sprintf("%s/%s/%s", team.UNASSIGNED_PROJECT, installedApp.Environment.EnvironmentIdentifier, appName)
} else {
if installedApp.EnvironmentId == 0 {
// for apps in EA mode, initally env can be 0.
return fmt.Sprintf("%s/%s__%s/%s", installedApp.App.Team.Name, cluster.ClusterName, namespace, appName), ""
}
// for apps which are assigned to a project and have env ID
rbacOne := fmt.Sprintf("%s/%s/%s", installedApp.App.Team.Name, installedApp.Environment.EnvironmentIdentifier, appName)
rbacTwo := fmt.Sprintf("%s/%s__%s/%s", installedApp.App.Team.Name, cluster.ClusterName, namespace, appName)
if installedApp.Environment.IsVirtualEnvironment {
return rbacOne, ""
}
return rbacOne, rbacTwo
}
}
func (impl EnforcerUtilHelmImpl) GetAppRBACNameByInstalledAppId(installedAppVersionId int) (string, string) {
InstalledApp, err := impl.InstalledAppRepository.GetInstalledApp(installedAppVersionId)
if err != nil {
impl.logger.Errorw("error in fetching installed app version data", "err", err)
return fmt.Sprintf("%s/%s/%s", "", "", ""), fmt.Sprintf("%s/%s/%s", "", "", "")
}
rbacOne := fmt.Sprintf("%s/%s/%s", InstalledApp.App.Team.Name, InstalledApp.Environment.EnvironmentIdentifier, InstalledApp.App.AppName)
if InstalledApp.Environment.IsVirtualEnvironment {
return rbacOne, ""
}
var rbacTwo string
if !InstalledApp.Environment.IsVirtualEnvironment {
if InstalledApp.Environment.EnvironmentIdentifier != InstalledApp.Environment.Cluster.ClusterName+"__"+InstalledApp.Environment.Namespace {
rbacTwo = fmt.Sprintf("%s/%s/%s", InstalledApp.App.Team.Name, InstalledApp.Environment.Cluster.ClusterName+"__"+InstalledApp.Environment.Namespace, InstalledApp.App.AppName)
return rbacOne, rbacTwo
}
}
return rbacOne, ""
}