From 69e34ffa40131063e936d9831af20e9cc8b1801d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Jos=C3=A9=20Martos?= Date: Wed, 21 Dec 2022 16:41:59 +0100 Subject: [PATCH] [bitnami/argo-cd] Add applicationSet deployment to the chart (#13723) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [bitnami/argo-cd] Add applicationSet deployment to the chart Signed-off-by: jotamartos * [bitnami/argo-cd] Rebase main Signed-off-by: jotamartos * [bitnami/argo-cd] Update README Signed-off-by: jotamartos * [bitnami/argo-cd] Fix installation issues Signed-off-by: jotamartos * [bitnami/argo-cd] Disable deployment of the applicationSet controller by default Signed-off-by: jotamartos * [bitnami/argo-cd] Apply suggestions Signed-off-by: jotamartos * [bitnami/argo-cd] Update README Signed-off-by: jotamartos * [bitnami/argo-cd] Update tests Signed-off-by: jotamartos * [bitnami/argo-cd] Increase timeout for the validation to succeed Signed-off-by: jotamartos * [bitnami/argo-cd] Apply suggestions Signed-off-by: jotamartos * Update README.md with readme-generator-for-helm Signed-off-by: Bitnami Containers Signed-off-by: jotamartos Signed-off-by: Bitnami Containers Signed-off-by: Juan José Martos Co-authored-by: Bitnami Containers --- .../cypress/integration/argo_cd_spec.js | 2 +- bitnami/argo-cd/Chart.yaml | 2 +- bitnami/argo-cd/README.md | 107 +++++ bitnami/argo-cd/templates/_helpers.tpl | 18 + .../application-controller/deployment.yaml | 4 +- .../application-controller/role.yaml | 2 +- .../templates/applicationset/deployment.yaml | 183 ++++++++ .../applicationset/ingress-webhook.yaml | 64 +++ .../templates/applicationset/metrics-svc.yaml | 53 +++ .../templates/applicationset/role.yaml | 91 ++++ .../templates/applicationset/rolebinding.yaml | 18 + .../applicationset/service-account.yaml | 22 + .../templates/applicationset/service.yaml | 55 +++ .../applicationset/servicemonitor.yaml | 49 ++ bitnami/argo-cd/templates/gpg-keys-cm.yaml | 19 + .../templates/repo-server/deployment.yaml | 4 +- .../argo-cd/templates/repo-server/role.yaml | 3 +- bitnami/argo-cd/templates/server/role.yaml | 3 +- bitnami/argo-cd/values.yaml | 417 ++++++++++++++++++ 19 files changed, 1107 insertions(+), 9 deletions(-) create mode 100644 bitnami/argo-cd/templates/applicationset/deployment.yaml create mode 100644 bitnami/argo-cd/templates/applicationset/ingress-webhook.yaml create mode 100644 bitnami/argo-cd/templates/applicationset/metrics-svc.yaml create mode 100644 bitnami/argo-cd/templates/applicationset/role.yaml create mode 100644 bitnami/argo-cd/templates/applicationset/rolebinding.yaml create mode 100644 bitnami/argo-cd/templates/applicationset/service-account.yaml create mode 100644 bitnami/argo-cd/templates/applicationset/service.yaml create mode 100644 bitnami/argo-cd/templates/applicationset/servicemonitor.yaml create mode 100644 bitnami/argo-cd/templates/gpg-keys-cm.yaml diff --git a/.vib/argo-cd/cypress/cypress/integration/argo_cd_spec.js b/.vib/argo-cd/cypress/cypress/integration/argo_cd_spec.js index 426e6e2137..d0312a6364 100644 --- a/.vib/argo-cd/cypress/cypress/integration/argo_cd_spec.js +++ b/.vib/argo-cd/cypress/cypress/integration/argo_cd_spec.js @@ -55,7 +55,7 @@ it('allows deploying a healthy app for a new project', () => { }); cy.get('i[class*="fa-sync"]').click(); cy.get('[qe-id="application-sync-panel-button-synchronize"]').click(); - cy.contains('Succeeded a few seconds ago'); + cy.contains('Succeeded a few seconds ago', {timeout: 120000}); cy.get('[class*="application-details__status-panel"]').within(() => { cy.get('[title="Healthy"]', {timeout: 60000}); }); diff --git a/bitnami/argo-cd/Chart.yaml b/bitnami/argo-cd/Chart.yaml index c865a1bcf5..4c4120bf84 100644 --- a/bitnami/argo-cd/Chart.yaml +++ b/bitnami/argo-cd/Chart.yaml @@ -30,4 +30,4 @@ sources: - https://github.com/argoproj/argo-cd/ - https://github.com/bitnami/containers/tree/main/bitnami/dex - https://github.com/dexidp/dex -version: 4.3.8 +version: 4.4.0 diff --git a/bitnami/argo-cd/README.md b/bitnami/argo-cd/README.md index acca97671c..2dc0a9a41c 100644 --- a/bitnami/argo-cd/README.md +++ b/bitnami/argo-cd/README.md @@ -203,6 +203,112 @@ The command removes all the Kubernetes components associated with the chart and | `controller.initContainers` | Add additional init containers to the Argo CD pod(s) | `[]` | +### Argo CD ApplicationSet controller parameters + +| Name | Description | Value | +| ------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------- | --------------- | +| `applicationSet.enabled` | Enable ApplicationSet controller | `false` | +| `applicationSet.replicaCount` | The number of ApplicationSet controller pods to run | `1` | +| `applicationSet.command` | Override default container command (useful when using custom images) | `[]` | +| `applicationSet.defaultArgs.enableLeaderElection` | Enable leader election | `false` | +| `applicationSet.defaultArgs.policy` | Default policy | `sync` | +| `applicationSet.defaultArgs.debug` | Enable debug mode | `false` | +| `applicationSet.defaultArgs.dryRun` | Enable dry-run mode | `false` | +| `applicationSet.args` | Override default container args (useful when using custom images). Overrides the defaultArgs. | `[]` | +| `applicationSet.extraArgs` | Add extra arguments to the default arguments for the Argo CD applicationSet controller | `[]` | +| `applicationSet.logFormat` | Format for the Argo CD applicationSet controller logs. Options: [text, json] | `text` | +| `applicationSet.logLevel` | Log level for the Argo CD applicationSet controller | `info` | +| `applicationSet.containerPorts.metrics` | Argo CD applicationSet controller metrics port number | `8085` | +| `applicationSet.containerPorts.probe` | Argo CD applicationSet controller probe port number | `8081` | +| `applicationSet.metrics.enabled` | Enable Argo CD applicationSet controller metrics | `false` | +| `applicationSet.metrics.service.type` | Argo CD applicationSet controller service type | `ClusterIP` | +| `applicationSet.metrics.service.port` | Argo CD applicationSet controller metrics service port | `8085` | +| `applicationSet.metrics.service.nodePort` | Node port for the applicationSet controller service | `""` | +| `applicationSet.metrics.service.clusterIP` | Argo CD applicationSet controller metrics service Cluster IP | `""` | +| `applicationSet.metrics.service.loadBalancerIP` | Argo CD applicationSet controller service Load Balancer IP | `""` | +| `applicationSet.metrics.service.loadBalancerSourceRanges` | Argo CD applicationSet controller service Load Balancer sources | `[]` | +| `applicationSet.metrics.service.externalTrafficPolicy` | Argo CD applicationSet controller service external traffic policy | `Cluster` | +| `applicationSet.metrics.service.annotations` | Additional custom annotations for Argo CD applicationSet controller service | `{}` | +| `applicationSet.metrics.service.sessionAffinity` | Session Affinity for Kubernetes service, can be "None" or "ClientIP" | `None` | +| `applicationSet.metrics.service.sessionAffinityConfig` | Additional settings for the sessionAffinity | `{}` | +| `applicationSet.metrics.serviceMonitor.enabled` | Create ServiceMonitor Resource for scraping metrics using PrometheusOperator | `false` | +| `applicationSet.metrics.serviceMonitor.namespace` | Namespace which Prometheus is running in | `""` | +| `applicationSet.metrics.serviceMonitor.jobLabel` | The name of the label on the target service to use as the job name in prometheus. | `""` | +| `applicationSet.metrics.serviceMonitor.interval` | Interval at which metrics should be scraped | `30s` | +| `applicationSet.metrics.serviceMonitor.scrapeTimeout` | Timeout after which the scrape is ended | `10s` | +| `applicationSet.metrics.serviceMonitor.relabelings` | RelabelConfigs to apply to samples before scraping | `[]` | +| `applicationSet.metrics.serviceMonitor.metricRelabelings` | MetricRelabelConfigs to apply to samples before ingestion | `[]` | +| `applicationSet.metrics.serviceMonitor.selector` | ServiceMonitor selector labels | `{}` | +| `applicationSet.metrics.serviceMonitor.honorLabels` | honorLabels chooses the metric's labels on collisions with target labels | `false` | +| `applicationSet.service.type` | Argo CD applicationSet controller service type | `ClusterIP` | +| `applicationSet.service.port` | Argo CD applicationSet controller service port | `7000` | +| `applicationSet.service.nodePort` | Node port for Argo CD applicationSet controller service | `""` | +| `applicationSet.service.clusterIP` | Argo CD applicationSet controller service Cluster IP | `""` | +| `applicationSet.service.loadBalancerIP` | Argo CD applicationSet controller service Load Balancer IP | `""` | +| `applicationSet.service.loadBalancerSourceRanges` | Argo CD applicationSet controller service Load Balancer sources | `[]` | +| `applicationSet.service.externalTrafficPolicy` | Argo CD applicationSet controller service external traffic policy | `Cluster` | +| `applicationSet.service.annotations` | Additional custom annotations for Argo CD applicationSet controller service | `{}` | +| `applicationSet.service.extraPorts` | Extra ports to expose (normally used with the `sidecar` value) | `[]` | +| `applicationSet.service.sessionAffinity` | Session Affinity for Kubernetes service, can be "None" or "ClientIP" | `None` | +| `applicationSet.service.sessionAffinityConfig` | Additional settings for the sessionAffinity | `{}` | +| `applicationSet.serviceAccount.create` | Specifies whether a ServiceAccount should be created | `true` | +| `applicationSet.serviceAccount.name` | The name of the ServiceAccount to use. | `""` | +| `applicationSet.serviceAccount.automountServiceAccountToken` | Automount service account token for the applicationSet controller service account | `true` | +| `applicationSet.serviceAccount.annotations` | Annotations for service account. Evaluated as a template. Only used if `create` is `true`. | `{}` | +| `applicationSet.podAffinityPreset` | Pod affinity preset. Ignored if `applicationSet.affinity` is set. Allowed values: `soft` or `hard` | `""` | +| `applicationSet.podAntiAffinityPreset` | Pod anti-affinity preset. Ignored if `applicationSet.affinity` is set. Allowed values: `soft` or `hard` | `soft` | +| `applicationSet.nodeAffinityPreset.type` | Node affinity preset type. Ignored if `applicationSet.affinity` is set. Allowed values: `soft` or `hard` | `""` | +| `applicationSet.nodeAffinityPreset.key` | Node label key to match. Ignored if `applicationSet.affinity` is set | `""` | +| `applicationSet.nodeAffinityPreset.values` | Node label values to match. Ignored if `applicationSet.affinity` is set | `[]` | +| `applicationSet.affinity` | Affinity for Argo CD applicationSet controller pods assignment | `{}` | +| `applicationSet.podAnnotations` | Annotations for Argo CD applicationSet controller pods | `{}` | +| `applicationSet.podLabels` | Extra labels for Argo CD applicationSet controller pods | `{}` | +| `applicationSet.containerSecurityContext.enabled` | Enabled Argo CD applicationSet controller containers' Security Context | `true` | +| `applicationSet.containerSecurityContext.runAsUser` | Set Argo CD applicationSet controller containers' Security Context runAsUser | `1001` | +| `applicationSet.containerSecurityContext.allowPrivilegeEscalation` | Set Argo CD applicationSet controller containers' Security Context allowPrivilegeEscalation | `false` | +| `applicationSet.containerSecurityContext.capabilities.drop` | Set Argo CD applicationSet controller containers' Security Context capabilities to be dropped | `["all"]` | +| `applicationSet.containerSecurityContext.readOnlyRootFilesystem` | Set Argo CD applicationSet controller containers' Security Context readOnlyRootFilesystem | `false` | +| `applicationSet.containerSecurityContext.runAsNonRoot` | Set Argo CD applicationSet controller container's Security Context runAsNonRoot | `true` | +| `applicationSet.livenessProbe.enabled` | Enable livenessProbe on Argo CD applicationSet controller nodes | `true` | +| `applicationSet.livenessProbe.initialDelaySeconds` | Initial delay seconds for livenessProbe | `10` | +| `applicationSet.livenessProbe.periodSeconds` | Period seconds for livenessProbe | `10` | +| `applicationSet.livenessProbe.timeoutSeconds` | Timeout seconds for livenessProbe | `1` | +| `applicationSet.livenessProbe.failureThreshold` | Failure threshold for livenessProbe | `3` | +| `applicationSet.livenessProbe.successThreshold` | Success threshold for livenessProbe | `1` | +| `applicationSet.readinessProbe.enabled` | Enable readinessProbe on Argo CD applicationSet controller nodes | `true` | +| `applicationSet.readinessProbe.initialDelaySeconds` | Initial delay seconds for readinessProbe | `10` | +| `applicationSet.readinessProbe.periodSeconds` | Period seconds for readinessProbe | `10` | +| `applicationSet.readinessProbe.timeoutSeconds` | Timeout seconds for readinessProbe | `1` | +| `applicationSet.readinessProbe.failureThreshold` | Failure threshold for readinessProbe | `3` | +| `applicationSet.readinessProbe.successThreshold` | Success threshold for readinessProbe | `1` | +| `applicationSet.customLivenessProbe` | Custom livenessProbe that overrides the default one | `{}` | +| `applicationSet.customReadinessProbe` | Custom readinessProbe that overrides the default one | `{}` | +| `applicationSet.resources.limits` | The resources limits for the Argo CD applicationSet controller containers | `{}` | +| `applicationSet.resources.requests` | The requested resources for the Argo CD applicationSet controller containers | `{}` | +| `applicationSet.podSecurityContext.enabled` | Enabled Argo CD applicationSet controller pods' Security Context | `true` | +| `applicationSet.podSecurityContext.fsGroup` | Set Argo CD applicationSet controller pod's Security Context fsGroup | `1001` | +| `applicationSet.nodeSelector` | Node labels for Argo CD applicationSet controller pods assignment | `{}` | +| `applicationSet.tolerations` | Tolerations for Argo CD applicationSet controller pods assignment | `[]` | +| `applicationSet.updateStrategy.type` | Argo CD applicationSet controller statefulset strategy type | `RollingUpdate` | +| `applicationSet.priorityClassName` | Argo CD applicationSet controller pods' priorityClassName | `""` | +| `applicationSet.extraVolumes` | Optionally specify extra list of additional volumes for the Argo CD applicationSet controller pod(s) | `[]` | +| `applicationSet.extraVolumeMounts` | Optionally specify extra list of additional volumeMounts for the Argo CD applicationSet controller container(s) | `[]` | +| `applicationSet.extraEnvVars` | Array with extra environment variables to add to Argo CD applicationSet controller nodes | `[]` | +| `applicationSet.extraEnvVarsCM` | Name of existing ConfigMap containing extra env vars for Argo CD applicationSet controller nodes | `""` | +| `applicationSet.extraEnvVarsSecret` | Name of existing Secret containing extra env vars for Argo CD applicationSet controller nodes | `""` | +| `applicationSet.webhook.ingress.enabled` | Enable an ingress resource for Webhooks | `false` | +| `applicationSet.webhook.ingress.annotations` | Additional ingress annotations | `{}` | +| `applicationSet.webhook.ingress.labels` | Additional ingress labels | `{}` | +| `applicationSet.webhook.ingress.ingressClassName` | Defines which ingress controller will implement the resource | `""` | +| `applicationSet.webhook.ingress.hostname` | Ingress hostname for the Argo CD applicationSet ingress | `""` | +| `applicationSet.webhook.ingress.path` | Argo CD applicationSet ingress path | `/api/webhook` | +| `applicationSet.webhook.ingress.pathType` | Ingress path type. One of `Exact`, `Prefix` or `ImplementationSpecific` | `Prefix` | +| `applicationSet.webhook.ingress.extraHosts` | Extra hosts array for the Argo CD applicationSet ingress | `[]` | +| `applicationSet.webhook.ingress.extraPaths` | Extra paths for the Argo CD applicationSet ingress | `[]` | +| `applicationSet.webhook.ingress.extraTls` | Extra TLS configuration for the Argo CD applicationSet ingress | `[]` | +| `applicationSet.webhook.ingress.tls` | Ingress TLS configuration | `[]` | + + ### Argo CD server Parameters | Name | Description | Value | @@ -581,6 +687,7 @@ The command removes all the Kubernetes components associated with the chart and | `config.styles` | Custom CSS styles | `""` | | `config.existingStylesConfigmap` | Use an existing styles configmap | `""` | | `config.tlsCerts` | TLS certificates used to verify the authenticity of the repository servers | `{}` | +| `config.gpgKeys` | GnuPG public keys to add to the keyring | `{}` | | `config.secret.create` | Whether to create or not the secret | `true` | | `config.secret.annotations` | General secret extra annotations | `{}` | | `config.secret.githubSecret` | GitHub secret to configure webhooks | `""` | diff --git a/bitnami/argo-cd/templates/_helpers.tpl b/bitnami/argo-cd/templates/_helpers.tpl index 02a27a003c..ecd46ddf50 100644 --- a/bitnami/argo-cd/templates/_helpers.tpl +++ b/bitnami/argo-cd/templates/_helpers.tpl @@ -40,6 +40,13 @@ Return the proper service name for Argo CD controller adding the working namespa {{- printf "%s-app-controller" (include "common.names.fullname.namespace" .) | trunc 63 | trimSuffix "-" }} {{- end -}} +{{/* +Return the proper service name for Argo CD applicationSet controller +*/}} +{{- define "argocd.applicationSet" -}} + {{- printf "%s-applicationset-controller" (include "common.names.fullname" .) | trunc 63 | trimSuffix "-" }} +{{- end -}} + {{/* Return the proper service name for Argo CD server */}} @@ -110,6 +117,17 @@ Create the name of the service account to use for the Argo CD application contro {{- end -}} {{- end -}} +{{/* +Create the name of the service account to use for the Argo CD applicationSet controller +*/}} +{{- define "argocd.applicationSet.serviceAccountName" -}} +{{- if .Values.applicationSet.serviceAccount.create -}} + {{ default (printf "%s-applicationset-controller" (include "common.names.fullname" .)) .Values.applicationSet.serviceAccount.name | trunc 63 | trimSuffix "-" }} +{{- else -}} + {{ default "default" .Values.applicationSet.serviceAccount.name }} +{{- end -}} +{{- end -}} + {{/* Create the name of the service account to use for the Argo CD repo server */}} diff --git a/bitnami/argo-cd/templates/application-controller/deployment.yaml b/bitnami/argo-cd/templates/application-controller/deployment.yaml index aa90fe190c..2c69bfc934 100644 --- a/bitnami/argo-cd/templates/application-controller/deployment.yaml +++ b/bitnami/argo-cd/templates/application-controller/deployment.yaml @@ -144,9 +144,9 @@ spec: - --repo-server - {{ include "argocd.repo-server" . }}:{{ .Values.repoServer.service.port }} - --logformat - - {{ .Values.controller.logFormat }} + - {{ .Values.controller.logFormat | quote }} - --loglevel - - {{ .Values.controller.logLevel }} + - {{ .Values.controller.logLevel | quote }} # TODO(miguelaeh): Test the chart using redis sentinel enabled: https://github.com/argoproj/argo-cd/blob/2a410187565e15633b6f2a8c8d8da22cf02b257d/util/cache/cache.go#L40 - --redis - {{ include "argocd.redisHost" . }}:{{ include "argocd.redisPort" . }} diff --git a/bitnami/argo-cd/templates/application-controller/role.yaml b/bitnami/argo-cd/templates/application-controller/role.yaml index a133e2b444..3d859a9d1d 100644 --- a/bitnami/argo-cd/templates/application-controller/role.yaml +++ b/bitnami/argo-cd/templates/application-controller/role.yaml @@ -38,4 +38,4 @@ rules: verbs: - create - list -{{- end }} \ No newline at end of file +{{- end }} diff --git a/bitnami/argo-cd/templates/applicationset/deployment.yaml b/bitnami/argo-cd/templates/applicationset/deployment.yaml new file mode 100644 index 0000000000..826ad0cd43 --- /dev/null +++ b/bitnami/argo-cd/templates/applicationset/deployment.yaml @@ -0,0 +1,183 @@ +{{- if .Values.applicationSet.enabled }} +apiVersion: {{ include "common.capabilities.deployment.apiVersion" . }} +kind: Deployment +metadata: + name: {{ include "argocd.applicationSet" . }} + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "common.labels.standard" . | nindent 4 }} + app.kubernetes.io/component: applicationSet + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + {{- if .Values.commonAnnotations }} + annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} +spec: + replicas: {{ .Values.applicationSet.replicaCount }} + {{- if .Values.applicationSet.updateStrategy }} + strategy: {{- toYaml .Values.applicationSet.updateStrategy | nindent 4 }} + {{- end }} + selector: + matchLabels: {{- include "common.labels.matchLabels" . | nindent 6 }} + app.kubernetes.io/component: applicationSet + template: + metadata: + {{- if .Values.applicationSet.podAnnotations }} + annotations: {{- include "common.tplvalues.render" (dict "value" .Values.applicationSet.podAnnotations "context" $) | nindent 8 }} + {{- end }} + labels: {{- include "common.labels.standard" . | nindent 8 }} + app.kubernetes.io/component: applicationSet + {{- if .Values.applicationSet.podLabels }} + {{- include "common.tplvalues.render" (dict "value" .Values.applicationSet.podLabels "context" $) | nindent 8 }} + {{- end }} + spec: + serviceAccountName: {{ include "argocd.applicationSet.serviceAccountName" . }} + {{- include "argocd.imagePullSecrets" . | nindent 6 }} + {{- if .Values.applicationSet.nodeSelector }} + nodeSelector: {{- include "common.tplvalues.render" ( dict "value" .Values.applicationSet.nodeSelector "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.applicationSet.affinity }} + affinity: {{- include "common.tplvalues.render" ( dict "value" .Values.applicationSet.affinity "context" $) | nindent 8 }} + {{- else }} + affinity: + podAffinity: {{- include "common.affinities.pods" (dict "type" .Values.applicationSet.podAffinityPreset "component" "applicationSet" "context" $) | nindent 10 }} + podAntiAffinity: {{- include "common.affinities.pods" (dict "type" .Values.applicationSet.podAntiAffinityPreset "component" "applicationSet" "context" $) | nindent 10 }} + nodeAffinity: {{- include "common.affinities.nodes" (dict "type" .Values.applicationSet.nodeAffinityPreset.type "key" .Values.applicationSet.nodeAffinityPreset.key "values" .Values.applicationSet.nodeAffinityPreset.values) | nindent 10 }} + {{- end }} + {{- if .Values.applicationSet.tolerations }} + tolerations: {{- include "common.tplvalues.render" (dict "value" .Values.applicationSet.tolerations "context" .) | nindent 8 }} + {{- end }} + {{- if .Values.applicationSet.priorityClassName }} + priorityClassName: {{ .Values.applicationSet.priorityClassName | quote }} + {{- end }} + {{- if .Values.applicationSet.podSecurityContext.enabled }} + securityContext: {{- omit .Values.applicationSet.podSecurityContext "enabled" | toYaml | nindent 8 }} + {{- end }} + containers: + - name: applicationset-controller + image: {{ include "argocd.image" . }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + {{- if .Values.applicationSet.command }} + command: {{- include "common.tplvalues.render" (dict "value" .Values.applicationSet.command "context" $) | nindent 12 }} + {{- end }} + {{- if .Values.applicationSet.args }} + args: {{- include "common.tplvalues.render" (dict "value" .Values.applicationSet.args "context" $) | nindent 12 }} + {{- else }} + args: + - argocd-applicationset-controller + - --logformat + - {{ .Values.applicationSet.logFormat | quote }} + - --loglevel + - {{ .Values.applicationSet.logLevel | quote }} + - --metrics-addr + - ":{{ .Values.applicationSet.containerPorts.metrics }}" + - --probe-addr + - ":{{ .Values.applicationSet.containerPorts.probe }}" + {{- if or (gt ( .Values.applicationSet.replicaCount | int64) 1) .Values.applicationSet.defaultArgs.enableLeaderElection }} + - --enable-leader-election=true + {{- end }} + - --argocd-repo-server + - {{ include "argocd.repo-server" . }}:{{ .Values.repoServer.service.port }} + - --policy + - {{ .Values.applicationSet.defaultArgs.policy | quote }} + - --debug + - {{ .Values.applicationSet.defaultArgs.debug | quote }} + - --dry-run + - {{ .Values.applicationSet.defaultArgs.dryRun | quote }} + {{- if .Values.applicationSet.extraArgs }} + {{- include "common.tplvalues.render" (dict "value" .Values.applicationSet.extraArgs "context" $) | nindent 12 }} + {{- end }} + {{- end }} + env: + {{- if .Values.applicationSet.extraEnvVars }} + {{- include "common.tplvalues.render" (dict "value" .Values.applicationSet.extraEnvVars "context" $) | nindent 12 }} + {{- end }} + envFrom: + {{- if .Values.applicationSet.extraEnvVarsCM }} + - configMapRef: + name: {{ include "common.tplvalues.render" (dict "value" .Values.applicationSet.extraEnvVarsCM "context" $) }} + {{- end }} + {{- if .Values.applicationSet.extraEnvVarsSecret }} + - secretRef: + name: {{ include "common.tplvalues.render" (dict "value" .Values.applicationSet.extraEnvVarsSecret "context" $) }} + {{- end }} + ports: + - name: metrics + containerPort: {{ .Values.applicationSet.containerPorts.metrics }} + protocol: TCP + - name: probe + containerPort: {{ .Values.applicationSet.containerPorts.probe }} + protocol: TCP + - name: webhook + containerPort: 7000 + protocol: TCP + {{- if .Values.applicationSet.customLivenessProbe }} + livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.applicationSet.customLivenessProbe "context" $) | nindent 12 }} + {{- else if .Values.applicationSet.livenessProbe.enabled }} + livenessProbe: + tcpSocket: + port: probe + initialDelaySeconds: {{ .Values.applicationSet.livenessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.applicationSet.livenessProbe.periodSeconds }} + timeoutSeconds: {{ .Values.applicationSet.livenessProbe.timeoutSeconds }} + successThreshold: {{ .Values.applicationSet.livenessProbe.successThreshold }} + failureThreshold: {{ .Values.applicationSet.livenessProbe.failureThreshold }} + {{- end }} + {{- if .Values.applicationSet.customReadinessProbe }} + readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.applicationSet.customReadinessProbe "context" $) | nindent 12 }} + {{- else if .Values.applicationSet.readinessProbe.enabled }} + readinessProbe: + tcpSocket: + port: probe + initialDelaySeconds: {{ .Values.applicationSet.readinessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.applicationSet.readinessProbe.periodSeconds }} + timeoutSeconds: {{ .Values.applicationSet.readinessProbe.timeoutSeconds }} + successThreshold: {{ .Values.applicationSet.readinessProbe.successThreshold }} + failureThreshold: {{ .Values.applicationSet.readinessProbe.failureThreshold }} + {{- end }} + {{- if .Values.applicationSet.resources }} + resources: {{- toYaml .Values.applicationSet.resources | nindent 12 }} + {{- end }} + {{- if .Values.applicationSet.containerSecurityContext.enabled }} + securityContext: {{- omit .Values.applicationSet.containerSecurityContext "enabled" | toYaml | nindent 12 }} + {{- end }} + volumeMounts: + - mountPath: /app/config/ssh + name: ssh-known-hosts + {{- if .Values.config.tlsCerts }} + - mountPath: /app/config/tls + name: tls-certs + {{- end }} + {{- if .Values.config.gpgKeys }} + - mountPath: /app/config/gpg/source + name: gpg-keys + {{- end }} + - mountPath: /app/config/gpg/keys + name: gpg-keyring + - mountPath: /tmp + name: tmp + {{- if .Values.applicationSet.extraVolumeMounts }} + {{- include "common.tplvalues.render" (dict "value" .Values.applicationSet.extraVolumeMounts "context" $) | nindent 12 }} + {{- end }} + volumes: + - name: ssh-known-hosts + configMap: + name: argocd-ssh-known-hosts-cm + {{- if .Values.config.tlsCerts }} + - name: tls-certs + configMap: + name: argocd-tls-certs-cm + {{- end }} + {{- if .Values.config.gpgKeys }} + - name: gpg-keys + configMap: + name: argocd-gpg-keys-cm + {{- end }} + - name: gpg-keyring + emptyDir: {} + - name: tmp + emptyDir: {} + {{- if .Values.applicationSet.extraVolumes }} + {{- include "common.tplvalues.render" (dict "value" .Values.applicationSet.extraVolumes "context" $) | nindent 8 }} + {{- end }} +{{- end }} diff --git a/bitnami/argo-cd/templates/applicationset/ingress-webhook.yaml b/bitnami/argo-cd/templates/applicationset/ingress-webhook.yaml new file mode 100644 index 0000000000..ffe5a011b8 --- /dev/null +++ b/bitnami/argo-cd/templates/applicationset/ingress-webhook.yaml @@ -0,0 +1,64 @@ +{{- if and .Values.applicationSet.enabled .Values.applicationSet.webhook.ingress.enabled -}} +apiVersion: {{ include "common.capabilities.webhook.ingress.apiVersion" . }} +kind: Ingress +metadata: + name: {{ include "argocd.applicationSet" . }} + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "common.labels.standard" . | nindent 4 }} + app.kubernetes.io/component: applicationSet + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + {{- if .Values.applicationSet.webhook.ingress.labels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.applicationSet.webhook.ingress.labels "context" $ ) | nindent 4 }} + {{- end }} + {{- if or .Values.applicationSet.webhook.ingress.annotations .Values.commonAnnotations .Values.applicationSet.webhook.ingress.certManager }} + annotations: + {{- if .Values.applicationSet.webhook.ingress.certManager }} + kubernetes.io/tls-acme: "true" + {{- end }} + {{- if .Values.applicationSet.webhook.ingress.annotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.applicationSet.webhook.ingress.annotations "context" $) | nindent 4 }} + {{- end }} + {{- if .Values.commonAnnotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} + {{- end }} +spec: + {{- if and .Values.applicationSet.webhook.ingress.ingressClassName (eq "true" (include "common.webhook.ingress.supportsIngressClassname" .)) }} + ingressClassName: {{ .Values.applicationSet.webhook.ingress.ingressClassName | quote }} + {{- end }} + rules: + {{- if .Values.applicationSet.webhook.ingress.hostname }} + - host: {{ .Values.applicationSet.webhook.ingress.hostname }} + http: + paths: + {{- if .Values.applicationSet.webhook.ingress.extraPaths }} + {{- toYaml .Values.applicationSet.webhook.ingress.extraPaths | nindent 10 }} + {{- end }} + - path: {{ .Values.applicationSet.webhook.ingress.path }} + {{- if eq "true" (include "common.ingress.supportsPathType" .) }} + pathType: {{ .Values.applicationSet.webhook.ingress.pathType }} + {{- end }} + backend: {{- include "common.ingress.backend" (dict "serviceName" (include "argocd.server" .) "servicePort" (ternary "https" "http" .Values.applicationSet.webhook.ingress.tls) "context" $) | nindent 14 }} + {{- end }} + {{- range .Values.applicationSet.webhook.ingress.extraHosts }} + - host: {{ .name | quote }} + http: + paths: + - path: {{ default "/" .path }} + {{- if eq "true" (include "common.ingress.supportsPathType" $) }} + pathType: {{ default "ImplementationSpecific" .pathType }} + {{- end }} + backend: {{- include "common.ingress.backend" (dict "serviceName" (include "argocd.server" $) "servicePort" (ternary "https" "http" $.Values.applicationSet.webhook.ingress.tls) "context" $) | nindent 14 }} + {{- end }} + tls: + {{- if .Values.applicationSet.webhook.ingress.tls }} + - hosts: + - {{ .Values.applicationSet.webhook.ingress.hostname }} + secretName: {{ printf "%s-tls" .Values.applicationSet.webhook.ingress.hostname }} + {{- end }} + {{- if .Values.applicationSet.webhook.ingress.extraTls }} + {{- include "common.tplvalues.render" ( dict "value" .Values.applicationSet.webhook.ingress.extraTls "context" $ ) | nindent 4 }} + {{- end }} +{{- end -}} diff --git a/bitnami/argo-cd/templates/applicationset/metrics-svc.yaml b/bitnami/argo-cd/templates/applicationset/metrics-svc.yaml new file mode 100644 index 0000000000..4237147b74 --- /dev/null +++ b/bitnami/argo-cd/templates/applicationset/metrics-svc.yaml @@ -0,0 +1,53 @@ +{{- if and .Values.applicationSet.enabled .Values.applicationSet.metrics.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: {{ include "argocd.applicationSet" . }}-metrics + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "common.labels.standard" . | nindent 4 }} + app.kubernetes.io/component: metrics + app.kubernetes.io/part-of: applicationSet + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + {{- with .Values.applicationSet.metrics.service.annotations }} + annotations: + {{- if .Values.commonAnnotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} + {{- if .Values.applicationSet.metrics.service.annotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.applicationSet.metrics.service.annotations "context" $ ) | nindent 4 }} + {{- end }} + {{- end }} +spec: + type: {{ .Values.applicationSet.metrics.service.type }} + {{- if and .Values.applicationSet.metrics.service.clusterIP (eq .Values.applicationSet.metrics.service.type "ClusterIP") }} + clusterIP: {{ .Values.applicationSet.metrics.service.clusterIP }} + {{- end }} + {{- if (or (eq .Values.applicationSet.metrics.service.type "LoadBalancer") (eq .Values.applicationSet.metrics.service.type "NodePort")) }} + externalTrafficPolicy: {{ .Values.applicationSet.metrics.service.externalTrafficPolicy | quote }} + {{- end }} + {{- if eq .Values.applicationSet.metrics.service.type "LoadBalancer" }} + loadBalancerSourceRanges: {{ .Values.applicationSet.metrics.service.loadBalancerSourceRanges }} + {{- end }} + {{- if (and (eq .Values.applicationSet.metrics.service.type "LoadBalancer") (not (empty .Values.applicationSet.metrics.service.loadBalancerIP))) }} + loadBalancerIP: {{ .Values.applicationSet.metrics.service.loadBalancerIP }} + {{- end }} + {{- if .Values.applicationSet.metrics.service.sessionAffinity }} + sessionAffinity: {{ .Values.applicationSet.metrics.service.sessionAffinity }} + {{- end }} + {{- if .Values.applicationSet.metrics.service.sessionAffinityConfig }} + sessionAffinityConfig: {{- include "common.tplvalues.render" (dict "value" .Values.applicationSet.metrics.service.sessionAffinityConfig "context" $) | nindent 4 }} + {{- end }} + ports: + - name: http-metrics + port: {{ .Values.applicationSet.metrics.service.port }} + protocol: TCP + {{- if (and (or (eq .Values.applicationSet.service.type "NodePort") (eq .Values.applicationSet.service.type "LoadBalancer")) (not (empty .Values.applicationSet.metrics.service.nodePort))) }} + nodePort: {{ .Values.applicationSet.metrics.service.nodePort }} + {{- else if eq .Values.applicationSet.metrics.service.type "ClusterIP" }} + nodePort: null + {{- end }} + selector: {{- include "common.labels.matchLabels" . | nindent 4 }} + app.kubernetes.io/component: applicationSet +{{- end }} diff --git a/bitnami/argo-cd/templates/applicationset/role.yaml b/bitnami/argo-cd/templates/applicationset/role.yaml new file mode 100644 index 0000000000..6766c58a6c --- /dev/null +++ b/bitnami/argo-cd/templates/applicationset/role.yaml @@ -0,0 +1,91 @@ +{{- if and .Values.rbac.create .Values.applicationSet.enabled }} +kind: Role +apiVersion: {{ include "common.capabilities.rbac.apiVersion" . }} +metadata: + name: {{ include "argocd.applicationSet" . }} + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "common.labels.standard" . | nindent 4 }} + {{- if .Values.commonAnnotations }} + annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} +rules: + - apiGroups: + - argoproj.io + resources: + - applications + - applicationsets + - applicationsets/finalizers + - applicationsets/status + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - argoproj.io + resources: + - applicationsets/status + verbs: + - get + - patch + - update + - apiGroups: + - argoproj.io + resources: + - appprojects + verbs: + - get + - apiGroups: + - "" + resources: + - events + verbs: + - create + - get + - list + - patch + - watch + - apiGroups: + - "" + resources: + - secrets + - configmaps + verbs: + - get + - list + - watch + - apiGroups: + - apps + - extensions + resources: + - deployments + verbs: + - get + - list + - watch + # Leader election + - apiGroups: + - "" + resources: + - configmaps + verbs: + - create + - update + - delete + - patch + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +{{- end }} diff --git a/bitnami/argo-cd/templates/applicationset/rolebinding.yaml b/bitnami/argo-cd/templates/applicationset/rolebinding.yaml new file mode 100644 index 0000000000..92a712b353 --- /dev/null +++ b/bitnami/argo-cd/templates/applicationset/rolebinding.yaml @@ -0,0 +1,18 @@ +{{- if and .Values.applicationSet.enabled .Values.applicationSet.serviceAccount.create .Values.rbac.create }} +kind: RoleBinding +apiVersion: {{ include "common.capabilities.rbac.apiVersion" . }} +metadata: + name: {{ include "argocd.applicationSet" . }} + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "common.labels.standard" . | nindent 4 }} + {{- if .Values.commonAnnotations }} + annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} +subjects: + - kind: ServiceAccount + name: {{ include "argocd.applicationSet.serviceAccountName" . }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: {{ include "argocd.applicationSet" . }} +{{- end }} diff --git a/bitnami/argo-cd/templates/applicationset/service-account.yaml b/bitnami/argo-cd/templates/applicationset/service-account.yaml new file mode 100644 index 0000000000..6eb48a9433 --- /dev/null +++ b/bitnami/argo-cd/templates/applicationset/service-account.yaml @@ -0,0 +1,22 @@ +{{- if and .Values.applicationSet.enabled .Values.rbac.create .Values.applicationSet.serviceAccount.create }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "argocd.applicationSet.serviceAccountName" . }} + namespace: {{ .Release.Namespace | quote }} + {{- if or .Values.applicationSet.serviceAccount.annotations .Values.commonAnnotations }} + labels: {{- include "common.labels.standard" . | nindent 4 }} + app.kubernetes.io/component: applicationSet + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + annotations: + {{- if .Values.commonAnnotations }} + {{- include "common.tplvalues.render" (dict "value" .Values.commonAnnotations "context" $) | nindent 4 }} + {{- end }} + {{- if .Values.applicationSet.serviceAccount.annotations }} + {{- include "common.tplvalues.render" (dict "value" .Values.applicationSet.serviceAccount.annotations "context" $) | nindent 4 }} + {{- end }} + {{- end }} +automountServiceAccountToken: {{ .Values.applicationSet.serviceAccount.automountServiceAccountToken }} +{{- end }} diff --git a/bitnami/argo-cd/templates/applicationset/service.yaml b/bitnami/argo-cd/templates/applicationset/service.yaml new file mode 100644 index 0000000000..57fa840234 --- /dev/null +++ b/bitnami/argo-cd/templates/applicationset/service.yaml @@ -0,0 +1,55 @@ +{{- if .Values.applicationSet.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: {{ include "argocd.applicationSet" . }} + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "common.labels.standard" . | nindent 4 }} + app.kubernetes.io/component: applicationSet + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + {{- if or .Values.commonAnnotations .Values.applicationSet.service.annotations }} + annotations: + {{- if .Values.commonAnnotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} + {{- if .Values.applicationSet.service.annotations }} + {{- include "common.tplvalues.render" ( dict "value" .Values.applicationSet.service.annotations "context" $ ) | nindent 4 }} + {{- end }} + {{- end }} +spec: + type: {{ .Values.applicationSet.service.type }} + {{- if and .Values.applicationSet.service.clusterIP (eq .Values.applicationSet.service.type "ClusterIP") }} + clusterIP: {{ .Values.applicationSet.service.clusterIP }} + {{- end }} + {{- if (or (eq .Values.applicationSet.service.type "LoadBalancer") (eq .Values.applicationSet.service.type "NodePort")) }} + externalTrafficPolicy: {{ .Values.applicationSet.service.externalTrafficPolicy | quote }} + {{- end }} + {{- if eq .Values.applicationSet.service.type "LoadBalancer" }} + loadBalancerSourceRanges: {{ .Values.applicationSet.service.loadBalancerSourceRanges }} + {{- end }} + {{- if (and (eq .Values.applicationSet.service.type "LoadBalancer") (not (empty .Values.applicationSet.service.loadBalancerIP))) }} + loadBalancerIP: {{ .Values.applicationSet.service.loadBalancerIP }} + {{- end }} + {{- if .Values.applicationSet.service.sessionAffinity }} + sessionAffinity: {{ .Values.applicationSet.service.sessionAffinity }} + {{- end }} + {{- if .Values.applicationSet.service.sessionAffinityConfig }} + sessionAffinityConfig: {{- include "common.tplvalues.render" (dict "value" .Values.applicationSet.service.sessionAffinityConfig "context" $) | nindent 4 }} + {{- end }} + ports: + - name: webhook + port: {{ .Values.applicationSet.service.port }} + targetPort: webhook + {{- if (and (or (eq .Values.applicationSet.service.type "NodePort") (eq .Values.applicationSet.service.type "LoadBalancer")) (not (empty .Values.applicationSet.service.nodePort))) }} + nodePort: {{ .Values.applicationSet.service.nodePort }} + {{- else if eq .Values.applicationSet.service.type "ClusterIP" }} + nodePort: null + {{- end }} + {{- if .Values.applicationSet.service.extraPorts }} + {{- include "common.tplvalues.render" (dict "value" .Values.applicationSet.service.extraPorts "context" $) | nindent 4 }} + {{- end }} + selector: {{- include "common.labels.matchLabels" . | nindent 4 }} + app.kubernetes.io/component: applicationSet +{{- end }} diff --git a/bitnami/argo-cd/templates/applicationset/servicemonitor.yaml b/bitnami/argo-cd/templates/applicationset/servicemonitor.yaml new file mode 100644 index 0000000000..f3a065d1fc --- /dev/null +++ b/bitnami/argo-cd/templates/applicationset/servicemonitor.yaml @@ -0,0 +1,49 @@ +{{- if and .Values.applicationSet.enabled .Values.applicationSet.metrics.enabled .Values.applicationSet.metrics.serviceMonitor.enabled }} +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: {{ include "argo-cd.applicationSet" . }} + {{- if .Values.applicationSet.metrics.serviceMonitor.namespace }} + namespace: {{ .Values.applicationSet.metrics.serviceMonitor.namespace | quote }} + {{- else }} + namespace: {{ .Release.Namespace | quote }} + {{- end }} + labels: {{- include "common.labels.standard" . | nindent 4 }} + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" (dict "value" .Values.commonLabels "context" $) | nindent 4 }} + {{- end }} + {{- if .Values.applicationSet.metrics.serviceMonitor.selector }} + {{- include "common.tplvalues.render" (dict "value" .Values.applicationSet.metrics.serviceMonitor.selector "context" $) | nindent 4 }} + {{- end }} + app.kubernetes.io/component: applicationSet + {{- if .Values.commonAnnotations }} + annotations: {{- include "common.tplvalues.render" (dict "value" .Values.commonAnnotations "context" $) | nindent 4 }} + {{- end }} +spec: + endpoints: + - port: http-metrics + path: /metrics + {{- if .Values.applicationSet.metrics.serviceMonitor.interval }} + interval: {{ .Values.applicationSet.metrics.serviceMonitor.interval }} + {{- end }} + {{- if .Values.applicationSet.metrics.serviceMonitor.scrapeTimeout }} + scrapeTimeout: {{ .Values.applicationSet.metrics.serviceMonitor.scrapeTimeout }} + {{- end }} + {{- if .Values.applicationSet.metrics.serviceMonitor.honorLabels }} + honorLabels: {{ .Values.applicationSet.metrics.serviceMonitor.honorLabels }} + {{- end }} + {{- if .Values.applicationSet.metrics.serviceMonitor.metricRelabelings }} + metricRelabelings: {{- include "common.tplvalues.render" ( dict "value" .Values.applicationSet.metrics.serviceMonitor.metricRelabelings "context" $) | nindent 8 }} + {{- end }} + {{- if .Values.applicationSet.metrics.serviceMonitor.relabelings }} + relabelings: {- include "common.tplvalues.render" ( dict "value" .Values.applicationSet.metrics.serviceMonitor.relabelings "context" $) | nindent 8 }} + {{- end }} + namespaceSelector: + matchNames: + - {{ .Release.Namespace }} + selector: + matchLabels: + {{- include "common.labels.matchLabels" . | nindent 6 }} + app.kubernetes.io/component: metrics + app.kubernetes.io/part-of: applicationSet +{{- end }} diff --git a/bitnami/argo-cd/templates/gpg-keys-cm.yaml b/bitnami/argo-cd/templates/gpg-keys-cm.yaml new file mode 100644 index 0000000000..8450f7b5d5 --- /dev/null +++ b/bitnami/argo-cd/templates/gpg-keys-cm.yaml @@ -0,0 +1,19 @@ +{{- if .Values.config.gpgKeys }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: argocd-gpg-keys-cm + namespace: {{ .Release.Namespace | quote }} + labels: {{- include "common.labels.standard" . | nindent 4 }} + {{- if .Values.commonLabels }} + {{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }} + {{- end }} + # Mandatory label + # Ref: https://argoproj.github.io/argo-cd/operator-manual/declarative-setup/#atomic-configuration + app.kubernetes.io/part-of: argocd + {{- if .Values.commonAnnotations }} + annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }} + {{- end }} +data: + {{- include "common.tplvalues.render" (dict "value" .Values.config.gpgKeys "context" $) | nindent 2 }} +{{- end }} diff --git a/bitnami/argo-cd/templates/repo-server/deployment.yaml b/bitnami/argo-cd/templates/repo-server/deployment.yaml index 95c8a9e7ae..ee201f4bc3 100644 --- a/bitnami/argo-cd/templates/repo-server/deployment.yaml +++ b/bitnami/argo-cd/templates/repo-server/deployment.yaml @@ -152,9 +152,9 @@ spec: args: - argocd-repo-server - --logformat - - {{ .Values.repoServer.logFormat }} + - {{ .Values.repoServer.logFormat | quote }} - --loglevel - - {{ .Values.repoServer.logLevel }} + - {{ .Values.repoServer.logLevel | quote }} - --redis - {{ include "argocd.redisHost" . }}:{{ include "argocd.redisPort" . }} {{- if .Values.repoServer.extraArgs }} diff --git a/bitnami/argo-cd/templates/repo-server/role.yaml b/bitnami/argo-cd/templates/repo-server/role.yaml index dc72fc4e2d..5b11a7cacc 100644 --- a/bitnami/argo-cd/templates/repo-server/role.yaml +++ b/bitnami/argo-cd/templates/repo-server/role.yaml @@ -13,8 +13,9 @@ rules: - argoproj.io resources: - applications + - applicationset verbs: - get - list - watch -{{- end }} \ No newline at end of file +{{- end }} diff --git a/bitnami/argo-cd/templates/server/role.yaml b/bitnami/argo-cd/templates/server/role.yaml index 33669dfb5b..06e49f41ca 100644 --- a/bitnami/argo-cd/templates/server/role.yaml +++ b/bitnami/argo-cd/templates/server/role.yaml @@ -26,6 +26,7 @@ rules: - argoproj.io resources: - applications + - applicationsets - appprojects verbs: - create @@ -42,4 +43,4 @@ rules: verbs: - create - list -{{- end }} \ No newline at end of file +{{- end }} diff --git a/bitnami/argo-cd/values.yaml b/bitnami/argo-cd/values.yaml index 3cbd638c26..42bdea5cb9 100644 --- a/bitnami/argo-cd/values.yaml +++ b/bitnami/argo-cd/values.yaml @@ -554,6 +554,413 @@ controller: ## initContainers: [] +## @section Argo CD ApplicationSet controller parameters + +## ApplicationSet controller +## +applicationSet: + ## @param applicationSet.enabled Enable ApplicationSet controller + ## + enabled: false + ## @param applicationSet.replicaCount The number of ApplicationSet controller pods to run + ## + replicaCount: 1 + ## @param applicationSet.command Override default container command (useful when using custom images) + ## + command: [] + ## Arguments that will be used by default for the application controller + ## @param applicationSet.defaultArgs.enableLeaderElection Enable leader election + ## @param applicationSet.defaultArgs.policy Default policy + ## @param applicationSet.defaultArgs.debug Enable debug mode + ## @param applicationSet.defaultArgs.dryRun Enable dry-run mode + ## + defaultArgs: + enableLeaderElection: false + policy: "sync" + debug: "false" + dryRun: "false" + ## @param applicationSet.args Override default container args (useful when using custom images). Overrides the defaultArgs. + ## + args: [] + ## @param applicationSet.extraArgs Add extra arguments to the default arguments for the Argo CD applicationSet controller + ## + extraArgs: [] + ## Argo CD applicationSet controller log format: text|json + ## @param applicationSet.logFormat Format for the Argo CD applicationSet controller logs. Options: [text, json] + ## + logFormat: text + ## Argo CD applicationSet controller log level + ## @param applicationSet.logLevel Log level for the Argo CD applicationSet controller + ## + logLevel: info + ## Argo CD applicationSet controller ports + ## @param applicationSet.containerPorts.metrics Argo CD applicationSet controller metrics port number + ## @param applicationSet.containerPorts.probe Argo CD applicationSet controller probe port number + ## + containerPorts: + metrics: 8085 + probe: 8081 + ## Metrics configuration for Argo CD applicationSet controller + ## + metrics: + ## @param applicationSet.metrics.enabled Enable Argo CD applicationSet controller metrics + ## + enabled: false + service: + ## @param applicationSet.metrics.service.type Argo CD applicationSet controller service type + ## + type: ClusterIP + ## @param applicationSet.metrics.service.port Argo CD applicationSet controller metrics service port + ## + port: 8085 + ## Node ports to expose + ## @param applicationSet.metrics.service.nodePort Node port for the applicationSet controller service + ## NOTE: choose port between <30000-32767> + ## + nodePort: "" + ## @param applicationSet.metrics.service.clusterIP Argo CD applicationSet controller metrics service Cluster IP + ## e.g.: + ## clusterIP: None + ## + clusterIP: "" + ## @param applicationSet.metrics.service.loadBalancerIP Argo CD applicationSet controller service Load Balancer IP + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer + ## + loadBalancerIP: "" + ## @param applicationSet.metrics.service.loadBalancerSourceRanges Argo CD applicationSet controller service Load Balancer sources + ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service + ## e.g: + ## loadBalancerSourceRanges: + ## - 10.10.10.0/24 + ## + loadBalancerSourceRanges: [] + ## @param applicationSet.metrics.service.externalTrafficPolicy Argo CD applicationSet controller service external traffic policy + ## ref https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip + ## + externalTrafficPolicy: Cluster + ## @param applicationSet.metrics.service.annotations Additional custom annotations for Argo CD applicationSet controller service + ## + annotations: {} + ## @param applicationSet.metrics.service.sessionAffinity Session Affinity for Kubernetes service, can be "None" or "ClientIP" + ## If "ClientIP", consecutive client requests will be directed to the same Pod + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies + ## + sessionAffinity: None + ## @param applicationSet.metrics.service.sessionAffinityConfig Additional settings for the sessionAffinity + ## sessionAffinityConfig: + ## clientIP: + ## timeoutSeconds: 300 + ## + sessionAffinityConfig: {} + ## Argo CD applicationSet controller metrics service monitor configuration + ## + serviceMonitor: + ## @param applicationSet.metrics.serviceMonitor.enabled Create ServiceMonitor Resource for scraping metrics using PrometheusOperator + ## + enabled: false + ## @param applicationSet.metrics.serviceMonitor.namespace Namespace which Prometheus is running in + ## e.g: + ## namespace: monitoring + ## + namespace: "" + ## @param applicationSet.metrics.serviceMonitor.jobLabel The name of the label on the target service to use as the job name in prometheus. + ## + jobLabel: "" + ## @param applicationSet.metrics.serviceMonitor.interval Interval at which metrics should be scraped + ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#endpoint + ## + interval: 30s + ## @param applicationSet.metrics.serviceMonitor.scrapeTimeout Timeout after which the scrape is ended + ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#endpoint + ## + scrapeTimeout: 10s + ## @param applicationSet.metrics.serviceMonitor.relabelings RelabelConfigs to apply to samples before scraping + ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#relabelconfig + ## + relabelings: [] + ## @param applicationSet.metrics.serviceMonitor.metricRelabelings MetricRelabelConfigs to apply to samples before ingestion + ## ref: https://github.com/coreos/prometheus-operator/blob/master/Documentation/api.md#relabelconfig + ## + metricRelabelings: [] + ## @param applicationSet.metrics.serviceMonitor.selector ServiceMonitor selector labels + ## ref: https://github.com/bitnami/charts/tree/main/bitnami/prometheus-operator#prometheus-configuration + ## + ## selector: + ## prometheus: my-prometheus + ## + selector: {} + ## @param applicationSet.metrics.serviceMonitor.honorLabels honorLabels chooses the metric's labels on collisions with target labels + ## + honorLabels: false + ## Argo CD applicationSet controller service parameters + ## + service: + ## @param applicationSet.service.type Argo CD applicationSet controller service type + ## + type: ClusterIP + ## @param applicationSet.service.port Argo CD applicationSet controller service port + ## + port: 7000 + + ## Node ports to expose + ## @param applicationSet.service.nodePort Node port for Argo CD applicationSet controller service + ## NOTE: choose port between <30000-32767> + ## + nodePort: "" + ## @param applicationSet.service.clusterIP Argo CD applicationSet controller service Cluster IP + ## e.g.: + ## clusterIP: None + ## + clusterIP: "" + ## @param applicationSet.service.loadBalancerIP Argo CD applicationSet controller service Load Balancer IP + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-loadbalancer + ## + loadBalancerIP: "" + ## @param applicationSet.service.loadBalancerSourceRanges Argo CD applicationSet controller service Load Balancer sources + ## ref: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service + ## e.g: + ## loadBalancerSourceRanges: + ## - 10.10.10.0/24 + ## + loadBalancerSourceRanges: [] + ## @param applicationSet.service.externalTrafficPolicy Argo CD applicationSet controller service external traffic policy + ## ref https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip + ## + externalTrafficPolicy: Cluster + ## @param applicationSet.service.annotations Additional custom annotations for Argo CD applicationSet controller service + ## + annotations: {} + ## @param applicationSet.service.extraPorts Extra ports to expose (normally used with the `sidecar` value) + ## + extraPorts: [] + ## @param applicationSet.service.sessionAffinity Session Affinity for Kubernetes service, can be "None" or "ClientIP" + ## If "ClientIP", consecutive client requests will be directed to the same Pod + ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies + ## + sessionAffinity: None + ## @param applicationSet.service.sessionAffinityConfig Additional settings for the sessionAffinity + ## sessionAffinityConfig: + ## clientIP: + ## timeoutSeconds: 300 + ## + sessionAffinityConfig: {} + ## ServiceAccount configuration for the Argo CD applicationSet controller + ## + serviceAccount: + ## @param applicationSet.serviceAccount.create Specifies whether a ServiceAccount should be created + ## + create: true + ## @param applicationSet.serviceAccount.name The name of the ServiceAccount to use. + ## If not set and create is true, a name is generated using the common.names.fullname template + ## + name: "" + ## @param applicationSet.serviceAccount.automountServiceAccountToken Automount service account token for the applicationSet controller service account + ## + automountServiceAccountToken: true + ## @param applicationSet.serviceAccount.annotations Annotations for service account. Evaluated as a template. Only used if `create` is `true`. + ## + annotations: {} + ## @param applicationSet.podAffinityPreset Pod affinity preset. Ignored if `applicationSet.affinity` is set. Allowed values: `soft` or `hard` + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity + ## + podAffinityPreset: "" + ## @param applicationSet.podAntiAffinityPreset Pod anti-affinity preset. Ignored if `applicationSet.affinity` is set. Allowed values: `soft` or `hard` + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity + ## + podAntiAffinityPreset: soft + ## Node applicationSet.affinity preset + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity + ## + nodeAffinityPreset: + ## @param applicationSet.nodeAffinityPreset.type Node affinity preset type. Ignored if `applicationSet.affinity` is set. Allowed values: `soft` or `hard` + ## + type: "" + ## @param applicationSet.nodeAffinityPreset.key Node label key to match. Ignored if `applicationSet.affinity` is set + ## + key: "" + ## @param applicationSet.nodeAffinityPreset.values Node label values to match. Ignored if `applicationSet.affinity` is set + ## E.g. + ## values: + ## - e2e-az1 + ## - e2e-az2 + ## + values: [] + ## @param applicationSet.affinity Affinity for Argo CD applicationSet controller pods assignment + ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity + ## NOTE: `applicationSet.podAffinityPreset`, `applicationSet.podAntiAffinityPreset`, and `applicationSet.nodeAffinityPreset` will be ignored when it's set + ## + affinity: {} + ## @param applicationSet.podAnnotations Annotations for Argo CD applicationSet controller pods + ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ + ## + podAnnotations: {} + ## @param applicationSet.podLabels Extra labels for Argo CD applicationSet controller pods + ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ + ## + podLabels: {} + ## Configure Container Security Context + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + ## @param applicationSet.containerSecurityContext.enabled Enabled Argo CD applicationSet controller containers' Security Context + ## @param applicationSet.containerSecurityContext.runAsUser Set Argo CD applicationSet controller containers' Security Context runAsUser + ## @param applicationSet.containerSecurityContext.allowPrivilegeEscalation Set Argo CD applicationSet controller containers' Security Context allowPrivilegeEscalation + ## @param applicationSet.containerSecurityContext.capabilities.drop Set Argo CD applicationSet controller containers' Security Context capabilities to be dropped + ## @param applicationSet.containerSecurityContext.readOnlyRootFilesystem Set Argo CD applicationSet controller containers' Security Context readOnlyRootFilesystem + ## @param applicationSet.containerSecurityContext.runAsNonRoot Set Argo CD applicationSet controller container's Security Context runAsNonRoot + ## + containerSecurityContext: + enabled: true + runAsUser: 1001 + allowPrivilegeEscalation: false + capabilities: + drop: + - all + readOnlyRootFilesystem: false + runAsNonRoot: true + ## @param applicationSet.livenessProbe.enabled Enable livenessProbe on Argo CD applicationSet controller nodes + ## @param applicationSet.livenessProbe.initialDelaySeconds Initial delay seconds for livenessProbe + ## @param applicationSet.livenessProbe.periodSeconds Period seconds for livenessProbe + ## @param applicationSet.livenessProbe.timeoutSeconds Timeout seconds for livenessProbe + ## @param applicationSet.livenessProbe.failureThreshold Failure threshold for livenessProbe + ## @param applicationSet.livenessProbe.successThreshold Success threshold for livenessProbe + ## + livenessProbe: + enabled: true + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 1 + failureThreshold: 3 + successThreshold: 1 + ## @param applicationSet.readinessProbe.enabled Enable readinessProbe on Argo CD applicationSet controller nodes + ## @param applicationSet.readinessProbe.initialDelaySeconds Initial delay seconds for readinessProbe + ## @param applicationSet.readinessProbe.periodSeconds Period seconds for readinessProbe + ## @param applicationSet.readinessProbe.timeoutSeconds Timeout seconds for readinessProbe + ## @param applicationSet.readinessProbe.failureThreshold Failure threshold for readinessProbe + ## @param applicationSet.readinessProbe.successThreshold Success threshold for readinessProbe + ## + readinessProbe: + enabled: true + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 1 + failureThreshold: 3 + successThreshold: 1 + ## @param applicationSet.customLivenessProbe Custom livenessProbe that overrides the default one + ## + customLivenessProbe: {} + ## @param applicationSet.customReadinessProbe Custom readinessProbe that overrides the default one + ## + customReadinessProbe: {} + ## Argo CD applicationSet controller resource requests and limits + ## ref: https://kubernetes.io/docs/user-guide/compute-resources/ + ## @param applicationSet.resources.limits The resources limits for the Argo CD applicationSet controller containers + ## @param applicationSet.resources.requests The requested resources for the Argo CD applicationSet controller containers + ## + resources: + limits: {} + requests: {} + ## Configure Pods Security Context + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + ## @param applicationSet.podSecurityContext.enabled Enabled Argo CD applicationSet controller pods' Security Context + ## @param applicationSet.podSecurityContext.fsGroup Set Argo CD applicationSet controller pod's Security Context fsGroup + ## + podSecurityContext: + enabled: true + fsGroup: 1001 + ## @param applicationSet.nodeSelector Node labels for Argo CD applicationSet controller pods assignment + ## ref: https://kubernetes.io/docs/user-guide/node-selection/ + ## + nodeSelector: {} + ## @param applicationSet.tolerations Tolerations for Argo CD applicationSet controller pods assignment + ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + ## + tolerations: [] + ## @param applicationSet.updateStrategy.type Argo CD applicationSet controller statefulset strategy type + ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#update-strategies + ## + updateStrategy: + ## StrategyType + ## Can be set to RollingUpdate or OnDelete + ## + type: RollingUpdate + ## @param applicationSet.priorityClassName Argo CD applicationSet controller pods' priorityClassName + ## + priorityClassName: "" + ## @param applicationSet.extraVolumes Optionally specify extra list of additional volumes for the Argo CD applicationSet controller pod(s) + ## + extraVolumes: [] + ## @param applicationSet.extraVolumeMounts Optionally specify extra list of additional volumeMounts for the Argo CD applicationSet controller container(s) + ## + extraVolumeMounts: [] + ## @param applicationSet.extraEnvVars Array with extra environment variables to add to Argo CD applicationSet controller nodes + ## e.g: + ## extraEnvVars: + ## - name: FOO + ## value: "bar" + ## + extraEnvVars: [] + ## @param applicationSet.extraEnvVarsCM Name of existing ConfigMap containing extra env vars for Argo CD applicationSet controller nodes + ## + extraEnvVarsCM: "" + ## @param applicationSet.extraEnvVarsSecret Name of existing Secret containing extra env vars for Argo CD applicationSet controller nodes + ## + extraEnvVarsSecret: "" + ## Webhook for the Git Generator + ## Ref: https://argocd-applicationset.readthedocs.io/en/master/Generators-Git/#webhook-configuration) + ## + webhook: + ingress: + ## @param applicationSet.webhook.ingress.enabled Enable an ingress resource for Webhooks + ## + enabled: false + ## DEPRECATED: Use server.ingress.annotations instead of server.ingress.certManager + ## certManager: false + ## + ## @param applicationSet.webhook.ingress.annotations Additional ingress annotations + ## + annotations: {} + ## @param applicationSet.webhook.ingress.labels Additional ingress labels + ## + labels: {} + ## @param applicationSet.webhook.ingress.ingressClassName Defines which ingress controller will implement the resource + ## + ingressClassName: "" + ## @param applicationSet.webhook.ingress.hostname Ingress hostname for the Argo CD applicationSet ingress + ## Hostname must be provided if Ingress is enabled. + ## + hostname: "" + ## @param applicationSet.webhook.ingress.path Argo CD applicationSet ingress path + ## + path: /api/webhook + ## @param applicationSet.webhook.ingress.pathType Ingress path type. One of `Exact`, `Prefix` or `ImplementationSpecific` + ## + pathType: Prefix + ## @param applicationSet.webhook.ingress.extraHosts Extra hosts array for the Argo CD applicationSet ingress + ## The list of additional hostnames to be covered with this ingress record. + ## Most likely the hostname above will be enough, but in the event more hosts are needed, this is an array + ## + extraHosts: [] + ## @param applicationSet.webhook.ingress.extraPaths Extra paths for the Argo CD applicationSet ingress + ## Any additional arbitrary paths that may need to be added to the ingress under the main host. + ## For example: The ALB ingress controller requires a special rule for handling SSL redirection. + ## + extraPaths: [] + ## - path: /* + ## backend: + ## serviceName: ssl-redirect + ## servicePort: use-annotation + ## + ## @param applicationSet.webhook.ingress.extraTls Extra TLS configuration for the Argo CD applicationSet ingress + ## The tls configuration for additional hostnames to be covered with this ingress record. + ## see: https://kubernetes.io/docs/concepts/services-networking/ingress/#tls + ## + extraTls: [] + ## - hosts: + ## - argocd.server.local + ## secretName: argocd.server.local-tls + ## + ## @param applicationSet.webhook.ingress.tls Ingress TLS configuration + ## + tls: [] ## @section Argo CD server Parameters @@ -2227,10 +2634,20 @@ config: ## tlsCerts: {} + ## @param config.gpgKeys GnuPG public keys to add to the keyring + ## Note: Public keys should be exported with `gpg --export --armor ` + ## + gpgKeys: {} + # 4AEE18F83AFDEB23: | + # -----BEGIN PGP PUBLIC KEY BLOCK----- + # ... + # -----END PGP PUBLIC KEY BLOCK----- + ## Argo CD general secret configuration ## secret: ## @param config.secret.create Whether to create or not the secret + ## create: true ## Annotations to be added to argocd-secret ## @param config.secret.annotations General secret extra annotations