Skip to content

Commit 34335bd

Browse files
fix: ArgoCD Connection Manager connection handling (#2702)
* setting reload while create new acd token * acd setting manager policies load only when acd installed * acd cd setting manager modification * fixes * review changes and code refactor * removed panic from acd connection fetch * wire
1 parent 1999b8a commit 34335bd

File tree

13 files changed

+189
-195
lines changed

13 files changed

+189
-195
lines changed

App.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import (
3131
authMiddleware "github.com/devtron-labs/authenticator/middleware"
3232
"github.com/devtron-labs/devtron/api/router"
3333
"github.com/devtron-labs/devtron/api/sse"
34-
"github.com/devtron-labs/devtron/client/argocdServer"
3534
"github.com/devtron-labs/devtron/client/pubsub"
3635
"github.com/devtron-labs/devtron/internal/middleware"
3736
"github.com/devtron-labs/devtron/pkg/user"
@@ -57,7 +56,6 @@ type App struct {
5756
func NewApp(router *router.MuxRouter,
5857
Logger *zap.SugaredLogger,
5958
sse *sse.SSE,
60-
versionService argocdServer.VersionService,
6159
enforcer *casbin.SyncedEnforcer,
6260
db *pg.DB,
6361
pubsubClient *pubsub.PubSubClient,

Wire.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,6 @@ import (
106106
"github.com/devtron-labs/devtron/util/argo"
107107
"github.com/devtron-labs/devtron/util/k8s"
108108
"github.com/devtron-labs/devtron/util/rbac"
109-
"github.com/devtron-labs/devtron/util/session"
110109
"github.com/google/wire"
111110
)
112111

@@ -150,8 +149,7 @@ func InitializeApp() (*App, error) {
150149
wire.Value(appStoreBean.RefChartProxyDir("scripts/devtron-reference-helm-charts")),
151150
wire.Value(chart.DefaultChart("reference-app-rolling")),
152151
wire.Value(util.ChartWorkingDir("/tmp/charts/")),
153-
session.SettingsManager,
154-
session.CDSettingsManager,
152+
argocdServer.SettingsManager,
155153
//auth.GetConfig,
156154

157155
argocdServer.GetConfig,
@@ -741,6 +739,8 @@ func InitializeApp() (*App, error) {
741739
wire.Bind(new(pipeline.PipelineStageService), new(*pipeline.PipelineStageServiceImpl)),
742740
//plugin ends
743741

742+
argocdServer.NewArgoCDConnectionManagerImpl,
743+
wire.Bind(new(argocdServer.ArgoCDConnectionManager), new(*argocdServer.ArgoCDConnectionManagerImpl)),
744744
argo.NewArgoUserServiceImpl,
745745
wire.Bind(new(argo.ArgoUserService), new(*argo.ArgoUserServiceImpl)),
746746
util2.GetDevtronSecretName,

client/argocdServer/Connection.go

Lines changed: 86 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,37 +18,113 @@
1818
package argocdServer
1919

2020
import (
21+
"context"
2122
"fmt"
22-
"log"
23-
2423
"github.com/argoproj/argo-cd/v2/util/settings"
24+
moduleRepo "github.com/devtron-labs/devtron/pkg/module/repo"
25+
"github.com/go-pg/pg"
2526
grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
27+
"go.uber.org/zap"
2628
"google.golang.org/grpc"
29+
"k8s.io/client-go/kubernetes"
30+
"k8s.io/client-go/tools/clientcmd"
2731
)
2832

2933
func init() {
30-
3134
grpc_prometheus.EnableClientHandlingTimeHistogram()
3235
}
3336

34-
func GetConnection(token string, settings *settings.ArgoCDSettings) *grpc.ClientConn {
37+
type ArgoCDConnectionManager interface {
38+
GetConnection(token string) *grpc.ClientConn
39+
}
40+
type ArgoCDConnectionManagerImpl struct {
41+
logger *zap.SugaredLogger
42+
settingsManager *settings.SettingsManager
43+
moduleRepository moduleRepo.ModuleRepository
44+
argoCDSettings *settings.ArgoCDSettings
45+
}
46+
47+
func NewArgoCDConnectionManagerImpl(Logger *zap.SugaredLogger, settingsManager *settings.SettingsManager,
48+
moduleRepository moduleRepo.ModuleRepository) (*ArgoCDConnectionManagerImpl, error) {
49+
argoUserServiceImpl := &ArgoCDConnectionManagerImpl{
50+
logger: Logger,
51+
settingsManager: settingsManager,
52+
moduleRepository: moduleRepository,
53+
argoCDSettings: nil,
54+
}
55+
return argoUserServiceImpl, nil
56+
}
57+
58+
const (
59+
ModuleNameArgoCd string = "argo-cd"
60+
ModuleStatusInstalled string = "installed"
61+
)
62+
63+
// GetConnection - this function will call only for acd connection
64+
func (impl *ArgoCDConnectionManagerImpl) GetConnection(token string) *grpc.ClientConn {
3565
conf, err := GetConfig()
3666
if err != nil {
37-
log.Fatal(err)
67+
impl.logger.Errorw("error on get acd config while creating connection", "err", err)
68+
return nil
3869
}
70+
settings := impl.getArgoCdSettings()
3971
var option []grpc.DialOption
4072
option = append(option, grpc.WithTransportCredentials(GetTLS(settings.Certificate)))
4173
if len(token) > 0 {
4274
option = append(option, grpc.WithPerRPCCredentials(TokenAuth{token: token}))
4375
}
4476
option = append(option, grpc.WithUnaryInterceptor(grpc_prometheus.UnaryClientInterceptor), grpc.WithStreamInterceptor(grpc_prometheus.StreamClientInterceptor))
45-
46-
//if conf.Environment=="DEV"{
47-
// option=append(option,grpc.WithInsecure())
48-
//}
4977
conn, err := grpc.Dial(fmt.Sprintf("%s:%s", conf.Host, conf.Port), option...)
5078
if err != nil {
51-
log.Fatal(err)
79+
return nil
5280
}
5381
return conn
5482
}
83+
84+
func SettingsManager(cfg *Config) (*settings.SettingsManager, error) {
85+
clientSet, kubeConfig := getK8sClient()
86+
namespace, _, err := kubeConfig.Namespace()
87+
if err != nil {
88+
return nil, err
89+
}
90+
//TODO: remove this hardcoding
91+
if len(cfg.Namespace) >= 0 {
92+
namespace = cfg.Namespace
93+
}
94+
return settings.NewSettingsManager(context.Background(), clientSet, namespace), nil
95+
}
96+
97+
func getK8sClient() (k8sClient *kubernetes.Clientset, k8sConfig clientcmd.ClientConfig) {
98+
kubeConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
99+
clientcmd.NewDefaultClientConfigLoadingRules(),
100+
&clientcmd.ConfigOverrides{},
101+
)
102+
config, err := kubeConfig.ClientConfig()
103+
if err != nil {
104+
panic(err)
105+
}
106+
clientSet := kubernetes.NewForConfigOrDie(config)
107+
return clientSet, kubeConfig
108+
}
109+
110+
func (impl *ArgoCDConnectionManagerImpl) getArgoCdSettings() *settings.ArgoCDSettings {
111+
settings := impl.argoCDSettings
112+
if settings == nil {
113+
module, err := impl.moduleRepository.FindOne(ModuleNameArgoCd)
114+
if err != nil && err != pg.ErrNoRows {
115+
impl.logger.Errorw("error on get acd connection", "err", err)
116+
return nil
117+
}
118+
if module == nil || module.Status != ModuleStatusInstalled {
119+
impl.logger.Errorw("error on get acd connection", "err", err)
120+
return nil
121+
}
122+
settings, err = impl.settingsManager.GetSettings()
123+
if err != nil {
124+
impl.logger.Errorw("error on get acd connection", "err", err)
125+
return nil
126+
}
127+
impl.argoCDSettings = settings
128+
}
129+
return impl.argoCDSettings
130+
}

client/argocdServer/Version.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ package argocdServer
2020
import (
2121
"context"
2222
"github.com/argoproj/argo-cd/v2/pkg/apiclient/version"
23-
"github.com/argoproj/argo-cd/v2/util/settings"
2423
"github.com/golang/protobuf/ptypes/empty"
2524
"go.uber.org/zap"
2625
)
@@ -31,16 +30,16 @@ type VersionService interface {
3130
}
3231

3332
type VersionServiceImpl struct {
34-
settings *settings.ArgoCDSettings
35-
logger *zap.SugaredLogger
33+
logger *zap.SugaredLogger
34+
argoCDConnectionManager ArgoCDConnectionManager
3635
}
3736

38-
func NewVersionServiceImpl(settings *settings.ArgoCDSettings, logger *zap.SugaredLogger) *VersionServiceImpl {
39-
return &VersionServiceImpl{settings: settings, logger: logger}
37+
func NewVersionServiceImpl(logger *zap.SugaredLogger, argoCDConnectionManager ArgoCDConnectionManager) *VersionServiceImpl {
38+
return &VersionServiceImpl{logger: logger, argoCDConnectionManager: argoCDConnectionManager}
4039
}
4140

4241
func (service VersionServiceImpl) CheckVersion() (err error) {
43-
conn := GetConnection("", service.settings)
42+
conn := service.argoCDConnectionManager.GetConnection("")
4443
version, err := version.NewVersionServiceClient(conn).Version(context.Background(), &empty.Empty{})
4544
if err != nil {
4645
return err
@@ -49,8 +48,9 @@ func (service VersionServiceImpl) CheckVersion() (err error) {
4948
return nil
5049
}
5150

51+
// GetVersion deprecated
5252
func (service VersionServiceImpl) GetVersion() (apiVersion string, err error) {
53-
conn := GetConnection("", service.settings)
53+
conn := service.argoCDConnectionManager.GetConnection("")
5454
version, err := version.NewVersionServiceClient(conn).Version(context.Background(), &empty.Empty{})
5555
if err != nil {
5656
return "", err

0 commit comments

Comments
 (0)