Skip to content

Commit d88593f

Browse files
committed
Merge branch 'master' of https://github.com/argoproj/argo-cd
Signed-off-by: reggie-k <regina.voloshin@codefresh.io>
2 parents f8fc500 + 83548e3 commit d88593f

File tree

21 files changed

+567
-56
lines changed

21 files changed

+567
-56
lines changed

.github/workflows/bump-major-version.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ jobs:
7474
rsync -a --exclude=.git /home/runner/go/src/github.com/argoproj/argo-cd/ ../argo-cd
7575
7676
- name: Create pull request
77-
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
77+
uses: peter-evans/create-pull-request@84ae59a2cdc2258d6fa0732dd66352dddae2a412 # v7.0.9
7878
with:
7979
commit-message: "Bump major version to ${{ steps.get-target-version.outputs.TARGET_VERSION }}"
8080
title: "Bump major version to ${{ steps.get-target-version.outputs.TARGET_VERSION }}"

.github/workflows/ci-build.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ jobs:
108108
with:
109109
go-version: ${{ env.GOLANG_VERSION }}
110110
- name: Run golangci-lint
111-
uses: golangci/golangci-lint-action@0a35821d5c230e903fcfe077583637dea1b27b47 # v9.0.0
111+
uses: golangci/golangci-lint-action@e7fa5ac41e1cf5b7d48e45e42232ce7ada589601 # v9.1.0
112112
with:
113113
# renovate: datasource=go packageName=github.com/golangci/golangci-lint versioning=regex:^v(?<major>\d+)\.(?<minor>\d+)\.(?<patch>\d+)?$
114114
version: v2.5.0

.github/workflows/init-release.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ jobs:
7070
git stash pop
7171
7272
- name: Create pull request
73-
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
73+
uses: peter-evans/create-pull-request@84ae59a2cdc2258d6fa0732dd66352dddae2a412 # v7.0.9
7474
with:
7575
commit-message: "Bump version to ${{ inputs.TARGET_VERSION }}"
7676
title: "Bump version to ${{ inputs.TARGET_VERSION }} on ${{ inputs.TARGET_BRANCH }} branch"

.github/workflows/release.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ jobs:
344344
if: ${{ env.UPDATE_VERSION == 'true' }}
345345

346346
- name: Create PR to update VERSION on master branch
347-
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
347+
uses: peter-evans/create-pull-request@84ae59a2cdc2258d6fa0732dd66352dddae2a412 # v7.0.9
348348
with:
349349
commit-message: Bump version in master
350350
title: 'chore: Bump version in master'

