MethodPathDescription
GET/v1/boostrapGet the local node’s bootstrap status
POST/v1/bootstrap/{action}Initiate bootstrapping

Get bootstrap status

GET /v1/bootstrap

Get the local node’s bootstrap status.

This request is accepted as soon the cluster software is installed and before the node is part of an active cluster.

Once the node is part of an active cluster, authentication is required.

Request

Example HTTP request

GET /bootstrap

Headers

KeyValueDescription
Acceptapplication/jsonAccepted media type

Response

The JSON response object contains a bootstrap_status object and a local_node_info object.

The bootstrap_status object contains the following information:

FieldDescription
stateCurrent bootstrap state.

idle: No bootstrapping started.

initiated: Bootstrap request received.

creating_cluster: In the process of creating a new cluster.

recovering_cluster: In the process of recovering a cluster.

joining_cluster: In the process of joining an existing cluster.

error: The last bootstrap action failed.

completed: The last bootstrap action completed successfully.
start_timeBootstrap process start time
end_timeBootstrap process end time
error_codeIf state is error, this error code describes the type of error encountered.
error_detailsAn error-specific object that may contain additional information about the error. A common field in use is message which provides a more verbose error message.

The local_node_info object is a subset of a node object that provides information about the node configuration.

Example JSON body

{
    "bootstrap_status": {
        "start_time": "2014-08-29T11:19:49Z",
        "end_time": "2014-08-29T11:19:49Z",
        "state": "completed"
    },
    "local_node_info": {
        "uid": 3,
        "software_version": "0.90.0-1",
        "cores": 2,
        "ephemeral_storage_path": "/var/opt/redislabs/tmp",
        "ephemeral_storage_size": 1018889.8304,
        "os_version": "Ubuntu 14.04 LTS",
        "persistent_storage_path": "/var/opt/redislabs/persist/redis",
        "persistent_storage_size": 1018889.8304,
        "total_memory": 24137,
        "uptime": 50278,
        "available_addrs": [{
                                 "address": "172.16.50.122",
                                 "format": "ipv4",
                                 "if_name": "eth0",
                                 "private": true
                             },
                             {
                                 "address": "10.0.3.1",
                                 "format": "ipv4",
                                 "if_name": "lxcbr0",
                                 "private": true
                             },
                             {
                                 "address": "172.17.0.1",
                                 "format": "ipv4",
                                 "if_name": "docker0",
                                 "private": true
                             },
                            {
                                 "address": "2001:db8:0:f101::1",
                                 "format": "ipv6",
                                 "if_name": "eth0",
                                 "private": false
                            }]
    }
}

Error codes

CodeDescription
config_errorAn error related to the bootstrap configuration provided (e.g. bad JSON).
connect_errorFailed to connect to cluster (e.g. FQDN DNS could not resolve, no/wrong node IP provided, etc.
access_deniedInvalid credentials supplied.
invalid_licenseThe license string provided is invalid. Additional info can be fetched from the error_details object, which includes the violation code in case the license is valid but its terms are violated.
repair_requiredCluster is in degraded mode and can only accept replacement nodes. When this happens, error_details contains two fields: failed_nodes and replace_candidate. The failed_nodes field is an array of objects, each describing a failed node with at least a uid field and an optional rack_id. replace_candidate is the UID of the node most suitable for replacement.
insufficient_node_memoryAn attempt to replace a dead node fails because the replaced node does not have enough memory. When this happens, error_details contains a required_memory field which indicates the node memory requirement.
insufficient_node_flashAn attempt to replace a dead node fails because the replaced node does not have enough flash. When this happens, error_details contains a required_flash field which indicates the node flash requirement.
time_not_syncAn attempt to join a node with system time not synchronized with the rest of the cluster.
rack_id_requiredAn attempt to join a node with no rack_id in a rack-aware cluster. In addition, a current_rack_ids field will include an array of currently used rack ids.
socket_directory_mismatchAn attempt to join a node with a socket directory setting that differs from the cluster
node_config_mismatchAn attempt to join a node with a configuration setting (e.g. confdir, osuser, installdir) that differs from the cluster
path_errorA needed path does not exist or is not accessable.
internal_errorA different, unspecified internal error was encountered.

Status codes

CodeDescription
200 OKNo error

Start bootstrapping

POST /v1/bootstrap/{action}

Initiate bootstrapping.

The request must contain a bootstrap configuration JSON object, as described in Object attributes or a minimal subset.

Bootstrapping is permitted only when the current bootstrap state is idle or error (in which case the process will restart with the new configuration).

This request is asynchronous - once the request has been accepted, the caller is expected to poll bootstrap status while waiting for it to complete.

Request

Example HTTP request

POST /bootstrap/create_cluster

Example JSON body

Join cluster
{
    "action": "join_cluster",
    "cluster": {
       "nodes":[ "1.1.1.1", "2.2.2.2" ]
    },
    "node": {
       "paths": {
          "persistent_path": "/path/to/persistent/storage",
          "ephemeral_path": "/path/to/ephemeral/storage",
          "bigstore_path": "/path/to/bigstore/storage"
       },
       "bigstore_driver": "speedb",
       "identity": {
          "addr":"1.2.3.4",
          "external_addr":["2001:0db8:85a3:0000:0000:8a2e:0370:7334", "3.4.5.6"]
       }
    },
    "credentials": {
       "username": "my_username",
       "password": "my_password"
    }
}
Create cluster
{
    "action": "create_cluster",
    "cluster": {
       "nodes": [],
       "name": "my.cluster"
    },
    "node": {
       "paths": {
          "persistent_path": "/path/to/persistent/storage",
          "ephemeral_path": "/path/to/ephemeral/storage",
          "bigstore_path": "/path/to/bigredis/storage"
       },
       "identity": {
          "addr":"1.2.3.4",
          "external_addr":["2001:0db8:85a3:0000:0000:8a2e:0370:7334", "3.4.5.6"]
       },
       "bigstore_driver": "rocksdb"
    },
    "license": "----- LICENSE START -----\ndi+iK...KniI9\n----- LICENSE END -----\n",
    "credentials": {
       "username": "my_username",
       "password": "my_password"
    }
}

Headers

KeyValueDescription
Hostcnm.cluster.fqdnDomain name
Acceptapplication/jsonAccepted media type
Hostcnm.cluster.fqdnDomain name
Acceptapplication/jsonAccepted media type

Request body

Include a bootstrap object in the request body.

Response

Status codes

CodeDescription
200 OKRequest received and processing begins.
409 ConflictBootstrap already in progress (check state)