Skip to content
Merged
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
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
2 changes: 0 additions & 2 deletions App.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ import (
authMiddleware "github.com/devtron-labs/authenticator/middleware"
"github.com/devtron-labs/devtron/api/router"
"github.com/devtron-labs/devtron/api/sse"
"github.com/devtron-labs/devtron/client/argocdServer"
"github.com/devtron-labs/devtron/client/pubsub"
"github.com/devtron-labs/devtron/internal/middleware"
"github.com/devtron-labs/devtron/pkg/user"
Expand All @@ -57,7 +56,6 @@ type App struct {
func NewApp(router *router.MuxRouter,
Logger *zap.SugaredLogger,
sse *sse.SSE,
versionService argocdServer.VersionService,
enforcer *casbin.SyncedEnforcer,
db *pg.DB,
pubsubClient *pubsub.PubSubClient,
Expand Down
6 changes: 3 additions & 3 deletions Wire.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,6 @@ import (
"github.com/devtron-labs/devtron/util/argo"
"github.com/devtron-labs/devtron/util/k8s"
"github.com/devtron-labs/devtron/util/rbac"
"github.com/devtron-labs/devtron/util/session"
"github.com/google/wire"
)

Expand Down Expand Up @@ -150,8 +149,7 @@ func InitializeApp() (*App, error) {
wire.Value(appStoreBean.RefChartProxyDir("scripts/devtron-reference-helm-charts")),
wire.Value(chart.DefaultChart("reference-app-rolling")),
wire.Value(util.ChartWorkingDir("/tmp/charts/")),
session.SettingsManager,
session.CDSettingsManager,
argocdServer.SettingsManager,
//auth.GetConfig,

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

argocdServer.NewArgoCDConnectionManagerImpl,
wire.Bind(new(argocdServer.ArgoCDConnectionManager), new(*argocdServer.ArgoCDConnectionManagerImpl)),
argo.NewArgoUserServiceImpl,
wire.Bind(new(argo.ArgoUserService), new(*argo.ArgoUserServiceImpl)),
util2.GetDevtronSecretName,
Expand Down
96 changes: 86 additions & 10 deletions client/argocdServer/Connection.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,37 +18,113 @@
package argocdServer

import (
"context"
"fmt"
"log"

"github.com/argoproj/argo-cd/v2/util/settings"
moduleRepo "github.com/devtron-labs/devtron/pkg/module/repo"
"github.com/go-pg/pg"
grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
"go.uber.org/zap"
"google.golang.org/grpc"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd"
)

func init() {

grpc_prometheus.EnableClientHandlingTimeHistogram()
}

func GetConnection(token string, settings *settings.ArgoCDSettings) *grpc.ClientConn {
type ArgoCDConnectionManager interface {
GetConnection(token string) *grpc.ClientConn
}
type ArgoCDConnectionManagerImpl struct {
logger *zap.SugaredLogger
settingsManager *settings.SettingsManager
moduleRepository moduleRepo.ModuleRepository
argoCDSettings *settings.ArgoCDSettings
}

func NewArgoCDConnectionManagerImpl(Logger *zap.SugaredLogger, settingsManager *settings.SettingsManager,
moduleRepository moduleRepo.ModuleRepository) (*ArgoCDConnectionManagerImpl, error) {
argoUserServiceImpl := &ArgoCDConnectionManagerImpl{
logger: Logger,
settingsManager: settingsManager,
moduleRepository: moduleRepository,
argoCDSettings: nil,
}
return argoUserServiceImpl, nil
}

const (
ModuleNameArgoCd string = "argo-cd"
ModuleStatusInstalled string = "installed"
)

// GetConnection - this function will call only for acd connection
func (impl *ArgoCDConnectionManagerImpl) GetConnection(token string) *grpc.ClientConn {
conf, err := GetConfig()
if err != nil {
log.Fatal(err)
impl.logger.Errorw("error on get acd config while creating connection", "err", err)
return nil
}
settings := impl.getArgoCdSettings()
var option []grpc.DialOption
option = append(option, grpc.WithTransportCredentials(GetTLS(settings.Certificate)))
if len(token) > 0 {
option = append(option, grpc.WithPerRPCCredentials(TokenAuth{token: token}))
}
option = append(option, grpc.WithUnaryInterceptor(grpc_prometheus.UnaryClientInterceptor), grpc.WithStreamInterceptor(grpc_prometheus.StreamClientInterceptor))

//if conf.Environment=="DEV"{
// option=append(option,grpc.WithInsecure())
//}
conn, err := grpc.Dial(fmt.Sprintf("%s:%s", conf.Host, conf.Port), option...)
if err != nil {
log.Fatal(err)
return nil
}
return conn
}

func SettingsManager(cfg *Config) (*settings.SettingsManager, error) {
clientSet, kubeConfig := getK8sClient()
namespace, _, err := kubeConfig.Namespace()
if err != nil {
return nil, err
}
//TODO: remove this hardcoding
if len(cfg.Namespace) >= 0 {
namespace = cfg.Namespace
}
return settings.NewSettingsManager(context.Background(), clientSet, namespace), nil
}

func getK8sClient() (k8sClient *kubernetes.Clientset, k8sConfig clientcmd.ClientConfig) {
kubeConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
clientcmd.NewDefaultClientConfigLoadingRules(),
&clientcmd.ConfigOverrides{},
)
config, err := kubeConfig.ClientConfig()
if err != nil {
panic(err)
}
clientSet := kubernetes.NewForConfigOrDie(config)
return clientSet, kubeConfig
}

func (impl *ArgoCDConnectionManagerImpl) getArgoCdSettings() *settings.ArgoCDSettings {
settings := impl.argoCDSettings
if settings == nil {
module, err := impl.moduleRepository.FindOne(ModuleNameArgoCd)
if err != nil && err != pg.ErrNoRows {
impl.logger.Errorw("error on get acd connection", "err", err)
return nil
}
if module == nil || module.Status != ModuleStatusInstalled {
impl.logger.Errorw("error on get acd connection", "err", err)
return nil
}
settings, err = impl.settingsManager.GetSettings()
if err != nil {
impl.logger.Errorw("error on get acd connection", "err", err)
return nil
}
impl.argoCDSettings = settings
}
return impl.argoCDSettings
}
14 changes: 7 additions & 7 deletions client/argocdServer/Version.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ package argocdServer
import (
"context"
"github.com/argoproj/argo-cd/v2/pkg/apiclient/version"
"github.com/argoproj/argo-cd/v2/util/settings"
"github.com/golang/protobuf/ptypes/empty"
"go.uber.org/zap"
)
Expand All @@ -31,16 +30,16 @@ type VersionService interface {
}

type VersionServiceImpl struct {
settings *settings.ArgoCDSettings
logger *zap.SugaredLogger
logger *zap.SugaredLogger
argoCDConnectionManager ArgoCDConnectionManager
}

func NewVersionServiceImpl(settings *settings.ArgoCDSettings, logger *zap.SugaredLogger) *VersionServiceImpl {
return &VersionServiceImpl{settings: settings, logger: logger}
func NewVersionServiceImpl(logger *zap.SugaredLogger, argoCDConnectionManager ArgoCDConnectionManager) *VersionServiceImpl {
return &VersionServiceImpl{logger: logger, argoCDConnectionManager: argoCDConnectionManager}
}

func (service VersionServiceImpl) CheckVersion() (err error) {
conn := GetConnection("", service.settings)
conn := service.argoCDConnectionManager.GetConnection("")
version, err := version.NewVersionServiceClient(conn).Version(context.Background(), &empty.Empty{})
if err != nil {
return err
Expand All @@ -49,8 +48,9 @@ func (service VersionServiceImpl) CheckVersion() (err error) {
return nil
}

// GetVersion deprecated
func (service VersionServiceImpl) GetVersion() (apiVersion string, err error) {
conn := GetConnection("", service.settings)
conn := service.argoCDConnectionManager.GetConnection("")
version, err := version.NewVersionServiceClient(conn).Version(context.Background(), &empty.Empty{})
if err != nil {
return "", err
Expand Down
Loading