USERS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,7 @@ Currently, the following organizations are **officially** using Argo CD:
318318
1. [RightRev](https://rightrev.com/)
319319
1. [Rijkswaterstaat](https://www.rijkswaterstaat.nl/en)
320320
1. Rise
321+
1. [RISK IDENT](https://riskident.com/)
321322
1. [Riskified](https://www.riskified.com/)
322323
1. [Robotinfra](https://www.robotinfra.com)
323324
1. [Rocket.Chat](https://rocket.chat)

docs/faq.md

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,10 +328,69 @@ If for some reason authenticated Redis does not work for you and you want to use
328328
* Deployment: argocd-server
329329
* StatefulSet: argocd-application-controller
330330

331+
5. If you have configured file-based Redis credentials using the `REDIS_CREDS_DIR_PATH` environment variable, remove this environment variable and delete the corresponding volume and volumeMount entries that mount the credentials directory from the following manifests:
332+
* Deployment: argocd-repo-server
333+
* Deployment: argocd-server
334+
* StatefulSet: argocd-application-controller
335+
331336
## How do I provide my own Redis credentials?
332337
The Redis password is stored in Kubernetes secret `argocd-redis` with key `auth` in the namespace where Argo CD is installed.
333338
You can config your secret provider to generate Kubernetes secret accordingly.
334339

340+
### Using file-based Redis credentials via `REDIS_CREDS_DIR_PATH`
341+
342+
Argo CD components support reading Redis credentials from files mounted at a specified path inside the container.
343+
344+
When the environment variable `REDIS_CREDS_DIR_PATH` is specified, it takes precedence and Argo CD components that require redis connectivity ( application-controller, repo-server and server) loads the redis credentials from the files located in the specified directory path and ignores any values set in the environment variables
345+
346+
Expected files when using `REDIS_CREDS_DIR_PATH`:
347+
348+
- `auth`: Redis password (mandatory)
349+
- `auth_username`: Redis username
350+
- `sentinel_auth`: Redis Sentinel password
351+
- `sentinel_username`: Redis Sentinel username
352+
353+
You can store these keys in a Kubernetes Secret and mount it into each Argo CD component that needs Redis access. Then point `REDIS_CREDS_DIR_PATH` to the mount directory.
354+
355+
Example Secret:
356+
357+
```yaml
358+
apiVersion: v1
359+
kind: Secret
360+
metadata:
361+
name: <secret-name>
362+
namespace: argocd
363+
type: Opaque
364+
stringData:
365+
auth: "<redis-password>"
366+
auth_username: "<redis-username>"
367+
sentinel_auth: "<sentinel-password>"
368+
sentinel_username: "<sentinel-username>"
369+
```
370+
371+
Example Argo CD component spec (e.g., add to `argocd-server`, `argocd-repo-server`, `argocd-application-controller`):
372+
373+
```yaml
374+
spec:
375+
containers:
376+
- name: argocd-server
377+
image: quay.io/argoproj/argocd:<version>
378+
env:
379+
- name: REDIS_CREDS_DIR_PATH
380+
value: "/var/run/secrets/redis"
381+
volumeMounts:
382+
- name: redis-creds
383+
mountPath: "/var/run/secrets/redis"
384+
readOnly: true
385+
volumes:
386+
- name: redis-creds
387+
secret:
388+
secretName: <secret-name>
389+
```
390+
391+
> [!NOTE]
392+
> This mechanism configures authentication for Argo CD components that connect to Redis. The Redis server itself should be configured independently (e.g., via `redis.conf`).
393+
335394
## How do I fix `Manifest generation error (cached)`?
336395

337396
`Manifest generation error (cached)` means that there was an error when generating manifests and that the error message has been cached to avoid runaway retries.

docs/operator-manual/applicationset.yaml

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -258,21 +258,21 @@ spec:
258258
- CreateNamespace=true
259259
# defines from which Git repository to extract the desired Application manifests
260260
source:
261-
- chart: '{{.chart}}'
261+
chart: '{{.chart}}'
262262
# developers may customize app details using JSON files from above repo URL
263-
repoURL: https://github.com/argoproj/argo-cd.git
264-
targetRevision: HEAD
265-
# Path within the repository where Kubernetes manifests are located
266-
path: applicationset/examples/list-generator/guestbook/{{cluster}}
267-
helm:
268-
useCredentials: "{{.useCredentials}}" # This field may NOT be templated, because it is a boolean field
269-
parameters:
270-
- name: "image.tag"
271-
value: "pull-{{head_sha}}"
272-
- name: "{{.name}}"
273-
value: "{{.value}}"
274-
- name: throw-away
275-
value: "{{end}}"
263+
repoURL: https://github.com/argoproj/argo-cd.git
264+
targetRevision: HEAD
265+
# Path within the repository where Kubernetes manifests are located
266+
path: applicationset/examples/list-generator/guestbook/{{cluster}}
267+
helm:
268+
useCredentials: "{{.useCredentials}}" # This field may NOT be templated, because it is a boolean field
269+
parameters:
270+
- name: "image.tag"
271+
value: "pull-{{head_sha}}"
272+
- name: "{{.name}}"
273+
value: "{{.value}}"
274+
- name: throw-away
275+
value: "{{end}}"
276276
destination:
277277
# Only one of name or server may be specified: if both are specified, an error is returned.
278278
# Name of the cluster (within Argo CD) to deploy to

docs/operator-manual/applicationset/Appset-Any-Namespace.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,23 @@ It can be achieved by setting the environment variable `ARGOCD_APPLICATIONSET_CO
121121

122122
In order to enable this feature, the Argo CD administrator must reconfigure the `argocd-applicationset-controller` workloads to add the `--applicationset-namespaces` parameter to the container's startup command.
123123

124+
The `--applicationset-namespaces` parameter takes a comma-separated list of namespaces where `ApplicationSet` are to be allowed in. Each entry of the list supports:
125+
126+
- shell-style wildcards such as `*`, so for example the entry `app-team-*` would match `app-team-one` and `app-team-two`. To enable all namespaces on the cluster where Argo CD is running on, you can just specify `*`, i.e. `--application-namespaces=*`.
127+
- regex, requires wrapping the string in ```/```, example to allow all namespaces except a particular one: ```/^((?!not-allowed).)*$/```.
128+
129+
The startup parameters for the `argocd-applicationset-controller` can also be conveniently set up and kept in sync by specifying the `applicationsetcontroller.namespaces` settings in the `argocd-cmd-params-cm` ConfigMap _instead_ of changing the manifests for the `ApplicationSet`. For example:
130+
131+
```yaml
132+
data:
133+
applicationsetcontroller.namespaces: "app-team-one, app-team-two"
134+
```
135+
would allow the `app-team-one` and `app-team-two` namespaces for managing `ApplicationSet` resources. After a change to the `argocd-cmd-params-cm` namespace, the `ApplicationSet` workload need to be restarted:
136+
137+
```bash
138+
kubectl rollout restart -n argocd deployment argocd-applicationset-controller
139+
```
140+
124141
### Safely template project
125142

126143
As [App in any namespace](../app-any-namespace.md) is a prerequisite, it is possible to safely template project.

docs/operator-manual/ingress.md

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -877,3 +877,89 @@ http {
877877
}
878878
}
879879
```
880+
881+
## Cilium Gateway API Example
882+
883+
This section provides a working example of using Cilium Gateway API with Argo CD, including HTTP and gRPC routes.
884+
885+
### Prerequisites
886+
887+
- API server run with TLS disabled (set `server.insecure: "true"` in argocd-cmd-params-cm ConfigMap)
888+
889+
### Gateway Example
890+
891+
```yaml
892+
apiVersion: gateway.networking.k8s.io/v1
893+
kind: Gateway
894+
metadata:
895+
name: cluster-gateway
896+
namespace: gateway
897+
annotations:
898+
cert-manager.io/issuer: cloudflare-dns-issuer
899+
spec:
900+
gatewayClassName: cilium
901+
addresses:
902+
- type: IPAddress
903+
value: "192.168.0.130"
904+
listeners:
905+
- protocol: HTTPS
906+
port: 443
907+
name: https-cluster
908+
hostname: "*.local.example.com"
909+
allowedRoutes:
910+
namespaces:
911+
from: All
912+
tls:
913+
mode: Terminate
914+
certificateRefs:
915+
- name: cluster-gateway-tls
916+
kind: Secret
917+
group: ""
918+
```
919+
920+
### HTTPRoute Example
921+
```yaml
922+
apiVersion: gateway.networking.k8s.io/v1
923+
kind: HTTPRoute
924+
metadata:
925+
name: argocd-http-route
926+
namespace: argocd
927+
spec:
928+
parentRefs:
929+
- name: cluster-gateway
930+
namespace: gateway
931+
hostnames:
932+
- "argocd.local.example.com"
933+
rules:
934+
- backendRefs:
935+
- name: argocd-server
936+
port: 80
937+
matches:
938+
- path:
939+
type: PathPrefix
940+
value: /
941+
```
942+
943+
### GRPCRoute Example
944+
```yaml
945+
apiVersion: gateway.networking.k8s.io/v1
946+
kind: GRPCRoute
947+
metadata:
948+
name: argocd-grpc-route
949+
namespace: argocd
950+
spec:
951+
parentRefs:
952+
- name: cluster-gateway
953+
namespace: gateway
954+
hostnames:
955+
- "argocd.local.example.com"
956+
rules:
957+
- backendRefs:
958+
- name: argocd-server
959+
port: 443
960+
matches:
961+
- headers:
962+
- name: Content-Type
963+
type: RegularExpression
964+
value: "^application/grpc.*$"
965+
```

docs/operator-manual/notifications/triggers.md

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,26 @@ metadata:
3535
name: argocd-notifications-cm
3636
data:
3737
trigger.sync-operation-change: |
38-
- when: app.status.operationState.phase in ['Succeeded']
38+
- when: app.status?.operationState.phase in ['Succeeded']
3939
send: [github-commit-status]
40-
- when: app.status.operationState.phase in ['Running']
40+
- when: app.status?.operationState.phase in ['Running']
4141
send: [github-commit-status]
42-
- when: app.status.operationState.phase in ['Error', 'Failed']
42+
- when: app.status?.operationState.phase in ['Error', 'Failed']
4343
send: [app-sync-failed, github-commit-status]
4444
```
4545

46+
47+
## Accessing Optional Manifest Sections and Fields
48+
49+
Note that in the trigger example above, the `?.` (optional chaining) operator is used to access the Application's
50+
`status.operationState` section. This section is optional; it is not present when an operation has been initiated but has not yet
51+
started by the Application Controller.
52+
53+
If the `?.` operator were not used, `status.operationState` would resolve to `nil` and the evaluation of the
54+
`app.status.operationState.phase` expression would fail. The `app.status?.operationState.phase` expression is equivalent to
55+
`app.status.operationState != nil ? app.status.operationState.phase : nil`.
56+
57+
4658
## Avoid Sending Same Notification Too Often
4759

4860
In some cases, the trigger condition might be "flapping". The example below illustrates the problem.
@@ -60,14 +72,14 @@ data:
6072
# Optional 'oncePer' property ensure that notification is sent only once per specified field value
6173
# E.g. following is triggered once per sync revision
6274
trigger.on-deployed: |
63-
when: app.status.operationState.phase in ['Succeeded'] and app.status.health.status == 'Healthy'
75+
when: app.status?.operationState.phase in ['Succeeded'] and app.status.health.status == 'Healthy'
6476
oncePer: app.status.sync.revision
6577
send: [app-sync-succeeded]
6678
```
6779

6880
**Mono Repo Usage**
6981

70-
When one repo is used to sync multiple applications, the `oncePer: app.status.sync.revision` field will trigger a notification for each commit. For mono repos, the better approach will be using `oncePer: app.status.operationState.syncResult.revision` statement. This way a notification will be sent only for a particular Application's revision.
82+
When one repo is used to sync multiple applications, the `oncePer: app.status.sync.revision` field will trigger a notification for each commit. For mono repos, the better approach will be using `oncePer: app.status?.operationState.syncResult.revision` statement. This way a notification will be sent only for a particular Application's revision.
7183

7284
### oncePer
7385

@@ -122,7 +134,7 @@ Triggers have access to the set of built-in functions.
122134
Example:
123135

124136
```yaml
125-
when: time.Now().Sub(time.Parse(app.status.operationState.startedAt)).Minutes() >= 5
137+
when: time.Now().Sub(time.Parse(app.status?.operationState.startedAt)).Minutes() >= 5
126138
```
127139

128140
{!docs/operator-manual/notifications/functions.md!}

0 commit comments

Comments
 (0)