Compare commits

...

3 Commits

Author SHA1 Message Date
github-actions[bot]
a89d01266b Bump version to 2.14.0-rc2 (#21223)
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: pasha-codefresh <39732895+pasha-codefresh@users.noreply.github.com>
2024-12-17 19:49:32 +02:00
gcp-cherry-pick-bot[bot]
684ee0bceb Revert "fix: Graceful shutdown for the API server (#18642) (#20981)" (#21221) (#21222) 2024-12-17 18:57:11 +02:00
github-actions[bot]
2ac03b5152 Bump version to 2.14.0-rc1 (#21218)
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: pasha-codefresh <39732895+pasha-codefresh@users.noreply.github.com>
2024-12-17 17:08:19 +02:00
24 changed files with 127 additions and 375 deletions

View File

@@ -1 +1 @@
2.14.0
2.14.0-rc2

View File

@@ -214,7 +214,7 @@ func NewCommand() *cobra.Command {
hydratorEnabled,
)
errors.CheckError(err)
cacheutil.CollectMetrics(redisClient, appController.GetMetricsServer(), nil)
cacheutil.CollectMetrics(redisClient, appController.GetMetricsServer())
stats.RegisterStackDumper()
stats.StartStatsTicker(10 * time.Minute)

View File

@@ -130,7 +130,7 @@ func NewCommand() *cobra.Command {
askPassServer := askpass.NewServer(askpass.SocketPath)
metricsServer := metrics.NewMetricsServer()
cacheutil.CollectMetrics(redisClient, metricsServer, nil)
cacheutil.CollectMetrics(redisClient, metricsServer)
server, err := reposerver.NewServer(metricsServer, cache, tlsConfigCustomizer, repository.RepoServerInitConstants{
ParallelismLimit: parallelismLimit,
PauseGenerationAfterFailedGenerationAttempts: pauseGenerationAfterFailedGenerationAttempts,

View File

@@ -260,25 +260,22 @@ func NewCommand() *cobra.Command {
stats.RegisterHeapDumper("memprofile")
argocd := server.NewServer(ctx, argoCDOpts, appsetOpts)
argocd.Init(ctx)
lns, err := argocd.Listen()
errors.CheckError(err)
for {
var closer func()
serverCtx, cancel := context.WithCancel(ctx)
lns, err := argocd.Listen()
errors.CheckError(err)
ctx, cancel := context.WithCancel(ctx)
if otlpAddress != "" {
closer, err = traceutil.InitTracer(serverCtx, "argocd-server", otlpAddress, otlpInsecure, otlpHeaders, otlpAttrs)
closer, err = traceutil.InitTracer(ctx, "argocd-server", otlpAddress, otlpInsecure, otlpHeaders, otlpAttrs)
if err != nil {
log.Fatalf("failed to initialize tracing: %v", err)
}
}
argocd.Run(serverCtx, lns)
argocd.Run(ctx, lns)
cancel()
if closer != nil {
closer()
}
cancel()
if argocd.TerminateRequested() {
break
}
}
},
Example: templates.Examples(`

View File

@@ -1,2 +1,5 @@
This page is populated for released Argo CD versions. Use the version selector to view this table for a specific
version.
| Argo CD version | Kubernetes versions |
|-----------------|---------------------|
| 2.14 | v1.31, v1.30, v1.29, v1.28 |
| 2.13 | v1.30, v1.29, v1.28, v1.27 |
| 2.12 | v1.29, v1.28, v1.27, v1.26 |

View File

@@ -5,7 +5,7 @@ kind: Kustomization
images:
- name: quay.io/argoproj/argocd
newName: quay.io/argoproj/argocd
newTag: latest
newTag: v2.14.0-rc2
resources:
- ./application-controller
- ./dex

View File

@@ -24165,7 +24165,7 @@ spec:
key: applicationsetcontroller.requeue.after
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: argocd-applicationset-controller
ports:
@@ -24435,7 +24435,7 @@ spec:
- argocd
- admin
- redis-initial-password
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: IfNotPresent
name: secret-init
securityContext:
@@ -24696,7 +24696,7 @@ spec:
value: /helm-working-dir
- name: HELM_DATA_HOME
value: /helm-working-dir
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
@@ -24748,7 +24748,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /var/run/argocd/argocd-cmp-server
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
name: copyutil
securityContext:
allowPrivilegeEscalation: false
@@ -25054,7 +25054,7 @@ spec:
optional: true
- name: KUBECACHEDIR
value: /tmp/kubecache
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: argocd-application-controller
ports:

View File

@@ -24133,7 +24133,7 @@ spec:
key: applicationsetcontroller.requeue.after
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: argocd-applicationset-controller
ports:
@@ -24253,7 +24253,7 @@ spec:
- argocd
- admin
- redis-initial-password
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: IfNotPresent
name: secret-init
securityContext:
@@ -24514,7 +24514,7 @@ spec:
value: /helm-working-dir
- name: HELM_DATA_HOME
value: /helm-working-dir
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
@@ -24566,7 +24566,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /var/run/argocd/argocd-cmp-server
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
name: copyutil
securityContext:
allowPrivilegeEscalation: false
@@ -24872,7 +24872,7 @@ spec:
optional: true
- name: KUBECACHEDIR
value: /tmp/kubecache
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: argocd-application-controller
ports:

View File

@@ -12,4 +12,4 @@ resources:
images:
- name: quay.io/argoproj/argocd
newName: quay.io/argoproj/argocd
newTag: latest
newTag: v2.14.0-rc2

View File

@@ -12,7 +12,7 @@ patches:
images:
- name: quay.io/argoproj/argocd
newName: quay.io/argoproj/argocd
newTag: latest
newTag: v2.14.0-rc2
resources:
- ../../base/application-controller
- ../../base/applicationset-controller

View File

@@ -25506,7 +25506,7 @@ spec:
key: applicationsetcontroller.requeue.after
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: argocd-applicationset-controller
ports:
@@ -25793,7 +25793,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /shared/argocd-dex
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: copyutil
securityContext:
@@ -25883,7 +25883,7 @@ spec:
key: notificationscontroller.repo.server.plaintext
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
tcpSocket:
@@ -26004,7 +26004,7 @@ spec:
- argocd
- admin
- redis-initial-password
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: IfNotPresent
name: secret-init
securityContext:
@@ -26291,7 +26291,7 @@ spec:
value: /helm-working-dir
- name: HELM_DATA_HOME
value: /helm-working-dir
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
@@ -26343,7 +26343,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /var/run/argocd/argocd-cmp-server
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
name: copyutil
securityContext:
allowPrivilegeEscalation: false
@@ -26705,7 +26705,7 @@ spec:
key: hydrator.enabled
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -27047,7 +27047,7 @@ spec:
optional: true
- name: KUBECACHEDIR
value: /tmp/kubecache
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: argocd-application-controller
ports:

View File

@@ -25476,7 +25476,7 @@ spec:
key: applicationsetcontroller.requeue.after
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: argocd-applicationset-controller
ports:
@@ -25613,7 +25613,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /shared/argocd-dex
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: copyutil
securityContext:
@@ -25703,7 +25703,7 @@ spec:
key: notificationscontroller.repo.server.plaintext
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
tcpSocket:
@@ -25824,7 +25824,7 @@ spec:
- argocd
- admin
- redis-initial-password
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: IfNotPresent
name: secret-init
securityContext:
@@ -26111,7 +26111,7 @@ spec:
value: /helm-working-dir
- name: HELM_DATA_HOME
value: /helm-working-dir
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
@@ -26163,7 +26163,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /var/run/argocd/argocd-cmp-server
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
name: copyutil
securityContext:
allowPrivilegeEscalation: false
@@ -26525,7 +26525,7 @@ spec:
key: hydrator.enabled
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -26867,7 +26867,7 @@ spec:
optional: true
- name: KUBECACHEDIR
value: /tmp/kubecache
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: argocd-application-controller
ports:

View File

@@ -1736,7 +1736,7 @@ spec:
key: applicationsetcontroller.requeue.after
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: argocd-applicationset-controller
ports:
@@ -2023,7 +2023,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /shared/argocd-dex
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: copyutil
securityContext:
@@ -2113,7 +2113,7 @@ spec:
key: notificationscontroller.repo.server.plaintext
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
tcpSocket:
@@ -2234,7 +2234,7 @@ spec:
- argocd
- admin
- redis-initial-password
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: IfNotPresent
name: secret-init
securityContext:
@@ -2521,7 +2521,7 @@ spec:
value: /helm-working-dir
- name: HELM_DATA_HOME
value: /helm-working-dir
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
@@ -2573,7 +2573,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /var/run/argocd/argocd-cmp-server
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
name: copyutil
securityContext:
allowPrivilegeEscalation: false
@@ -2935,7 +2935,7 @@ spec:
key: hydrator.enabled
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -3277,7 +3277,7 @@ spec:
optional: true
- name: KUBECACHEDIR
value: /tmp/kubecache
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: argocd-application-controller
ports:

View File

@@ -1706,7 +1706,7 @@ spec:
key: applicationsetcontroller.requeue.after
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: argocd-applicationset-controller
ports:
@@ -1843,7 +1843,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /shared/argocd-dex
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: copyutil
securityContext:
@@ -1933,7 +1933,7 @@ spec:
key: notificationscontroller.repo.server.plaintext
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
tcpSocket:
@@ -2054,7 +2054,7 @@ spec:
- argocd
- admin
- redis-initial-password
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: IfNotPresent
name: secret-init
securityContext:
@@ -2341,7 +2341,7 @@ spec:
value: /helm-working-dir
- name: HELM_DATA_HOME
value: /helm-working-dir
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
@@ -2393,7 +2393,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /var/run/argocd/argocd-cmp-server
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
name: copyutil
securityContext:
allowPrivilegeEscalation: false
@@ -2755,7 +2755,7 @@ spec:
key: hydrator.enabled
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -3097,7 +3097,7 @@ spec:
optional: true
- name: KUBECACHEDIR
value: /tmp/kubecache
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: argocd-application-controller
ports:

View File

@@ -24625,7 +24625,7 @@ spec:
key: applicationsetcontroller.requeue.after
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: argocd-applicationset-controller
ports:
@@ -24912,7 +24912,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /shared/argocd-dex
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: copyutil
securityContext:
@@ -25002,7 +25002,7 @@ spec:
key: notificationscontroller.repo.server.plaintext
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
tcpSocket:
@@ -25104,7 +25104,7 @@ spec:
- argocd
- admin
- redis-initial-password
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: IfNotPresent
name: secret-init
securityContext:
@@ -25365,7 +25365,7 @@ spec:
value: /helm-working-dir
- name: HELM_DATA_HOME
value: /helm-working-dir
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
@@ -25417,7 +25417,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /var/run/argocd/argocd-cmp-server
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
name: copyutil
securityContext:
allowPrivilegeEscalation: false
@@ -25777,7 +25777,7 @@ spec:
key: hydrator.enabled
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -26119,7 +26119,7 @@ spec:
optional: true
- name: KUBECACHEDIR
value: /tmp/kubecache
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: argocd-application-controller
ports:

16
manifests/install.yaml generated
View File

@@ -24593,7 +24593,7 @@ spec:
key: applicationsetcontroller.requeue.after
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: argocd-applicationset-controller
ports:
@@ -24730,7 +24730,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /shared/argocd-dex
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: copyutil
securityContext:
@@ -24820,7 +24820,7 @@ spec:
key: notificationscontroller.repo.server.plaintext
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
tcpSocket:
@@ -24922,7 +24922,7 @@ spec:
- argocd
- admin
- redis-initial-password
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: IfNotPresent
name: secret-init
securityContext:
@@ -25183,7 +25183,7 @@ spec:
value: /helm-working-dir
- name: HELM_DATA_HOME
value: /helm-working-dir
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
@@ -25235,7 +25235,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /var/run/argocd/argocd-cmp-server
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
name: copyutil
securityContext:
allowPrivilegeEscalation: false
@@ -25595,7 +25595,7 @@ spec:
key: hydrator.enabled
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -25937,7 +25937,7 @@ spec:
optional: true
- name: KUBECACHEDIR
value: /tmp/kubecache
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: argocd-application-controller
ports:

View File

@@ -855,7 +855,7 @@ spec:
key: applicationsetcontroller.requeue.after
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: argocd-applicationset-controller
ports:
@@ -1142,7 +1142,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /shared/argocd-dex
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: copyutil
securityContext:
@@ -1232,7 +1232,7 @@ spec:
key: notificationscontroller.repo.server.plaintext
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
tcpSocket:
@@ -1334,7 +1334,7 @@ spec:
- argocd
- admin
- redis-initial-password
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: IfNotPresent
name: secret-init
securityContext:
@@ -1595,7 +1595,7 @@ spec:
value: /helm-working-dir
- name: HELM_DATA_HOME
value: /helm-working-dir
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
@@ -1647,7 +1647,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /var/run/argocd/argocd-cmp-server
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
name: copyutil
securityContext:
allowPrivilegeEscalation: false
@@ -2007,7 +2007,7 @@ spec:
key: hydrator.enabled
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -2349,7 +2349,7 @@ spec:
optional: true
- name: KUBECACHEDIR
value: /tmp/kubecache
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: argocd-application-controller
ports:

View File

@@ -823,7 +823,7 @@ spec:
key: applicationsetcontroller.requeue.after
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: argocd-applicationset-controller
ports:
@@ -960,7 +960,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /shared/argocd-dex
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: copyutil
securityContext:
@@ -1050,7 +1050,7 @@ spec:
key: notificationscontroller.repo.server.plaintext
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
tcpSocket:
@@ -1152,7 +1152,7 @@ spec:
- argocd
- admin
- redis-initial-password
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: IfNotPresent
name: secret-init
securityContext:
@@ -1413,7 +1413,7 @@ spec:
value: /helm-working-dir
- name: HELM_DATA_HOME
value: /helm-working-dir
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
@@ -1465,7 +1465,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /var/run/argocd/argocd-cmp-server
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
name: copyutil
securityContext:
allowPrivilegeEscalation: false
@@ -1825,7 +1825,7 @@ spec:
key: hydrator.enabled
name: argocd-cmd-params-cm
optional: true
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -2167,7 +2167,7 @@ spec:
optional: true
- name: KUBECACHEDIR
value: /tmp/kubecache
image: quay.io/argoproj/argocd:latest
image: quay.io/argoproj/argocd:v2.14.0-rc2
imagePullPolicy: Always
name: argocd-application-controller
ports:

View File

@@ -13,17 +13,13 @@ import (
"net/url"
"os"
"os/exec"
"os/signal"
"path"
"path/filepath"
"reflect"
"regexp"
go_runtime "runtime"
"runtime/debug"
"strings"
gosync "sync"
"sync/atomic"
"syscall"
"time"
// nolint:staticcheck
@@ -191,20 +187,17 @@ type ArgoCDServer struct {
db db.ArgoDB
// stopCh is the channel which when closed, will shutdown the Argo CD server
stopCh chan os.Signal
userStateStorage util_session.UserStateStorage
indexDataInit gosync.Once
indexData []byte
indexDataErr error
staticAssets http.FileSystem
apiFactory api.Factory
secretInformer cache.SharedIndexInformer
configMapInformer cache.SharedIndexInformer
serviceSet *ArgoCDServiceSet
extensionManager *extension.Manager
shutdown func()
terminateRequested atomic.Bool
available atomic.Bool
stopCh chan struct{}
userStateStorage util_session.UserStateStorage
indexDataInit gosync.Once
indexData []byte
indexDataErr error
staticAssets http.FileSystem
apiFactory api.Factory
secretInformer cache.SharedIndexInformer
configMapInformer cache.SharedIndexInformer
serviceSet *ArgoCDServiceSet
extensionManager *extension.Manager
}
type ArgoCDServerOpts struct {
@@ -337,9 +330,6 @@ func NewServer(ctx context.Context, opts ArgoCDServerOpts, appsetOpts Applicatio
pg := extension.NewDefaultProjectGetter(projLister, dbInstance)
ug := extension.NewDefaultUserGetter(policyEnf)
em := extension.NewManager(logger, opts.Namespace, sg, ag, pg, enf, ug)
noopShutdown := func() {
log.Error("API Server Shutdown function called but server is not started yet.")
}
a := &ArgoCDServer{
ArgoCDServerOpts: opts,
@@ -363,8 +353,6 @@ func NewServer(ctx context.Context, opts ArgoCDServerOpts, appsetOpts Applicatio
secretInformer: secretInformer,
configMapInformer: configMapInformer,
extensionManager: em,
shutdown: noopShutdown,
stopCh: make(chan os.Signal, 1),
}
err = a.logInClusterWarnings()
@@ -382,12 +370,6 @@ const (
)
func (a *ArgoCDServer) healthCheck(r *http.Request) error {
if a.terminateRequested.Load() {
return errors.New("API Server is terminating and unable to serve requests.")
}
if !a.available.Load() {
return errors.New("API Server is not available. It either hasn't started or is restarting.")
}
if val, ok := r.URL.Query()["full"]; ok && len(val) > 0 && val[0] == "true" {
argoDB := db.NewDB(a.Namespace, a.settingsMgr, a.KubeClientset)
_, err := argoDB.ListClusters(r.Context())
@@ -534,19 +516,11 @@ func (a *ArgoCDServer) Init(ctx context.Context) {
// k8s.io/ go-to-protobuf uses protoc-gen-gogo, which comes from gogo/protobuf (a fork of
// golang/protobuf).
func (a *ArgoCDServer) Run(ctx context.Context, listeners *Listeners) {
defer func() {
if r := recover(); r != nil {
log.WithField("trace", string(debug.Stack())).Error("Recovered from panic: ", r)
a.terminateRequested.Store(true)
a.shutdown()
}
}()
a.userStateStorage.Init(ctx)
metricsServ := metrics.NewMetricsServer(a.MetricsHost, a.MetricsPort)
if a.RedisClient != nil {
cacheutil.CollectMetrics(a.RedisClient, metricsServ, a.userStateStorage.GetLockObject())
cacheutil.CollectMetrics(a.RedisClient, metricsServ)
}
svcSet := newArgoCDServiceSet(a)
@@ -628,118 +602,35 @@ func (a *ArgoCDServer) Run(ctx context.Context, listeners *Listeners) {
log.Fatal("Timed out waiting for project cache to sync")
}
shutdownFunc := func() {
log.Info("API Server shutdown initiated. Shutting down servers...")
a.available.Store(false)
shutdownCtx, cancel := context.WithTimeout(ctx, 20*time.Second)
defer cancel()
var wg gosync.WaitGroup
// Shutdown http server
wg.Add(1)
go func() {
defer wg.Done()
err := httpS.Shutdown(shutdownCtx)
if err != nil {
log.Errorf("Error shutting down http server: %s", err)
}
}()
if a.useTLS() {
// Shutdown https server
wg.Add(1)
go func() {
defer wg.Done()
err := httpsS.Shutdown(shutdownCtx)
if err != nil {
log.Errorf("Error shutting down https server: %s", err)
}
}()
}
// Shutdown gRPC server
wg.Add(1)
go func() {
defer wg.Done()
grpcS.GracefulStop()
}()
// Shutdown metrics server
wg.Add(1)
go func() {
defer wg.Done()
err := metricsServ.Shutdown(shutdownCtx)
if err != nil {
log.Errorf("Error shutting down metrics server: %s", err)
}
}()
if a.useTLS() {
// Shutdown tls server
wg.Add(1)
go func() {
defer wg.Done()
tlsm.Close()
}()
}
// Shutdown tcp server
wg.Add(1)
go func() {
defer wg.Done()
tcpm.Close()
}()
c := make(chan struct{})
// This goroutine will wait for all servers to conclude the shutdown
// process
go func() {
defer close(c)
wg.Wait()
}()
select {
case <-c:
log.Info("All servers were gracefully shutdown. Exiting...")
case <-shutdownCtx.Done():
log.Warn("Graceful shutdown timeout. Exiting...")
}
}
a.shutdown = shutdownFunc
signal.Notify(a.stopCh, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
a.available.Store(true)
select {
case signal := <-a.stopCh:
log.Infof("API Server received signal: %s", signal.String())
// SIGUSR1 is used for triggering a server restart
if signal != syscall.SIGUSR1 {
a.terminateRequested.Store(true)
}
a.shutdown()
case <-ctx.Done():
log.Infof("API Server: %s", ctx.Err())
a.terminateRequested.Store(true)
a.shutdown()
}
a.stopCh = make(chan struct{})
<-a.stopCh
}
func (a *ArgoCDServer) Initialized() bool {
return a.projInformer.HasSynced() && a.appInformer.HasSynced()
}
// TerminateRequested returns whether a shutdown was initiated by a signal or context cancel
// as opposed to a watch.
func (a *ArgoCDServer) TerminateRequested() bool {
return a.terminateRequested.Load()
}
// checkServeErr checks the error from a .Serve() call to decide if it was a graceful shutdown
func (a *ArgoCDServer) checkServeErr(name string, err error) {
if err != nil && !errors.Is(err, http.ErrServerClosed) {
log.Errorf("Error received from server %s: %v", name, err)
if err != nil {
if a.stopCh == nil {
// a nil stopCh indicates a graceful shutdown
log.Infof("graceful shutdown %s: %v", name, err)
} else {
log.Fatalf("%s: %v", name, err)
}
} else {
log.Infof("Graceful shutdown of %s initiated", name)
log.Infof("graceful shutdown %s", name)
}
}
// Shutdown stops the Argo CD server
func (a *ArgoCDServer) Shutdown() {
log.Info("Shut down requested")
stopCh := a.stopCh
a.stopCh = nil
if stopCh != nil {
close(stopCh)
}
}
@@ -844,10 +735,9 @@ func (a *ArgoCDServer) watchSettings() {
}
}
log.Info("shutting down settings watch")
a.Shutdown()
a.settingsMgr.Unsubscribe(updateCh)
close(updateCh)
// Triggers server restart
a.stopCh <- syscall.SIGUSR1
}
func (a *ArgoCDServer) rbacPolicyLoader(ctx context.Context) {

View File

@@ -10,8 +10,6 @@ import (
"os"
"path/filepath"
"strings"
gosync "sync"
"syscall"
"testing"
"time"
@@ -421,72 +419,6 @@ func TestCertsAreNotGeneratedInInsecureMode(t *testing.T) {
assert.Nil(t, s.settings.Certificate)
}
func TestGracefulShutdown(t *testing.T) {
port, err := test.GetFreePort()
require.NoError(t, err)
mockRepoClient := &mocks.Clientset{RepoServerServiceClient: &mocks.RepoServerServiceClient{}}
kubeclientset := fake.NewSimpleClientset(test.NewFakeConfigMap(), test.NewFakeSecret())
redis, redisCloser := test.NewInMemoryRedis()
defer redisCloser()
s := NewServer(
context.Background(),
ArgoCDServerOpts{
ListenPort: port,
Namespace: test.FakeArgoCDNamespace,
KubeClientset: kubeclientset,
AppClientset: apps.NewSimpleClientset(),
RepoClientset: mockRepoClient,
RedisClient: redis,
},
ApplicationSetOpts{},
)
projInformerCancel := test.StartInformer(s.projInformer)
defer projInformerCancel()
appInformerCancel := test.StartInformer(s.appInformer)
defer appInformerCancel()
appsetInformerCancel := test.StartInformer(s.appsetInformer)
defer appsetInformerCancel()
lns, err := s.Listen()
require.NoError(t, err)
shutdown := false
runCtx, runCancel := context.WithTimeout(context.Background(), 2*time.Second)
defer runCancel()
err = s.healthCheck(&http.Request{URL: &url.URL{Path: "/healthz", RawQuery: "full=true"}})
require.Error(t, err, "API Server is not running. It either hasn't started or is restarting.")
var wg gosync.WaitGroup
wg.Add(1)
go func(shutdown *bool) {
defer wg.Done()
s.Run(runCtx, lns)
*shutdown = true
}(&shutdown)
for {
if s.available.Load() {
err = s.healthCheck(&http.Request{URL: &url.URL{Path: "/healthz", RawQuery: "full=true"}})
require.NoError(t, err)
break
}
time.Sleep(10 * time.Millisecond)
}
s.stopCh <- syscall.SIGINT
wg.Wait()
err = s.healthCheck(&http.Request{URL: &url.URL{Path: "/healthz", RawQuery: "full=true"}})
require.Error(t, err, "API Server is terminating and unable to serve requests.")
assert.True(t, s.terminateRequested.Load())
assert.False(t, s.available.Load())
assert.True(t, shutdown)
}
func TestAuthenticate(t *testing.T) {
type testData struct {
test string

View File

@@ -1,58 +0,0 @@
package e2e
import (
"context"
"net/http"
"strings"
"testing"
"time"
"github.com/stretchr/testify/require"
"github.com/argoproj/argo-cd/v2/pkg/apiclient/settings"
"github.com/argoproj/argo-cd/v2/test/e2e/fixture"
. "github.com/argoproj/argo-cd/v2/test/e2e/fixture"
"github.com/argoproj/argo-cd/v2/util/errors"
)
func checkHealth(t *testing.T, requireHealthy bool) {
t.Helper()
resp, err := DoHttpRequest("GET", "/healthz?full=true", "")
if requireHealthy {
require.NoError(t, err)
require.Equal(t, http.StatusOK, resp.StatusCode)
} else {
if err != nil {
if !strings.Contains(err.Error(), "connection refused") && !strings.Contains(err.Error(), "connection reset by peer") {
require.NoErrorf(t, err, "If an error returned, it must be about connection refused or reset by peer")
}
} else {
require.Contains(t, []int{http.StatusOK, http.StatusServiceUnavailable}, resp.StatusCode)
}
}
}
func TestAPIServerGracefulRestart(t *testing.T) {
EnsureCleanState(t)
// Should be healthy.
checkHealth(t, true)
// Should trigger API server restart.
errors.CheckError(fixture.SetParamInSettingConfigMap("url", "http://test-api-server-graceful-restart"))
// Wait for ~5 seconds
for i := 0; i < 50; i++ {
checkHealth(t, false)
time.Sleep(100 * time.Millisecond)
}
// One final time, should be healthy, or restart is considered too slow for tests
checkHealth(t, true)
closer, settingsClient, err := ArgoCDClientset.NewSettingsClient()
if closer != nil {
defer closer.Close()
}
require.NoError(t, err)
settings, err := settingsClient.Get(context.Background(), &settings.SettingsQuery{})
require.NoError(t, err)
require.Equal(t, "http://test-api-server-graceful-restart", settings.URL)
}

8
util/cache/redis.go vendored
View File

@@ -9,7 +9,6 @@ import (
"fmt"
"io"
"net"
"sync"
"time"
ioutil "github.com/argoproj/argo-cd/v2/util/io"
@@ -201,11 +200,6 @@ func (redisHook) ProcessPipelineHook(next redis.ProcessPipelineHook) redis.Proce
}
// CollectMetrics add transport wrapper that pushes metrics into the specified metrics registry
// Lock should be shared between functions that can add/process a Redis hook.
func CollectMetrics(client *redis.Client, registry MetricsRegistry, lock *sync.RWMutex) {
if lock != nil {
lock.Lock()
defer lock.Unlock()
}
func CollectMetrics(client *redis.Client, registry MetricsRegistry) {
client.AddHook(&redisHook{registry: registry})
}

View File

@@ -136,8 +136,8 @@ func TestRedisMetrics(t *testing.T) {
ms := NewMockMetricsServer()
redisClient := redis.NewClient(&redis.Options{Addr: mr.Addr()})
faultyRedisClient := redis.NewClient(&redis.Options{Addr: "invalidredishost.invalid:12345"})
CollectMetrics(redisClient, ms, nil)
CollectMetrics(faultyRedisClient, ms, nil)
CollectMetrics(redisClient, ms)
CollectMetrics(faultyRedisClient, ms)
client := NewRedisCache(redisClient, 60*time.Second, RedisCompressionNone)
faultyClient := NewRedisCache(faultyRedisClient, 60*time.Second, RedisCompressionNone)

View File

@@ -125,10 +125,6 @@ func (storage *userStateStorage) IsTokenRevoked(id string) bool {
return storage.revokedTokens[id]
}
func (storage *userStateStorage) GetLockObject() *sync.RWMutex {
return &storage.lock
}
type UserStateStorage interface {
Init(ctx context.Context)
// GetLoginAttempts return number of concurrent login attempts
@@ -139,6 +135,4 @@ type UserStateStorage interface {
RevokeToken(ctx context.Context, id string, expiringAt time.Duration) error
// IsTokenRevoked checks if given token is revoked
IsTokenRevoked(id string) bool
// GetLockObject returns a lock used by the storage
GetLockObject() *sync.RWMutex
}