{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/api-evangelist/harness/main/json-schema/harness-applications-application-spec-schema.json", "title": "applicationsApplicationSpec", "description": "ApplicationSpec represents desired application state. Contains link to repository with application definition and additional parameters link definition revision.", "x-generated": "2026-10-04", "x-method": "derived", "x-generator": "derive-json-schema.py", "x-source": "openapi/harness-applications-api-openapi.yml#/components/schemas/applicationsApplicationSpec", "type": "object", "properties": { "source": { "$ref": "#/$defs/applicationsApplicationSource" }, "destination": { "$ref": "#/$defs/applicationsApplicationDestination" }, "project": { "type": "string", "description": "Project is a reference to the project this application belongs to.\nThe empty string means that application belongs to the 'default' project." }, "syncPolicy": { "$ref": "#/$defs/applicationsSyncPolicy" }, "ignoreDifferences": { "type": "array", "items": { "$ref": "#/$defs/applicationsResourceIgnoreDifferences" }, "title": "IgnoreDifferences is a list of resources and their fields which should be ignored during comparison" }, "info": { "type": "array", "items": { "$ref": "#/$defs/applicationsInfo" }, "title": "Info contains a list of information (URLs, email addresses, and plain text) that relates to the application" }, "revisionHistoryLimit": { "type": "string", "format": "int64", "description": "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.\nThis should only be changed in exceptional circumstances.\nSetting to zero will store no history. This will reduce storage used.\nIncreasing will increase the space used to store the history, so we do not recommend increasing it.\nDefault is 10." }, "sources": { "type": "array", "items": { "$ref": "#/$defs/applicationsApplicationSource" }, "title": "Sources is a reference to the location of the application's manifests or chart" }, "sourceHydrator": { "$ref": "#/$defs/applicationsSourceHydrator" } }, "$defs": { "applicationsApplicationDestination": { "type": "object", "properties": { "server": { "type": "string", "title": "Server specifies the URL of the target cluster and must be set to the Kubernetes control plane API" }, "namespace": { "type": "string", "title": "Namespace specifies the target namespace for the application's resources.\nThe namespace will only be set for namespace-scoped resources that have not set a value for .metadata.namespace" }, "name": { "type": "string", "title": "Name is an alternate way of specifying the target cluster by its symbolic name" } }, "title": "ApplicationDestination holds information about the application's destination" }, "applicationsApplicationSource": { "type": "object", "properties": { "repoURL": { "type": "string", "title": "RepoURL is the URL to the repository (Git or Helm) that contains the application manifests" }, "path": { "type": "string", "description": "Path is a directory path within the Git repository, and is only valid for applications sourced from Git." }, "targetRevision": { "type": "string", "description": "TargetRevision defines the revision of the source to sync the application to.\nIn case of Git, this can be commit, tag, or branch. If omitted, will equal to HEAD.\nIn case of Helm, this is a semver tag for the Chart's version." }, "helm": { "$ref": "#/$defs/applicationsApplicationSourceHelm" }, "kustomize": { "$ref": "#/$defs/applicationsApplicationSourceKustomize" }, "ksonnet": { "$ref": "#/$defs/applicationsApplicationSourceKsonnet" }, "directory": { "$ref": "#/$defs/applicationsApplicationSourceDirectory" }, "plugin": { "$ref": "#/$defs/applicationsApplicationSourcePlugin" }, "chart": { "type": "string", "description": "Chart is a Helm chart name, and must be specified for applications sourced from a Helm repo." }, "ref": { "type": "string", "description": "Ref is reference to another source within sources field. This field will not be used if used with a `source` tag." }, "name": { "type": "string", "description": "Name is used to refer to a source and is displayed in the UI. It is used in multi-source Applications." } }, "title": "ApplicationSource contains all information about the source of an application" }, "applicationsApplicationSourceDirectory": { "type": "object", "properties": { "recurse": { "type": "boolean", "title": "Recurse specifies whether to scan a directory recursively for manifests" }, "jsonnet": { "$ref": "#/$defs/applicationsApplicationSourceJsonnet" }, "exclude": { "type": "string", "title": "Exclude contains a glob pattern to match paths against that should be explicitly excluded from being used during manifest generation" }, "include": { "type": "string", "title": "Include contains a glob pattern to match paths against that should be explicitly included during manifest generation" } }, "title": "ApplicationSourceDirectory holds options for applications of type plain YAML or Jsonnet" }, "applicationsApplicationSourceHelm": { "type": "object", "properties": { "valueFiles": { "type": "array", "items": { "type": "string" }, "title": "ValuesFiles is a list of Helm value files to use when generating a template" }, "parameters": { "type": "array", "items": { "$ref": "#/$defs/applicationsHelmParameter" }, "title": "Parameters is a list of Helm parameters which are passed to the helm template command upon manifest generation" }, "releaseName": { "type": "string", "title": "ReleaseName is the Helm release name to use. If omitted it will use the application name" }, "values": { "type": "string", "title": "Values specifies Helm values to be passed to helm template, typically defined as a block" }, "fileParameters": { "type": "array", "items": { "$ref": "#/$defs/applicationsHelmFileParameter" }, "title": "FileParameters are file parameters to the helm template" }, "version": { "type": "string", "title": "Version is the Helm version to use for templating (either \"2\" or \"3\")" }, "passCredentials": { "type": "boolean", "title": "PassCredentials pass credentials to all domains (Helm's --pass-credentials)" }, "ignoreMissingValueFiles": { "type": "boolean", "title": "IgnoreMissingValueFiles prevents helm template from failing when valueFiles do not exist locally by not appending them to helm template --values" }, "skipCrds": { "type": "boolean", "title": "SkipCrds skips custom resource definition installation step (Helm's --skip-crds)" }, "valuesObject": { "type": "object", "title": "ValuesObject specifies Helm values to be passed to helm template, defined as a map. This takes precedence over Values.\n+kubebuilder:pruning:PreserveUnknownFields" }, "namespace": { "type": "string", "description": "Namespace is an optional namespace to template with. If left empty, defaults to the app's destination namespace." }, "kubeVersion": { "type": "string", "description": "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster." }, "apiVersions": { "type": "array", "items": { "type": "string" }, "description": "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind." }, "skipTests": { "type": "boolean", "description": "SkipTests skips test manifest installation step (Helm's --skip-tests)." }, "skipSchemaValidation": { "type": "boolean", "title": "SkipSchemaValidation skips JSON schema validation (Helm's --skip-schema-validation)" } }, "title": "ApplicationSourceHelm holds helm specific options" }, "applicationsApplicationSourceJsonnet": { "type": "object", "properties": { "extVars": { "type": "array", "items": { "$ref": "#/$defs/applicationsJsonnetVar" }, "title": "ExtVars is a list of Jsonnet External Variables" }, "tlas": { "type": "array", "items": { "$ref": "#/$defs/applicationsJsonnetVar" }, "title": "TLAS is a list of Jsonnet Top-level Arguments" }, "libs": { "type": "array", "items": { "type": "string" }, "title": "Additional library search dirs" } }, "title": "ApplicationSourceJsonnet holds options specific to applications of type Jsonnet" }, "applicationsApplicationSourceKsonnet": { "type": "object", "properties": { "environment": { "type": "string", "title": "Environment is a ksonnet application environment name" }, "parameters": { "type": "array", "items": { "$ref": "#/$defs/applicationsKsonnetParameter" }, "title": "Parameters are a list of ksonnet component parameter override values" } }, "title": "ApplicationSourceKsonnet holds ksonnet specific options" }, "applicationsApplicationSourceKustomize": { "type": "object", "properties": { "namePrefix": { "type": "string", "title": "NamePrefix overrides the namePrefix in the kustomization.yaml for Kustomize apps" }, "nameSuffix": { "type": "string", "title": "NameSuffix overrides the nameSuffix in the kustomization.yaml for Kustomize apps" }, "images": { "type": "array", "items": { "type": "string" }, "title": "Images is a list of Kustomize image override specifications" }, "commonLabels": { "type": "object", "additionalProperties": { "type": "string" }, "title": "CommonLabels is a list of additional labels to add to rendered manifests" }, "version": { "type": "string", "title": "Version controls which version of Kustomize to use for rendering manifests" }, "commonAnnotations": { "type": "object", "additionalProperties": { "type": "string" }, "title": "CommonAnnotations is a list of additional annotations to add to rendered manifests" }, "forceCommonLabels": { "type": "boolean", "title": "ForceCommonLabels specifies whether to force applying common labels to resources for Kustomize apps" }, "forceCommonAnnotations": { "type": "boolean", "title": "ForceCommonAnnotations specifies whether to force applying common annotations to resources for Kustomize apps" }, "namespace": { "type": "string", "title": "Namespace sets the namespace that Kustomize adds to all resources" }, "commonAnnotationsEnvsubst": { "type": "boolean", "title": "CommonAnnotationsEnvsubst specifies whether to apply env variables substitution for annotation values" }, "replicas": { "type": "array", "items": { "$ref": "#/$defs/applicationsKustomizeReplicas" }, "title": "Replicas is a list of Kustomize Replicas override specifications" }, "patches": { "type": "array", "items": { "$ref": "#/$defs/applicationsKustomizePatch" }, "title": "Patches is a list of Kustomize patches" }, "components": { "type": "array", "items": { "type": "string" }, "title": "Components specifies a list of kustomize components to add to the kustomization before building" }, "labelWithoutSelector": { "type": "boolean", "title": "LabelWithoutSelector specifies whether to apply common labels to resource selectors or not" }, "kubeVersion": { "type": "string", "description": "KubeVersion specifies the Kubernetes API version to pass to Helm when templating manifests. By default, Argo CD\nuses the Kubernetes version of the target cluster." }, "apiVersions": { "type": "array", "items": { "type": "string" }, "description": "APIVersions specifies the Kubernetes resource API versions to pass to Helm when templating manifests. By default,\nArgo CD uses the API versions of the target cluster. The format is [group/]version/kind." }, "ignoreMissingComponents": { "type": "boolean", "title": "IgnoreMissingComponents prevents kustomize from failing when components do not exist locally by not appending them to kustomization file" }, "labelIncludeTemplates": { "type": "boolean", "title": "LabelIncludeTemplates specifies whether to apply common labels to resource templates or not" } }, "title": "ApplicationSourceKustomize holds options specific to an Application source specific to Kustomize" }, "applicationsApplicationSourcePlugin": { "type": "object", "properties": { "name": { "type": "string" }, "env": { "type": "array", "items": { "$ref": "#/$defs/applicationsEnvEntry" } }, "parameters": { "type": "array", "items": { "$ref": "#/$defs/applicationsApplicationSourcePluginParameter" } } }, "title": "ApplicationSourcePlugin holds options specific to config management plugins" }, "applicationsApplicationSourcePluginParameter": { "type": "object", "properties": { "name": { "type": "string", "description": "Name is the name identifying a parameter." }, "string": { "type": "string", "description": "String_ is the value of a string type parameter." }, "map": { "$ref": "#/$defs/applicationsOptionalMap" }, "array": { "$ref": "#/$defs/applicationsOptionalArray" } } }, "applicationsBackoff": { "type": "object", "properties": { "duration": { "type": "string", "title": "Duration is the amount to back off. Default unit is seconds, but could also be a duration (e.g. \"2m\", \"1h\")" }, "factor": { "type": "string", "format": "int64", "title": "Factor is a factor to multiply the base duration after each failed retry" }, "maxDuration": { "type": "string", "title": "MaxDuration is the maximum amount of time allowed for the backoff strategy" } }, "title": "Backoff is the backoff strategy to use on subsequent retries for failing syncs" }, "applicationsDrySource": { "type": "object", "properties": { "repoURL": { "type": "string", "title": "RepoURL is the URL to the git repository that contains the application manifests" }, "targetRevision": { "type": "string", "title": "TargetRevision defines the revision of the source to hydrate" }, "path": { "type": "string", "title": "Path is a directory path within the Git repository where the manifests are located" }, "helm": { "$ref": "#/$defs/applicationsApplicationSourceHelm" }, "kustomize": { "$ref": "#/$defs/applicationsApplicationSourceKustomize" }, "directory": { "$ref": "#/$defs/applicationsApplicationSourceDirectory" }, "plugin": { "$ref": "#/$defs/applicationsApplicationSourcePlugin" } }, "description": "DrySource specifies a location for dry \"don't repeat yourself\" manifest source information." }, "applicationsEnvEntry": { "type": "object", "properties": { "name": { "type": "string", "title": "Name is the name of the variable, usually expressed in uppercase" }, "value": { "type": "string", "title": "Value is the value of the variable" } }, "title": "EnvEntry represents an entry in the application's environment" }, "applicationsHelmFileParameter": { "type": "object", "properties": { "name": { "type": "string", "title": "Name is the name of the Helm parameter" }, "path": { "type": "string", "title": "Path is the path to the file containing the values for the Helm parameter" } }, "title": "HelmFileParameter is a file parameter that's passed to helm template during manifest generation" }, "applicationsHelmParameter": { "type": "object", "properties": { "name": { "type": "string", "title": "Name is the name of the Helm parameter" }, "value": { "type": "string", "title": "Value is the value for the Helm parameter" }, "forceString": { "type": "boolean", "title": "ForceString determines whether to tell Helm to interpret booleans and numbers as strings" } }, "title": "HelmParameter is a parameter that's passed to helm template during manifest generation" }, "applicationsHydrateTo": { "type": "object", "properties": { "targetBranch": { "type": "string", "title": "TargetBranch is the branch to which hydrated manifests should be committed" } }, "description": "HydrateTo specifies a location to which hydrated manifests should be pushed as a \"staging area\" before being moved to\nthe SyncSource. The RepoURL and Path are assumed based on the associated SyncSource config in the SourceHydrator." }, "applicationsInfo": { "type": "object", "properties": { "name": { "type": "string" }, "value": { "type": "string" } } }, "applicationsJsonnetVar": { "type": "object", "properties": { "name": { "type": "string" }, "value": { "type": "string" }, "code": { "type": "boolean" } }, "title": "JsonnetVar represents a variable to be passed to jsonnet during manifest generation" }, "applicationsKsonnetParameter": { "type": "object", "properties": { "component": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" } }, "title": "KsonnetParameter is a ksonnet component parameter" }, "applicationsKustomizeGvk": { "type": "object", "properties": { "group": { "type": "string" }, "version": { "type": "string" }, "kind": { "type": "string" } } }, "applicationsKustomizePatch": { "type": "object", "properties": { "path": { "type": "string" }, "patch": { "type": "string" }, "target": { "$ref": "#/$defs/applicationsKustomizeSelector" }, "options": { "type": "object", "additionalProperties": { "type": "boolean" } } } }, "applicationsKustomizeReplicas": { "type": "object", "properties": { "count": { "type": "string", "title": "Number of replicas" }, "name": { "type": "string", "title": "Name of Deployment or StatefulSet" } } }, "applicationsKustomizeResId": { "type": "object", "properties": { "gvk": { "$ref": "#/$defs/applicationsKustomizeGvk" }, "name": { "type": "string" }, "namespace": { "type": "string" } } }, "applicationsKustomizeSelector": { "type": "object", "properties": { "resId": { "$ref": "#/$defs/applicationsKustomizeResId" }, "annotationSelector": { "type": "string" }, "labelSelector": { "type": "string" } } }, "applicationsManagedNamespaceMetadata": { "type": "object", "properties": { "labels": { "type": "object", "additionalProperties": { "type": "string" } }, "annotations": { "type": "object", "additionalProperties": { "type": "string" } } } }, "applicationsOptionalArray": { "type": "object", "properties": { "array": { "type": "array", "items": { "type": "string" }, "title": "Array is the value of an array type parameter.\n+optional" } } }, "applicationsOptionalMap": { "type": "object", "properties": { "map": { "type": "object", "additionalProperties": { "type": "string" }, "title": "Map is the value of a map type parameter.\n+optional" } } }, "applicationsResourceIgnoreDifferences": { "type": "object", "properties": { "group": { "type": "string" }, "kind": { "type": "string" }, "name": { "type": "string" }, "namespace": { "type": "string" }, "jsonPointers": { "type": "array", "items": { "type": "string" } }, "jqPathExpressions": { "type": "array", "items": { "type": "string" } }, "managedFieldsManagers": { "type": "array", "items": { "type": "string" }, "title": "ManagedFieldsManagers is a list of trusted managers. Fields mutated by those managers will take precedence over the\ndesired state defined in the SCM and won't be displayed in diffs" } }, "description": "ResourceIgnoreDifferences contains resource filter and list of json paths which should be ignored during comparison with live state." }, "applicationsRetryStrategy": { "type": "object", "properties": { "limit": { "type": "string", "format": "int64", "description": "Limit is the maximum number of attempts for retrying a failed sync. If set to 0, no retries will be performed." }, "backoff": { "$ref": "#/$defs/applicationsBackoff" }, "refresh": { "type": "boolean", "title": "Refresh indicates if the latest revision should be used on retry instead of the initial one (default: false)" } }, "title": "RetryStrategy contains information about the strategy to apply when a sync failed" }, "applicationsSourceHydrator": { "type": "object", "properties": { "drySource": { "$ref": "#/$defs/applicationsDrySource" }, "syncSource": { "$ref": "#/$defs/applicationsSyncSource" }, "hydrateTo": { "$ref": "#/$defs/applicationsHydrateTo" } }, "description": "SourceHydrator specifies a dry \"don't repeat yourself\" source for manifests, a sync source from which to sync\nhydrated manifests, and an optional hydrateTo location to act as a \"staging\" aread for hydrated manifests." }, "applicationsSyncPolicy": { "type": "object", "properties": { "automated": { "$ref": "#/$defs/applicationsSyncPolicyAutomated" }, "syncOptions": { "type": "array", "items": { "type": "string" }, "title": "Options allow you to specify whole app sync-options" }, "retry": { "$ref": "#/$defs/applicationsRetryStrategy" }, "managedNamespaceMetadata": { "$ref": "#/$defs/applicationsManagedNamespaceMetadata" } }, "title": "SyncPolicy controls when a sync will be performed in response to updates in git" }, "applicationsSyncPolicyAutomated": { "type": "object", "properties": { "prune": { "type": "boolean", "title": "Prune specifies whether to delete resources from the cluster that are not found in the sources anymore as part of automated sync (default: false)" }, "selfHeal": { "type": "boolean", "title": "SelfHeal specifes whether to revert resources back to their desired state upon modification in the cluster (default: false)" }, "allowEmpty": { "type": "boolean", "title": "AllowEmpty allows apps have zero live resources (default: false)" }, "enabled": { "type": "boolean", "title": "Enable allows apps to explicitly control automated sync" } }, "title": "SyncPolicyAutomated controls the behavior of an automated sync" }, "applicationsSyncSource": { "type": "object", "properties": { "targetBranch": { "type": "string", "description": "TargetBranch is the branch from which hydrated manifests will be synced.\nIf HydrateTo is not set, this is also the branch to which hydrated manifests are committed." }, "path": { "type": "string", "description": "Path is a directory path within the git repository where hydrated manifests should be committed to and synced\nfrom. The Path should never point to the root of the repo. If hydrateTo is set, this is just the path from which\nhydrated manifests will be synced.\n\n+kubebuilder:validation:Required\n+kubebuilder:validation:MinLength=1\n+kubebuilder:validation:Pattern=`^.{2,}|[^./]$`" } }, "description": "SyncSource specifies a location from which hydrated manifests may be synced. RepoURL is assumed based on the\nassociated DrySource config in the SourceHydrator." } } }