more robust TrueNAS Probe calls, better version detection
Signed-off-by: Travis Glenn Hansen <travisghansen@yahoo.com>
This commit is contained in:
parent
f607c2a6d5
commit
d73183e841
|
|
@ -107,6 +107,7 @@ if (!args.serverSocket && !args.serverAddress && !args.serverPort) {
|
|||
}
|
||||
|
||||
//console.log(args);
|
||||
//console.log(process.env);
|
||||
|
||||
const package = require("../package.json");
|
||||
args.version = package.version;
|
||||
|
|
|
|||
|
|
@ -617,9 +617,9 @@ class ControllerZfsBaseDriver extends CsiBaseDriver {
|
|||
);
|
||||
}
|
||||
|
||||
return { ready: { value: true } };
|
||||
return super.Probe(...arguments);
|
||||
} else {
|
||||
return { ready: { value: true } };
|
||||
return super.Probe(...arguments);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2196,6 +2196,15 @@ class FreeNASApiDriver extends CsiBaseDriver {
|
|||
);
|
||||
}
|
||||
|
||||
try {
|
||||
await httpApiClient.getSystemVersion();
|
||||
} catch (err) {
|
||||
throw new GrpcError(
|
||||
grpc.status.FAILED_PRECONDITION,
|
||||
`TrueNAS api is unavailable: ${err.getMessage()}`
|
||||
);
|
||||
}
|
||||
|
||||
if (!(await httpApiClient.getIsScale())) {
|
||||
throw new GrpcError(
|
||||
grpc.status.FAILED_PRECONDITION,
|
||||
|
|
@ -2203,9 +2212,9 @@ class FreeNASApiDriver extends CsiBaseDriver {
|
|||
);
|
||||
}
|
||||
|
||||
return { ready: { value: true } };
|
||||
return super.Probe(...arguments);
|
||||
} else {
|
||||
return { ready: { value: true } };
|
||||
return super.Probe(...arguments);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -243,7 +243,7 @@ class Api {
|
|||
* TrueNAS-SCALE-20.11-MASTER-20201127-092915
|
||||
*/
|
||||
try {
|
||||
response = await httpClient.get(endpoint);
|
||||
response = await httpClient.get(endpoint, null, { timeout: 5 * 1000 });
|
||||
versionResponses.v2 = response;
|
||||
if (response.statusCode == 200) {
|
||||
versionInfo.v2 = response.body;
|
||||
|
|
@ -267,7 +267,7 @@ class Api {
|
|||
* {"fullversion": "FreeNAS-11.2-U5 (c129415c52)", "name": "FreeNAS", "version": ""}
|
||||
*/
|
||||
try {
|
||||
response = await httpClient.get(endpoint);
|
||||
response = await httpClient.get(endpoint, null, { timeout: 5 * 1000 });
|
||||
versionResponses.v1 = response;
|
||||
if (response.statusCode == 200 && IsJsonString(response.body)) {
|
||||
versionInfo.v1 = response.body;
|
||||
|
|
|
|||
|
|
@ -150,14 +150,14 @@ class Client {
|
|||
this.logger.debug("FREENAS HTTP RESPONSE BODY: " + stringify(body));
|
||||
}
|
||||
|
||||
async get(endpoint, data) {
|
||||
async get(endpoint, data, options = {}) {
|
||||
const client = this;
|
||||
if (this.options.apiVersion == 1 && !endpoint.endsWith("/")) {
|
||||
endpoint += "/";
|
||||
}
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const options = client.getRequestCommonOptions();
|
||||
options = { ...client.getRequestCommonOptions(), ...options };
|
||||
options.method = "GET";
|
||||
options.url = this.getBaseURL() + endpoint;
|
||||
options.params = data;
|
||||
|
|
@ -172,14 +172,14 @@ class Client {
|
|||
});
|
||||
}
|
||||
|
||||
async post(endpoint, data) {
|
||||
async post(endpoint, data, options = {}) {
|
||||
const client = this;
|
||||
if (this.options.apiVersion == 1 && !endpoint.endsWith("/")) {
|
||||
endpoint += "/";
|
||||
}
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const options = client.getRequestCommonOptions();
|
||||
options = { ...client.getRequestCommonOptions(), ...options };
|
||||
options.method = "POST";
|
||||
options.url = this.getBaseURL() + endpoint;
|
||||
options.data = data;
|
||||
|
|
@ -195,14 +195,14 @@ class Client {
|
|||
});
|
||||
}
|
||||
|
||||
async put(endpoint, data) {
|
||||
async put(endpoint, data, options = {}) {
|
||||
const client = this;
|
||||
if (this.options.apiVersion == 1 && !endpoint.endsWith("/")) {
|
||||
endpoint += "/";
|
||||
}
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const options = client.getRequestCommonOptions();
|
||||
options = { ...client.getRequestCommonOptions(), ...options };
|
||||
options.method = "PUT";
|
||||
options.url = this.getBaseURL() + endpoint;
|
||||
options.data = data;
|
||||
|
|
@ -218,14 +218,14 @@ class Client {
|
|||
});
|
||||
}
|
||||
|
||||
async delete(endpoint, data) {
|
||||
async delete(endpoint, data, options = {}) {
|
||||
const client = this;
|
||||
if (this.options.apiVersion == 1 && !endpoint.endsWith("/")) {
|
||||
endpoint += "/";
|
||||
}
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
const options = client.getRequestCommonOptions();
|
||||
options = { ...client.getRequestCommonOptions(), ...options };
|
||||
options.method = "DELETE";
|
||||
options.url = this.getBaseURL() + endpoint;
|
||||
options.data = data;
|
||||
|
|
|
|||
|
|
@ -28,6 +28,34 @@ const FREENAS_SYSTEM_VERSION_CACHE_KEY = "freenas:system_version";
|
|||
const __REGISTRY_NS__ = "FreeNASSshDriver";
|
||||
|
||||
class FreeNASSshDriver extends ControllerZfsBaseDriver {
|
||||
/**
|
||||
* Ensure sane options are used etc
|
||||
* true = ready
|
||||
* false = not ready, but progressiong towards ready
|
||||
* throw error = faulty setup
|
||||
*
|
||||
* @param {*} call
|
||||
*/
|
||||
async Probe(call) {
|
||||
const driver = this;
|
||||
|
||||
if (driver.ctx.args.csiMode.includes("controller")) {
|
||||
const httpApiClient = await driver.getTrueNASHttpApiClient();
|
||||
try {
|
||||
await httpApiClient.getSystemVersion();
|
||||
} catch (err) {
|
||||
throw new GrpcError(
|
||||
grpc.status.FAILED_PRECONDITION,
|
||||
`TrueNAS api is unavailable: ${err.getMessage()}`
|
||||
);
|
||||
}
|
||||
|
||||
return super.Probe(...arguments);
|
||||
} else {
|
||||
return super.Probe(...arguments);
|
||||
}
|
||||
}
|
||||
|
||||
getExecClient() {
|
||||
return registry.get(`${__REGISTRY_NS__}:exec_client`, () => {
|
||||
return new SshClient({
|
||||
|
|
@ -2235,7 +2263,7 @@ class FreeNASSshDriver extends ControllerZfsBaseDriver {
|
|||
* TrueNAS-SCALE-20.11-MASTER-20201127-092915
|
||||
*/
|
||||
try {
|
||||
response = await httpClient.get(endpoint);
|
||||
response = await httpClient.get(endpoint, null, { timeout: 5 * 1000 });
|
||||
versionResponses.v2 = response;
|
||||
if (response.statusCode == 200) {
|
||||
versionInfo.v2 = response.body;
|
||||
|
|
@ -2259,7 +2287,7 @@ class FreeNASSshDriver extends ControllerZfsBaseDriver {
|
|||
* {"fullversion": "FreeNAS-11.2-U5 (c129415c52)", "name": "FreeNAS", "version": ""}
|
||||
*/
|
||||
try {
|
||||
response = await httpClient.get(endpoint);
|
||||
response = await httpClient.get(endpoint, null, { timeout: 5 * 1000 });
|
||||
versionResponses.v1 = response;
|
||||
if (response.statusCode == 200 && IsJsonString(response.body)) {
|
||||
versionInfo.v1 = response.body;
|
||||
|
|
|
|||
|
|
@ -3,3 +3,7 @@ if (typeof String.prototype.replaceAll == "undefined") {
|
|||
return this.replace(new RegExp(match, "g"), () => replace);
|
||||
};
|
||||
}
|
||||
|
||||
Array.prototype.random = function () {
|
||||
return this[Math.floor(Math.random() * this.length)];
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue