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(args);
|
||||||
|
//console.log(process.env);
|
||||||
|
|
||||||
const package = require("../package.json");
|
const package = require("../package.json");
|
||||||
args.version = package.version;
|
args.version = package.version;
|
||||||
|
|
|
||||||
|
|
@ -617,9 +617,9 @@ class ControllerZfsBaseDriver extends CsiBaseDriver {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return { ready: { value: true } };
|
return super.Probe(...arguments);
|
||||||
} else {
|
} 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())) {
|
if (!(await httpApiClient.getIsScale())) {
|
||||||
throw new GrpcError(
|
throw new GrpcError(
|
||||||
grpc.status.FAILED_PRECONDITION,
|
grpc.status.FAILED_PRECONDITION,
|
||||||
|
|
@ -2203,9 +2212,9 @@ class FreeNASApiDriver extends CsiBaseDriver {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return { ready: { value: true } };
|
return super.Probe(...arguments);
|
||||||
} else {
|
} else {
|
||||||
return { ready: { value: true } };
|
return super.Probe(...arguments);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -243,7 +243,7 @@ class Api {
|
||||||
* TrueNAS-SCALE-20.11-MASTER-20201127-092915
|
* TrueNAS-SCALE-20.11-MASTER-20201127-092915
|
||||||
*/
|
*/
|
||||||
try {
|
try {
|
||||||
response = await httpClient.get(endpoint);
|
response = await httpClient.get(endpoint, null, { timeout: 5 * 1000 });
|
||||||
versionResponses.v2 = response;
|
versionResponses.v2 = response;
|
||||||
if (response.statusCode == 200) {
|
if (response.statusCode == 200) {
|
||||||
versionInfo.v2 = response.body;
|
versionInfo.v2 = response.body;
|
||||||
|
|
@ -267,7 +267,7 @@ class Api {
|
||||||
* {"fullversion": "FreeNAS-11.2-U5 (c129415c52)", "name": "FreeNAS", "version": ""}
|
* {"fullversion": "FreeNAS-11.2-U5 (c129415c52)", "name": "FreeNAS", "version": ""}
|
||||||
*/
|
*/
|
||||||
try {
|
try {
|
||||||
response = await httpClient.get(endpoint);
|
response = await httpClient.get(endpoint, null, { timeout: 5 * 1000 });
|
||||||
versionResponses.v1 = response;
|
versionResponses.v1 = response;
|
||||||
if (response.statusCode == 200 && IsJsonString(response.body)) {
|
if (response.statusCode == 200 && IsJsonString(response.body)) {
|
||||||
versionInfo.v1 = response.body;
|
versionInfo.v1 = response.body;
|
||||||
|
|
|
||||||
|
|
@ -150,14 +150,14 @@ class Client {
|
||||||
this.logger.debug("FREENAS HTTP RESPONSE BODY: " + stringify(body));
|
this.logger.debug("FREENAS HTTP RESPONSE BODY: " + stringify(body));
|
||||||
}
|
}
|
||||||
|
|
||||||
async get(endpoint, data) {
|
async get(endpoint, data, options = {}) {
|
||||||
const client = this;
|
const client = this;
|
||||||
if (this.options.apiVersion == 1 && !endpoint.endsWith("/")) {
|
if (this.options.apiVersion == 1 && !endpoint.endsWith("/")) {
|
||||||
endpoint += "/";
|
endpoint += "/";
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const options = client.getRequestCommonOptions();
|
options = { ...client.getRequestCommonOptions(), ...options };
|
||||||
options.method = "GET";
|
options.method = "GET";
|
||||||
options.url = this.getBaseURL() + endpoint;
|
options.url = this.getBaseURL() + endpoint;
|
||||||
options.params = data;
|
options.params = data;
|
||||||
|
|
@ -172,14 +172,14 @@ class Client {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async post(endpoint, data) {
|
async post(endpoint, data, options = {}) {
|
||||||
const client = this;
|
const client = this;
|
||||||
if (this.options.apiVersion == 1 && !endpoint.endsWith("/")) {
|
if (this.options.apiVersion == 1 && !endpoint.endsWith("/")) {
|
||||||
endpoint += "/";
|
endpoint += "/";
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const options = client.getRequestCommonOptions();
|
options = { ...client.getRequestCommonOptions(), ...options };
|
||||||
options.method = "POST";
|
options.method = "POST";
|
||||||
options.url = this.getBaseURL() + endpoint;
|
options.url = this.getBaseURL() + endpoint;
|
||||||
options.data = data;
|
options.data = data;
|
||||||
|
|
@ -195,14 +195,14 @@ class Client {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async put(endpoint, data) {
|
async put(endpoint, data, options = {}) {
|
||||||
const client = this;
|
const client = this;
|
||||||
if (this.options.apiVersion == 1 && !endpoint.endsWith("/")) {
|
if (this.options.apiVersion == 1 && !endpoint.endsWith("/")) {
|
||||||
endpoint += "/";
|
endpoint += "/";
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const options = client.getRequestCommonOptions();
|
options = { ...client.getRequestCommonOptions(), ...options };
|
||||||
options.method = "PUT";
|
options.method = "PUT";
|
||||||
options.url = this.getBaseURL() + endpoint;
|
options.url = this.getBaseURL() + endpoint;
|
||||||
options.data = data;
|
options.data = data;
|
||||||
|
|
@ -218,14 +218,14 @@ class Client {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async delete(endpoint, data) {
|
async delete(endpoint, data, options = {}) {
|
||||||
const client = this;
|
const client = this;
|
||||||
if (this.options.apiVersion == 1 && !endpoint.endsWith("/")) {
|
if (this.options.apiVersion == 1 && !endpoint.endsWith("/")) {
|
||||||
endpoint += "/";
|
endpoint += "/";
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const options = client.getRequestCommonOptions();
|
options = { ...client.getRequestCommonOptions(), ...options };
|
||||||
options.method = "DELETE";
|
options.method = "DELETE";
|
||||||
options.url = this.getBaseURL() + endpoint;
|
options.url = this.getBaseURL() + endpoint;
|
||||||
options.data = data;
|
options.data = data;
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,34 @@ const FREENAS_SYSTEM_VERSION_CACHE_KEY = "freenas:system_version";
|
||||||
const __REGISTRY_NS__ = "FreeNASSshDriver";
|
const __REGISTRY_NS__ = "FreeNASSshDriver";
|
||||||
|
|
||||||
class FreeNASSshDriver extends ControllerZfsBaseDriver {
|
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() {
|
getExecClient() {
|
||||||
return registry.get(`${__REGISTRY_NS__}:exec_client`, () => {
|
return registry.get(`${__REGISTRY_NS__}:exec_client`, () => {
|
||||||
return new SshClient({
|
return new SshClient({
|
||||||
|
|
@ -2235,7 +2263,7 @@ class FreeNASSshDriver extends ControllerZfsBaseDriver {
|
||||||
* TrueNAS-SCALE-20.11-MASTER-20201127-092915
|
* TrueNAS-SCALE-20.11-MASTER-20201127-092915
|
||||||
*/
|
*/
|
||||||
try {
|
try {
|
||||||
response = await httpClient.get(endpoint);
|
response = await httpClient.get(endpoint, null, { timeout: 5 * 1000 });
|
||||||
versionResponses.v2 = response;
|
versionResponses.v2 = response;
|
||||||
if (response.statusCode == 200) {
|
if (response.statusCode == 200) {
|
||||||
versionInfo.v2 = response.body;
|
versionInfo.v2 = response.body;
|
||||||
|
|
@ -2259,7 +2287,7 @@ class FreeNASSshDriver extends ControllerZfsBaseDriver {
|
||||||
* {"fullversion": "FreeNAS-11.2-U5 (c129415c52)", "name": "FreeNAS", "version": ""}
|
* {"fullversion": "FreeNAS-11.2-U5 (c129415c52)", "name": "FreeNAS", "version": ""}
|
||||||
*/
|
*/
|
||||||
try {
|
try {
|
||||||
response = await httpClient.get(endpoint);
|
response = await httpClient.get(endpoint, null, { timeout: 5 * 1000 });
|
||||||
versionResponses.v1 = response;
|
versionResponses.v1 = response;
|
||||||
if (response.statusCode == 200 && IsJsonString(response.body)) {
|
if (response.statusCode == 200 && IsJsonString(response.body)) {
|
||||||
versionInfo.v1 = response.body;
|
versionInfo.v1 = response.body;
|
||||||
|
|
|
||||||
|
|
@ -3,3 +3,7 @@ if (typeof String.prototype.replaceAll == "undefined") {
|
||||||
return this.replace(new RegExp(match, "g"), () => replace);
|
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