{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/harness/main/json-schema/harness-servicev1-cluster-schema.json",
  "title": "servicev1Cluster",
  "x-generated": "2026-10-04",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/harness-clusters-api-openapi.yml#/components/schemas/servicev1Cluster",
  "type": "object",
  "properties": {
    "accountIdentifier": {
      "type": "string",
      "description": "Account Identifier for the Entity."
    },
    "orgIdentifier": {
      "type": "string",
      "description": "Organization Identifier for the Entity."
    },
    "projectIdentifier": {
      "type": "string",
      "description": "Project Identifier for the Entity."
    },
    "agentIdentifier": {
      "type": "string",
      "description": "Agent identifier for entity."
    },
    "identifier": {
      "type": "string"
    },
    "cluster": {
      "$ref": "#/$defs/clustersCluster"
    },
    "createdAt": {
      "type": "string",
      "format": "date-time"
    },
    "lastModifiedAt": {
      "type": "string",
      "format": "date-time"
    },
    "stale": {
      "type": "boolean"
    },
    "tags": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    },
    "secretExpressions": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    }
  },
  "$defs": {
    "clustersAWSAuthConfig": {
      "type": "object",
      "properties": {
        "clusterName": {
          "type": "string",
          "title": "ClusterName contains AWS cluster name"
        },
        "roleARN": {
          "type": "string",
          "description": "RoleARN contains optional role ARN. If set then AWS IAM Authenticator assume a role to perform cluster operations instead of the default AWS credential provider chain."
        }
      },
      "title": "AWSAuthConfig is an AWS IAM authentication configuration"
    },
    "clustersCluster": {
      "type": "object",
      "properties": {
        "server": {
          "type": "string",
          "title": "Server is the API server URL of the Kubernetes cluster"
        },
        "name": {
          "type": "string",
          "title": "Name of the cluster. If omitted, will use the server address"
        },
        "config": {
          "$ref": "#/$defs/clustersClusterConfig"
        },
        "connectionState": {
          "$ref": "#/$defs/commonsConnectionState"
        },
        "serverVersion": {
          "type": "string",
          "title": "DEPRECATED: use Info.ServerVersion field instead.\nThe server version"
        },
        "namespaces": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Holds list of namespaces which are accessible in that cluster. Cluster level resources will be ignored if namespace list is not empty."
        },
        "refreshRequestedAt": {
          "$ref": "#/$defs/v1Time"
        },
        "info": {
          "$ref": "#/$defs/clustersClusterInfo"
        },
        "shard_deprecated": {
          "type": "string",
          "format": "int64",
          "description": "DEPRECATED: use Shard field instead.\nShard contains optional shard number. Calculated on the fly by the application controller if not specified."
        },
        "clusterResources": {
          "type": "boolean",
          "description": "Indicates if cluster level resources should be managed. This setting is used only if cluster is connected in a namespaced mode."
        },
        "project": {
          "type": "string",
          "title": "Reference between project and cluster that allow you automatically to be added as item inside Destinations project entity"
        },
        "labels": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "title": "Labels for cluster secret metadata"
        },
        "annotations": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "title": "Annotations for cluster secret metadata"
        },
        "type": {
          "$ref": "#/$defs/clustersClusterType"
        },
        "refreshRequestedAtTs": {
          "type": "string",
          "format": "date-time",
          "title": "refreshRequestedAtTs is the google timestamp variation of refreshRequestedAt"
        },
        "shard": {
          "type": "string",
          "format": "int64"
        }
      },
      "title": "Cluster is the definition of a cluster resource"
    },
    "clustersClusterCacheInfo": {
      "type": "object",
      "properties": {
        "resourcesCount": {
          "type": "string",
          "format": "int64",
          "title": "ResourcesCount holds number of observed Kubernetes resources"
        },
        "apisCount": {
          "type": "string",
          "format": "int64",
          "title": "APIsCount holds number of observed Kubernetes API count"
        },
        "lastCacheSyncTime": {
          "$ref": "#/$defs/v1Time"
        },
        "lastCacheSyncTimeTs": {
          "type": "string",
          "format": "date-time",
          "title": "lastCacheSyncTimeTs is the google timestamp variation of lastCacheSyncTime"
        }
      },
      "title": "ClusterCacheInfo contains information about the cluster cache"
    },
    "clustersClusterConfig": {
      "type": "object",
      "properties": {
        "username": {
          "type": "string",
          "title": "Server requires Basic authentication"
        },
        "password": {
          "type": "string"
        },
        "bearerToken": {
          "type": "string",
          "description": "Server requires Bearer authentication. This client will not attempt to use\nrefresh tokens for an OAuth2 flow.\nTODO: demonstrate an OAuth2 compatible client."
        },
        "tlsClientConfig": {
          "$ref": "#/$defs/clustersTLSClientConfig"
        },
        "awsAuthConfig": {
          "$ref": "#/$defs/clustersAWSAuthConfig"
        },
        "execProviderConfig": {
          "$ref": "#/$defs/clustersExecProviderConfig"
        },
        "clusterConnectionType": {
          "type": "string",
          "title": "Identifies the authentication method used to connect to the cluster"
        },
        "roleARN": {
          "type": "string",
          "description": "RoleARN contains optional role ARN. If set then AWS IAM Authenticator assume a role to perform cluster operations instead of the default AWS credential provider chain."
        },
        "awsClusterName": {
          "type": "string",
          "description": "AWS Cluster name. If set then AWS CLI EKS token command will be used to access cluster."
        },
        "disableCompression": {
          "type": "boolean",
          "description": "DisableCompression bypasses automatic GZip compression requests to the server."
        },
        "proxyUrl": {
          "type": "string",
          "title": "ProxyURL is the URL to the proxy to be used for all requests send to the server"
        }
      },
      "description": "ClusterConfig is the configuration attributes. This structure is subset of the go-client\nrest.Config with annotations added for marshalling."
    },
    "clustersClusterInfo": {
      "type": "object",
      "properties": {
        "connectionState": {
          "$ref": "#/$defs/commonsConnectionState"
        },
        "serverVersion": {
          "type": "string",
          "title": "ServerVersion contains information about the Kubernetes version of the cluster"
        },
        "cacheInfo": {
          "$ref": "#/$defs/clustersClusterCacheInfo"
        },
        "applicationsCount": {
          "type": "string",
          "format": "int64",
          "title": "ApplicationsCount is the number of applications managed by Argo CD on the cluster"
        },
        "apiVersions": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "title": "APIVersions contains list of API versions supported by the cluster"
        }
      },
      "title": "ClusterInfo contains information about the cluster"
    },
    "clustersClusterType": {
      "type": "string",
      "enum": [
        "CUSTOMER_PROVIDED",
        "HARNESS_HOSTED"
      ],
      "default": "CUSTOMER_PROVIDED"
    },
    "clustersExecProviderConfig": {
      "type": "object",
      "properties": {
        "command": {
          "type": "string",
          "title": "Command to execute"
        },
        "args": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "title": "Arguments to pass to the command when executing it"
        },
        "env": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "title": "Env defines additional environment variables to expose to the process"
        },
        "apiVersion": {
          "type": "string",
          "title": "Preferred input version of the ExecInfo"
        },
        "installHint": {
          "type": "string",
          "title": "This text is shown to the user when the executable doesn't seem to be present"
        }
      },
      "title": "ExecProviderConfig is config used to call an external command to perform cluster authentication\nSee: https://godoc.org/k8s.io/client-go/tools/clientcmd/api#ExecConfig"
    },
    "clustersTLSClientConfig": {
      "type": "object",
      "properties": {
        "insecure": {
          "type": "boolean",
          "description": "Insecure specifies that the server should be accessed without verifying the TLS certificate. For testing only."
        },
        "serverName": {
          "type": "string",
          "description": "ServerName is passed to the server for SNI and is used in the client to check server\ncertificates against. If ServerName is empty, the hostname used to contact the\nserver is used."
        },
        "certData": {
          "type": "string",
          "format": "byte",
          "title": "CertData holds PEM-encoded bytes (typically read from a client certificate file).\nCertData takes precedence over CertFile"
        },
        "keyData": {
          "type": "string",
          "format": "byte",
          "title": "KeyData holds PEM-encoded bytes (typically read from a client certificate key file).\nKeyData takes precedence over KeyFile"
        },
        "caData": {
          "type": "string",
          "format": "byte",
          "title": "CAData holds PEM-encoded bytes (typically read from a root certificates bundle).\nCAData takes precedence over CAFile"
        }
      },
      "title": "TLSClientConfig contains settings to enable transport layer security"
    },
    "commonsConnectionState": {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "title": "Status contains the current status indicator for the connection"
        },
        "message": {
          "type": "string",
          "title": "Message contains human readable information about the connection status"
        },
        "attemptedAt": {
          "$ref": "#/$defs/v1Time"
        },
        "attemptedAtTs": {
          "type": "string",
          "format": "date-time",
          "title": "attemptedAtTs is the google timestamp variation of attemptedAt"
        }
      },
      "title": "ConnectionState contains information about remote resource connection state, currently used for clusters and repositories"
    },
    "v1Time": {
      "type": "object",
      "properties": {
        "seconds": {
          "type": "string",
          "format": "int64",
          "description": "Represents seconds of UTC time since Unix epoch\n1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to\n9999-12-31T23:59:59Z inclusive."
        },
        "nanos": {
          "type": "integer",
          "format": "int32",
          "description": "Non-negative fractions of a second at nanosecond resolution. Negative\nsecond values with fractions must still have non-negative nanos values\nthat count forward in time. Must be from 0 to 999,999,999\ninclusive. This field may be limited in precision depending on context."
        }
      },
      "description": "Time is a wrapper around time.Time which supports correct\nmarshaling to YAML and JSON.  Wrappers are provided for many\nof the factory methods that the time package offers.\n\n+protobuf.options.marshal=false\n+protobuf.as=Timestamp\n+protobuf.options.(gogoproto.goproto_stringer)=false"
    }
  }
}