apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: guestbook # You'll usually want to add your resources to the argocd namespace. namespace: argocd # Add this finalizer ONLY if you want these to cascade delete. finalizers: # The default behaviour is foreground cascading deletion - resources-finalizer.argocd.argoproj.io # Alternatively, you can use background cascading deletion # - resources-finalizer.argocd.argoproj.io/background # Add labels to your application object. labels: name: guestbook spec: # The project the application belongs to. project: default # Source of the application manifests source: repoURL: https://github.com/argoproj/argocd-example-apps.git # Can point to either a Helm chart repo or a git repo. targetRevision: HEAD # For Helm, this refers to the chart version. path: guestbook # This has no meaning for Helm charts pulled directly from a Helm repo instead of git. # helm specific config chart: chart-name # Set this when pulling directly from a Helm repo. DO NOT set for git-hosted Helm charts. helm: passCredentials: false # If true then adds --pass-credentials to Helm commands to pass credentials to all domains # Extra parameters to set (same as setting through values.yaml, but these take precedence) parameters: - name: "nginx-ingress.controller.service.annotations.external-dns\\.alpha\\.kubernetes\\.io/hostname" value: mydomain.example.com - name: "ingress.annotations.kubernetes\\.io/tls-acme" value: "true" forceString: true # ensures that value is treated as a string # Use the contents of files as parameters (uses Helm's --set-file) fileParameters: - name: config path: files/config.json # Release name override (defaults to application name) releaseName: guestbook # Helm values files for overriding values in the helm chart # The path is relative to the spec.source.path directory defined above valueFiles: - values-prod.yaml # Ignore locally missing valueFiles when installing Helm chart. Defaults to false ignoreMissingValueFiles: false # Values file as block file. Prefer to use valuesObject if possible (see below) values: | ingress: enabled: true path: / hosts: - mydomain.example.com annotations: kubernetes.io/ingress.class: nginx kubernetes.io/tls-acme: "true" labels: {} tls: - secretName: mydomain-tls hosts: - mydomain.example.com # Values file as block file. This takes precedence over values valuesObject: ingress: enabled: true path: / hosts: - mydomain.example.com annotations: kubernetes.io/ingress.class: nginx kubernetes.io/tls-acme: "true" labels: {} tls: - secretName: mydomain-tls hosts: - mydomain.example.com # Skip custom resource definition installation if chart contains custom resource definitions. Defaults to false skipCrds: false # Skip schema validation if chart contains JSON schema validation. Defaults to false skipSchemaValidation: false # Optional Helm version to template with. If omitted it will fall back to look at the 'apiVersion' in Chart.yaml # and decide which Helm binary to use automatically. This field can be either 'v2' or 'v3'. version: v2 # You can specify the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD uses # the Kubernetes version of the target cluster. The value must be semver formatted. Do not prefix with `v`. kubeVersion: 1.30.0 # You can specify the Kubernetes resource API versions to pass to Helm when templating manifests. By default, Argo # CD uses the API versions of the target cluster. The format is [group/]version/kind. apiVersions: - traefik.io/v1alpha1/TLSOption - v1/Service # Optional namespace to template with. If left empty, defaults to the app's destination namespace. namespace: custom-namespace # kustomize specific config kustomize: # Optional kustomize version. Note: version must be configured in argocd-cm ConfigMap version: v3.5.4 # Supported kustomize transformers. https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/ namePrefix: prod- nameSuffix: -some-suffix commonLabels: foo: bar commonAnnotations: beep: boop-${ARGOCD_APP_REVISION} # Toggle which enables/disables env variables substitution in commonAnnotations commonAnnotationsEnvsubst: true # Defines if the common label(s) should be applied to resource selectors. It also excludes common labels from # templates unless `labelIncludeTemplates` is set to true. labelWithoutSelector: false # Defines if the common label(s) should be applied to resource templates. labelIncludeTemplates: false forceCommonLabels: false forceCommonAnnotations: false images: - gcr.io/heptio-images/ks-guestbook-demo:0.2 - my-app=gcr.io/my-repo/my-app:0.1 namespace: custom-namespace replicas: - name: kustomize-guestbook-ui count: 4 components: - ../component # relative to the kustomization.yaml (`source.path`). # Ignore locally missing component directories when using Kustomize Components. Defaults to false ignoreMissingComponents: true patches: - target: kind: Deployment name: guestbook-ui patch: |- - op: add # Add new element to manifest path: /spec/template/spec/nodeSelector/ value: env: "pro" # You can specify the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD uses # the Kubernetes version of the target cluster. The value must be semver formatted. Do not prefix with `v`. kubeVersion: 1.30.0 # You can specify the Kubernetes resource API versions to pass to Helm when templating manifests. By default, Argo # CD uses the API versions of the target cluster. The format is [group/]version/kind. apiVersions: - traefik.io/v1alpha1/TLSOption - v1/Service # directory directory: recurse: true jsonnet: # A list of Jsonnet External Variables extVars: - name: foo value: bar # You can use "code" to determine if the value is either string (false, the default) or Jsonnet code (if code is true). - code: true name: baz value: "true" # A list of Jsonnet Top-level Arguments tlas: - code: false name: foo value: bar # Exclude contains a glob pattern to match paths against that should be explicitly excluded from being used during # manifest generation. This takes precedence over the `include` field. # To match multiple patterns, wrap the patterns in {} and separate them with commas. For example: '{config.yaml,env-use2/*}' exclude: 'config.yaml' # Include contains a glob pattern to match paths against that should be explicitly included during manifest # generation. If this field is set, only matching manifests will be included. # To match multiple patterns, wrap the patterns in {} and separate them with commas. For example: '{*.yml,*.yaml}' include: '*.yaml' # plugin specific config plugin: # If the plugin is defined as a sidecar and name is not passed, the plugin will be automatically matched with the # Application according to the plugin's discovery rules. name: mypluginname # environment variables passed to the plugin env: - name: FOO value: bar # Plugin parameters are new in v2.5. parameters: - name: string-param string: example-string - name: array-param array: [item1, item2] - name: map-param map: param-name: param-value # Sources field specifies the list of sources for the application sources: - repoURL: https://github.com/argoproj/argocd-example-apps.git # Can point to either a Helm chart repo or a git repo. targetRevision: HEAD # For Helm, this refers to the chart version. path: guestbook # This has no meaning for Helm charts pulled directly from a Helm repo instead of git. ref: my-repo # For Helm, acts as a reference to this source for fetching values files from this source. Has no meaning when under `source` field # Destination cluster and namespace to deploy the application destination: # cluster API URL server: https://kubernetes.default.svc # or cluster name # name: in-cluster # The namespace will only be set for namespace-scoped resources that have not set a value for .metadata.namespace namespace: guestbook # Extra information to show in the Argo CD Application details tab info: - name: 'Example:' value: 'https://example.com' # Sync policy syncPolicy: automated: # automated sync by default retries failed attempts 5 times with following delays between attempts ( 5s, 10s, 20s, 40s, 80s ); retry controlled using `retry` field. prune: true # Specifies if resources should be pruned during auto-syncing ( false by default ). selfHeal: true # Specifies if partial app sync should be executed when resources are changed only in target Kubernetes cluster and no git change detected ( false by default ). allowEmpty: false # Allows deleting all application resources during automatic syncing ( false by default ). syncOptions: # Sync options which modifies sync behavior - Validate=false # disables resource validation (equivalent to 'kubectl apply --validate=false') ( true by default ). - CreateNamespace=true # Namespace Auto-Creation ensures that namespace specified as the application destination exists in the destination cluster. - PrunePropagationPolicy=foreground # Supported policies are background, foreground and orphan. - PruneLast=true # Allow the ability for resource pruning to happen as a final, implicit wave of a sync operation - RespectIgnoreDifferences=true # When syncing changes, respect fields ignored by the ignoreDifferences configuration - ApplyOutOfSyncOnly=true # Only sync out-of-sync resources, rather than applying every object in the application managedNamespaceMetadata: # Sets the metadata for the application namespace. Only valid if CreateNamespace=true (see above), otherwise it's a no-op. labels: # The labels to set on the application namespace any: label you: like annotations: # The annotations to set on the application namespace the: same applies: for annotations: on-the-namespace # The retry feature is available since v1.7 retry: limit: 5 # number of failed sync attempt retries; unlimited number of attempts if less than 0 backoff: duration: 5s # the amount to back off. Default unit is seconds, but could also be a duration (e.g. "2m", "1h") factor: 2 # a factor to multiply the base duration after each failed retry maxDuration: 3m # the maximum amount of time allowed for the backoff strategy # Will ignore differences between live and desired states during the diff. Note that these configurations are not # used during the sync process unless the `RespectIgnoreDifferences=true` sync option is enabled. ignoreDifferences: # for the specified json pointers - group: apps kind: Deployment jsonPointers: - /spec/replicas - kind: ConfigMap jqPathExpressions: - '.data["config.yaml"].auth' # for the specified managedFields managers - group: "*" kind: "*" managedFieldsManagers: - kube-controller-manager # Name and namespace are optional. If specified, they must match exactly, these are not glob patterns. name: my-deployment namespace: my-namespace # RevisionHistoryLimit limits the number of items kept in the application's revision history, which is used for # informational purposes as well as for rollbacks to previous versions. This should only be changed in exceptional # circumstances. Setting to zero will store no history. This will reduce storage used. Increasing will increase the # space used to store the history, so we do not recommend increasing it. revisionHistoryLimit: 10