Skip to content

Commit d3249c0

Browse files
authored
Merge pull request #20 from dudinea/FEAT-multisource
Feat multisource
2 parents ba77803 + d950ee2 commit d3249c0

File tree

30 files changed

+3560
-780
lines changed

30 files changed

+3560
-780
lines changed

.mockery.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ packages:
1212
AppProjectInterface: {}
1313
ArgoprojV1alpha1Interface: {}
1414
ApplicationInterface: {}
15+
github.com/argoproj/argo-cd/v3/pkg/client/listers/application/v1alpha1:
16+
interfaces:
17+
ApplicationLister: {}
1518
github.com/argoproj/argo-cd/v3/pkg/client/clientset/versioned:
1619
interfaces:
1720
Interface: {}

cmd/argocd-repo-server/commands/argocd_repo_server.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@ func NewCommand() *cobra.Command {
243243
}
244244
command.Flags().StringVar(&cmdutil.LogFormat, "logformat", env.StringFromEnv("ARGOCD_REPO_SERVER_LOGFORMAT", "json"), "Set the logging format. One of: json|text")
245245
command.Flags().StringVar(&cmdutil.LogLevel, "loglevel", env.StringFromEnv("ARGOCD_REPO_SERVER_LOGLEVEL", "info"), "Set the logging level. One of: debug|info|warn|error")
246+
command.AddCommand(cli.NewVersionCmd(cliName))
246247
command.Flags().Int64Var(&parallelismLimit, "parallelismlimit", int64(env.ParseNumFromEnv("ARGOCD_REPO_SERVER_PARALLELISM_LIMIT", 0, 0, math.MaxInt32)), "Limit on number of concurrent manifests generate requests. Any value less the 1 means no limit.")
247248
command.Flags().StringVar(&listenHost, "address", env.StringFromEnv("ARGOCD_MONOREPO_REPO_SERVER_LISTEN_ADDRESS", common.DefaultAddressMonorepoRepoServer), "Listen on given address for incoming connections")
248249
command.Flags().IntVar(&listenPort, "port", common.DefaultPortMonorepoRepoServer, "Listen on given port for incoming connections")

cmd/monorepo_controller/commands/monorepo_controller.go

Lines changed: 49 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"time"
88

99
mrp "github.com/argoproj/argo-cd/v3/mrp_controller"
10-
cacheutil "github.com/argoproj/argo-cd/v3/util/cache"
1110

1211
"github.com/argoproj/pkg/stats"
1312
"github.com/redis/go-redis/v9"
@@ -16,62 +15,57 @@ import (
1615
"k8s.io/client-go/kubernetes"
1716
"k8s.io/client-go/tools/clientcmd"
1817

19-
repoapiclient "github.com/argoproj/argo-cd/v3/reposerver/apiclient"
20-
2118
cmdutil "github.com/argoproj/argo-cd/v3/cmd/util"
2219
"github.com/argoproj/argo-cd/v3/common"
2320
"github.com/argoproj/argo-cd/v3/pkg/apis/application/v1alpha1"
2421
appclientset "github.com/argoproj/argo-cd/v3/pkg/client/clientset/versioned"
25-
servercache "github.com/argoproj/argo-cd/v3/server/cache"
22+
repoapiclient "github.com/argoproj/argo-cd/v3/reposerver/apiclient"
2623
"github.com/argoproj/argo-cd/v3/util/cli"
2724
"github.com/argoproj/argo-cd/v3/util/env"
2825
"github.com/argoproj/argo-cd/v3/util/errors"
2926
"github.com/argoproj/argo-cd/v3/util/kube"
3027
)
3128

32-
const (
33-
failureRetryCountEnv = "EVENT_REPORTER_K8S_RETRY_COUNT"
34-
failureRetryPeriodMilliSecondsEnv = "EVENT_REPORTE_K8S_RETRY_DURATION_MILLISECONDS"
35-
)
36-
3729
var (
3830
failureRetryCount = 0
3931
failureRetryPeriodMilliSeconds = 100
4032
)
4133

42-
func init() {
43-
failureRetryCount = env.ParseNumFromEnv(failureRetryCountEnv, failureRetryCount, 0, 10)
44-
failureRetryPeriodMilliSeconds = env.ParseNumFromEnv(failureRetryPeriodMilliSecondsEnv, failureRetryPeriodMilliSeconds, 0, 1000)
45-
}
34+
// func init() {
35+
// failureRetryCount = env.ParseNumFromEnv(failureRetryCountEnv, failureRetryCount, 0, 10)
36+
// failureRetryPeriodMilliSeconds = env.ParseNumFromEnv(failureRetryPeriodMilliSecondsEnv, failureRetryPeriodMilliSeconds, 0, 1000)
37+
// }
4638

4739
// NewCommand returns a new instance of an application change revision command
4840
func NewCommand() *cobra.Command {
4941
var (
50-
redisClient *redis.Client
51-
listenHost string
52-
listenPort int
53-
glogLevel int
54-
clientConfig clientcmd.ClientConfig
55-
applicationServerAddress string
42+
redisClient *redis.Client
43+
listenHost string
44+
listenPort int
45+
glogLevel int
46+
clientConfig clientcmd.ClientConfig
47+
//applicationServerAddress string
5648
repoServerAddress string
5749
repoServerTimeoutSeconds int
5850
repoServerPlaintext bool
5951
repoServerStrictTLS bool
60-
cacheSrc func() (*servercache.Cache, error)
61-
contentSecurityPolicy string
62-
applicationNamespaces []string
63-
argocdToken string
64-
rootpath string
52+
//cacheSrc func() (*servercache.Cache, error)
53+
applicationNamespaces []string
54+
metricsCacheExpiration time.Duration
55+
//argocdToken string
56+
//rootpath string
6557
)
6658
command := &cobra.Command{
6759
Use: cliName,
6860
Short: "Run the ArgoCD Monorepo Controller",
6961
Long: "The ArgoCD Monorepo Controller is a service that listens for application events and updates the application's revision in the application CRD",
7062
DisableAutoGenTag: true,
71-
Run: func(c *cobra.Command, _ []string) {
63+
Run: func(c *cobra.Command, args []string) {
64+
7265
ctx := c.Context()
7366

7467
vers := common.GetVersion()
68+
7569
namespace, _, err := clientConfig.Namespace()
7670
errors.CheckError(err)
7771
vers.LogStartupInfo(
@@ -90,8 +84,8 @@ func NewCommand() *cobra.Command {
9084
errors.CheckError(err)
9185
errors.CheckError(v1alpha1.SetK8SConfigDefaults(config))
9286

93-
cache, err := cacheSrc()
94-
errors.CheckError(err)
87+
//cache, err := cacheSrc()
88+
//errors.CheckError(err)
9589

9690
kubeclientset := kubernetes.NewForConfigOrDie(config)
9791

@@ -114,57 +108,53 @@ func NewCommand() *cobra.Command {
114108
tlsConfig)
115109

116110
changeRevisionServerOpts := mrp.MRPServerOpts{
117-
ListenPort: listenPort,
118-
ListenHost: listenHost,
119-
Namespace: namespace,
120-
KubeClientset: kubeclientset,
121-
AppClientset: appClientSet,
122-
Cache: cache,
123-
RedisClient: redisClient,
124-
ApplicationNamespaces: applicationNamespaces,
125-
RepoClientset: repoClientSet,
111+
ListenPort: listenPort,
112+
ListenHost: listenHost,
113+
Namespace: namespace,
114+
KubeClientset: kubeclientset,
115+
AppClientset: appClientSet,
116+
//Cache: cache,
117+
RedisClient: redisClient,
118+
ApplicationNamespaces: applicationNamespaces,
119+
RepoClientset: repoClientSet,
120+
MetricsCacheExpiration: metricsCacheExpiration,
126121
}
127122

128123
log.Debug("Starting Monorepo Controller server")
129124
stats.RegisterStackDumper()
130125
stats.StartStatsTicker(10 * time.Minute)
131126
stats.RegisterHeapDumper("memprofile")
132-
changeRevisionServer := mrp.NewApplicationChangeRevisionServer(ctx, changeRevisionServerOpts)
127+
changeRevisionServer := mrp.NewMRPServer(ctx, changeRevisionServerOpts)
133128
log.Debug("Initializing Monorepo Controller server")
134129
changeRevisionServer.Init(ctx)
135-
log.Debug("Starting listener")
136-
lns, err := changeRevisionServer.Listen()
137-
errors.CheckError(err)
138130
for {
139131
log.Debug("Running Monorepo controllerserver")
140132
ctx, cancel := context.WithCancel(ctx)
141-
changeRevisionServer.Run(ctx, lns)
133+
changeRevisionServer.Run(ctx)
142134
log.Debug("Change revision controller server finished")
143135
cancel()
144136
}
145137
},
146138
}
147139

148140
clientConfig = cli.AddKubectlFlagsToCmd(command)
149-
command.Flags().StringVar(&rootpath, "argocd-server-path", env.StringFromEnv("ARGOCD_SERVER_ROOTPATH", ""), "Used if Argo CD is running behind reverse proxy under subpath different from /")
150-
command.Flags().StringVar(&cmdutil.LogFormat, "logformat", env.StringFromEnv("ACR_CONTROLLER_LOGFORMAT", "json"), "Set the logging format. One of: text|json")
151-
command.Flags().StringVar(&cmdutil.LogLevel, "loglevel", env.StringFromEnv("ACR_CONTROLLER_LOG_LEVEL", "info"), "Set the logging level. One of: debug|info|warn|error")
141+
command.Flags().StringVar(&cmdutil.LogFormat, "logformat", env.StringFromEnv("MONOREPO_CONTROLLER_LOGFORMAT", "json"), "Set the logging format. One of: text|json")
142+
command.Flags().StringVar(&cmdutil.LogLevel, "loglevel", env.StringFromEnv("MONOREPO_CONTROLLER_LOGLEVEL", "info"), "Set the logging level. One of: debug|info|warn|error")
152143
command.Flags().IntVar(&glogLevel, "gloglevel", 0, "Set the glog logging level")
153-
command.Flags().StringVar(&applicationServerAddress, "application-server", env.StringFromEnv("ARGOCD_SERVER", common.DefaultApplicationServerAddr), "Application server address")
154-
command.Flags().StringVar(&argocdToken, "argocd-token", env.StringFromEnv("ARGOCD_TOKEN", ""), "ArgoCD server JWT token")
155144
command.AddCommand(cli.NewVersionCmd(cliName))
156-
command.Flags().StringVar(&listenHost, "address", env.StringFromEnv("ACR_CONTROLLER_LISTEN_ADDRESS", common.DefaultAddressMRPController), "Listen on given address")
157-
command.Flags().IntVar(&listenPort, "port", common.DefaultPortMRPServer, "Listen on given port")
158-
command.Flags().StringVar(&contentSecurityPolicy, "content-security-policy", env.StringFromEnv("ACR_CONTROLLER_CONTENT_SECURITY_POLICY", "frame-ancestors 'self';"), "Set Content-Security-Policy header in HTTP responses to `value`. To disable, set to \"\".")
159-
command.Flags().StringSliceVar(&applicationNamespaces, "application-namespaces", env.StringsFromEnv("ARGOCD_APPLICATION_NAMESPACES", []string{}, ","), "List of additional namespaces where application resources can be managed in")
160-
command.Flags().StringVar(&repoServerAddress, "monorepo-repo-server", env.StringFromEnv("ARGOCD_MONOREPO_REPO_SERVER", common.DefaultMonorepoRepoServerAddr), "Monorepo Repo server address")
161-
command.Flags().IntVar(&repoServerTimeoutSeconds, "monorepo-repo-server-timeout-seconds", env.ParseNumFromEnv("ARGOCD_MONOREPO_REPO_SERVER_TIMEOUT_SECONDS", 60, 0, math.MaxInt64), "Repo server RPC call timeout seconds.")
162-
command.Flags().BoolVar(&repoServerPlaintext, "monorepo-repo-server-plaintext", env.ParseBoolFromEnv("ARGOCD_SERVER_REPO_SERVER_PLAINTEXT", false), "Use a plaintext client (non-TLS) to connect to repository server")
163-
command.Flags().BoolVar(&repoServerStrictTLS, "monorepo-repo-server-strict-tls", env.ParseBoolFromEnv("ARGOCD_SERVER_REPO_SERVER_STRICT_TLS", false), "Perform strict validation of TLS certificates when connecting to monorepo repo server")
164-
cacheSrc = servercache.AddCacheFlagsToCmd(command, cacheutil.Options{
165-
OnClientCreated: func(client *redis.Client) {
166-
redisClient = client
167-
},
168-
})
145+
command.Flags().StringVar(&listenHost, "address", env.StringFromEnv("MONOREPO_CONTROLLER_LISTEN_ADDRESS", common.DefaultAddressMRPControllerMetrics), "Metrics server will listen on given address")
146+
command.Flags().IntVar(&listenPort, "port", env.ParseNumFromEnv("MONOREPO_CONTROLLER_LISTEN_PORT", common.DefaultPortMRPServerMetrics, 1, math.MaxInt16), "Metrics server will listen on given port")
147+
command.Flags().StringSliceVar(&applicationNamespaces, "application-namespaces", env.StringsFromEnv("MONOREPO_CONTROLLER_APPLICATION_NAMESPACES", []string{}, ","), "Comma separated list of additional namespaces where application resources can be managed in")
148+
command.Flags().StringVar(&repoServerAddress, "monorepo-repo-server", env.StringFromEnv("MONOREPO_REPO_SERVER", common.DefaultMonorepoRepoServerAddr), "Monorepo Repo server address")
149+
command.Flags().IntVar(&repoServerTimeoutSeconds, "monorepo-repo-server-timeout-seconds", env.ParseNumFromEnv("MONOREPO_REPO_SERVER_TIMEOUT_SECONDS", 60, 0, math.MaxInt64), "Repo server RPC call timeout seconds.")
150+
command.Flags().BoolVar(&repoServerPlaintext, "monorepo-repo-server-plaintext", env.ParseBoolFromEnv("MONOREPO_REPO_SERVER_PLAINTEXT", false), "Use a plaintext client (non-TLS) to connect to repository server")
151+
command.Flags().BoolVar(&repoServerStrictTLS, "monorepo-repo-server-strict-tls", env.ParseBoolFromEnv("MONOREPO_REPO_SERVER_STRICT_TLS", false), "Perform strict validation of TLS certificates when connecting to monorepo repo server")
152+
command.Flags().DurationVar(&metricsCacheExpiration, "metrics-cache-expiration", env.ParseDurationFromEnv("MONOREPO_CONTROLLER_METRICS_CACHE_EXPIRATION", 0*time.Second, 0, math.MaxInt64), "Prometheus metrics cache expiration (disabled by default. e.g. 24h0m0s)")
153+
154+
// cacheSrc = servercache.AddCacheFlagsToCmd(command, cacheutil.Options{
155+
// OnClientCreated: func(client *redis.Client) {
156+
// redisClient = client
157+
// },
158+
// })
169159
return command
170160
}

common/mrp_common.go

Lines changed: 2 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,20 @@
11
package common
22

3-
// Default service addresses and URLS of Argo CD internal services
4-
const (
5-
// DefaultApplicationServerAddr is the HTTP address of the Argo CD server
6-
DefaultApplicationServerAddr = "argo-cd-server:80"
7-
// DefaultRedisHaProxyAddr is the default HTTP address of the sources server
8-
DefaultSourcesServerAddr = "sources-server:8090"
9-
)
10-
113
// Default listener ports for ArgoCD components
124
const (
13-
DefaultPortEventReporterServerMetrics = 8087
14-
DefaultPortEventReporterServer = 8088
15-
16-
DefaultPortMRPServer = 8090
5+
DefaultPortMRPServerMetrics = 8090
176
DefaultPortMonorepoRepoServer = 8091
187
DefaultPortMonorepoRepoServerMetrics = 8094
198
)
209

2110
// DefaultAddressAPIServer for ArgoCD components
2211
const (
23-
DefaultAddressEventReporterServer = "0.0.0.0"
24-
DefaultAddressMRPController = "0.0.0.0"
25-
DefaultAddressEventReporterServerMetrics = "0.0.0.0"
12+
DefaultAddressMRPControllerMetrics = "0.0.0.0"
2613

2714
DefaultAddressMonorepoRepoServerMetrics = "0.0.0.0"
2815
DefaultAddressMonorepoRepoServer = "0.0.0.0"
2916
)
3017

31-
// Environment variables for tuning and debugging Argo CD
32-
const (
33-
// EnvApplicationEventCacheDuration controls the expiration of application events cache
34-
EnvApplicationEventCacheDuration = "ARGOCD_APP_EVENTS_CACHE_DURATION"
35-
// EnvResourceEventCacheDuration controls the expiration of resource events cache
36-
EnvResourceEventCacheDuration = "ARGOCD_RESOURCE_EVENTS_CACHE_DURATION"
37-
// EnvEventReporterShardingAlgorithm is the distribution sharding algorithm to be used: legacy
38-
EnvEventReporterShardingAlgorithm = "EVENT_REPORTER_SHARDING_ALGORITHM"
39-
// EnvEventReporterReplicas is the number of EventReporter replicas
40-
EnvEventReporterReplicas = "EVENT_REPORTER_REPLICAS"
41-
// EnvEventReporterShard is the shard number that should be handled by reporter
42-
EnvEventReporterShard = "EVENT_REPORTER_SHARD"
43-
)
44-
45-
// CF Event reporter constants
46-
const (
47-
EventReporterLegacyShardingAlgorithm = "legacy"
48-
DefaultEventReporterShardingAlgorithm = EventReporterLegacyShardingAlgorithm
49-
)
50-
5118
// Default service addresses and URLS of Argo CD internal services
5219
const (
5320
// DefaultRepoServerAddr is the gRPC address of the Argo CD repo server

docs/assets/favicon.png

2.63 KB
Loading

docs/assets/logo.png

27.3 KB
Loading

0 commit comments

Comments
 (0)