{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/canonical/main/json-schema/canonical-cluster-put-schema.json",
  "title": "ClusterPut",
  "description": "ClusterPut represents the fields required to bootstrap or join a LXD\ncluster.",
  "x-generated": "2026-10-04",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/canonical-cluster-api-openapi.yml#/components/schemas/ClusterPut",
  "properties": {
    "cluster_address": {
      "description": "The address of the cluster you wish to join",
      "type": "string",
      "x-go-name": "ClusterAddress"
    },
    "cluster_certificate": {
      "description": "The expected certificate (X509 PEM encoded) for the cluster",
      "type": "string",
      "x-go-name": "ClusterCertificate"
    },
    "cluster_token": {
      "description": "The cluster join token for the cluster you're trying to join\n\nAPI extension: explicit_trust_token",
      "type": "string",
      "x-go-name": "ClusterToken"
    },
    "enabled": {
      "description": "Whether clustering is enabled",
      "type": "boolean",
      "x-go-name": "Enabled"
    },
    "member_config": {
      "description": "List of member configuration keys (used during join)\n\nAPI extension: clustering_join",
      "items": {
        "$ref": "#/$defs/ClusterMemberConfigKey"
      },
      "type": "array",
      "x-go-name": "MemberConfig"
    },
    "server_address": {
      "description": "The local address to use for cluster communication\n\nAPI extension: clustering_join",
      "type": "string",
      "x-go-name": "ServerAddress"
    },
    "server_name": {
      "description": "Name of the cluster member answering the request",
      "type": "string",
      "x-go-name": "ServerName"
    }
  },
  "type": "object",
  "x-go-package": "github.com/canonical/lxd/shared/api",
  "$defs": {
    "ClusterMemberConfigKey": {
      "description": "The Value field is empty when getting clustering information with GET\n1.0/cluster, and should be filled by the joining node when performing a PUT\n1.0/cluster join request.",
      "properties": {
        "description": {
          "description": "A human friendly description key",
          "type": "string",
          "x-go-name": "Description"
        },
        "entity": {
          "description": "The kind of configuration key (network, storage-pool, ...)",
          "type": "string",
          "x-go-name": "Entity"
        },
        "key": {
          "description": "The name of the key",
          "type": "string",
          "x-go-name": "Key"
        },
        "name": {
          "description": "The name of the object requiring this key",
          "type": "string",
          "x-go-name": "Name"
        },
        "value": {
          "description": "The value on the answering cluster member",
          "type": "string",
          "x-go-name": "Value"
        }
      },
      "title": "ClusterMemberConfigKey represents a single config key that a new member of\nthe cluster is required to provide when joining.",
      "type": "object",
      "x-go-package": "github.com/canonical/lxd/shared/api"
    }
  }
}