{ "$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" } } }