Add a standalone gateway node to an existing cluster. To join a cluster, a node needs to have a node IP address configured in addition to a management IP address. The useAdminVnodeAsPnodeAddress option allows the management address to be used as the node address once the node joins the cluster.
Once configured to join the cluster, a reboot of the joining node is required, and any existing configuration on the joining node will be erased.
curl -X 'POST'
-H "X-Subsystem-User: [[apiKey]]"
\
-H "X-Subsystem-Password: [[apiKey]]"
\
-H "X-Api-Key: [[apiKey]]"
\
-H "Authorization: Basic [[basicHash]]"
\
-H
'Accept: application/json'
-H
'Content-Type: application/json'
'https://172.27.146.40:8444/v9/storage/file-devices/join-cluster'
-d
''
import http.client
conn = http.client.HTTPSConnection("172.27.146.40:8444")
payload = "{\"clusterName\":\"Cluster1\",\"existingIpAddress\":\"10.1.2.3\",\"useAdminVnodeAsPnodeAddress\":false}"
headers = {
'Authorization': "Basic REPLACE_BASIC_AUTH",
'content-type': "application/json"
}
conn.request("POST", "/v9/storage/file-devices/join-cluster", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))require 'uri'
require 'net/http'
require 'openssl'
url = URI("https://172.27.146.40:8444/v9/storage/file-devices/join-cluster")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic REPLACE_BASIC_AUTH'
request["content-type"] = 'application/json'
request.body = "{\"clusterName\":\"Cluster1\",\"existingIpAddress\":\"10.1.2.3\",\"useAdminVnodeAsPnodeAddress\":false}"
response = http.request(request)
puts response.read_bodyconst data = JSON.stringify({
"clusterName": "Cluster1",
"existingIpAddress": "10.1.2.3",
"useAdminVnodeAsPnodeAddress": false
});
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("POST", "https://172.27.146.40:8444/v9/storage/file-devices/join-cluster");
xhr.setRequestHeader("Authorization", "Basic REPLACE_BASIC_AUTH");
xhr.setRequestHeader("content-type", "application/json");
xhr.send(data);HttpResponse<String> response = Unirest.post("https://172.27.146.40:8444/v9/storage/file-devices/join-cluster")
.header("Authorization", "Basic REPLACE_BASIC_AUTH")
.header("content-type", "application/json")
.body("{\"clusterName\":\"Cluster1\",\"existingIpAddress\":\"10.1.2.3\",\"useAdminVnodeAsPnodeAddress\":false}")
.asString();import Foundation
let headers = [
"Authorization": "Basic REPLACE_BASIC_AUTH",
"content-type": "application/json"
]
let parameters = [
"clusterName": "Cluster1",
"existingIpAddress": "10.1.2.3",
"useAdminVnodeAsPnodeAddress": false
] as [String : Any]
let postData = JSONSerialization.data(withJSONObject: parameters, options: [])
let request = NSMutableURLRequest(url: NSURL(string: "https://172.27.146.40:8444/v9/storage/file-devices/join-cluster")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "8444",
CURLOPT_URL => "https://172.27.146.40:8444/v9/storage/file-devices/join-cluster",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\"clusterName\":\"Cluster1\",\"existingIpAddress\":\"10.1.2.3\",\"useAdminVnodeAsPnodeAddress\":false}",
CURLOPT_HTTPHEADER => [
"Authorization: Basic REPLACE_BASIC_AUTH",
"content-type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(hnd, CURLOPT_URL, "https://172.27.146.40:8444/v9/storage/file-devices/join-cluster");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Basic REPLACE_BASIC_AUTH");
headers = curl_slist_append(headers, "content-type: application/json");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, "{\"clusterName\":\"Cluster1\",\"existingIpAddress\":\"10.1.2.3\",\"useAdminVnodeAsPnodeAddress\":false}");
CURLcode ret = curl_easy_perform(hnd);var client = new RestClient("https://172.27.146.40:8444/v9/storage/file-devices/join-cluster");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Basic REPLACE_BASIC_AUTH");
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\"clusterName\":\"Cluster1\",\"existingIpAddress\":\"10.1.2.3\",\"useAdminVnodeAsPnodeAddress\":false}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);clusterNamestringName for the cluster to create or join
Name for the cluster to create or join
"Cluster1"existingIpAddressstringIP address of a node within the cluster
IP address of a node within the cluster
"10.1.2.3"useAdminVnodeAsPnodeAddressbooleanTrue indicates that the current admin IP address should be used as the new cluster node address. If a cluster node address already exists, this option will be ignored and the existing cluster node address will be used to join the cluster
True indicates that the current admin IP address should be used as the new cluster node address. If a cluster node address already exists, this option will be ignored and the existing cluster node address will be used to join the cluster
{
"clusterName": "Cluster1",
"existingIpAddress": "10.1.2.3",
"useAdminVnodeAsPnodeAddress": false
}