better errors around versionInfo checks for FreeNAS

This commit is contained in:
Travis Glenn Hansen 2020-12-05 14:10:03 -07:00
parent d4ab4fa4fe
commit 1fac9067f3
1 changed files with 44 additions and 12 deletions

View File

@ -3,6 +3,7 @@ const { GrpcError, grpc } = require("../../utils/grpc");
const HttpClient = require("./http").Client;
const Handlebars = require("handlebars");
const { version } = require("uuid");
// freenas properties
const FREENAS_NFS_SHARE_PROPERTY_NAME = "democratic-csi:freenas_nfs_share_id";
@ -1776,6 +1777,8 @@ class FreeNASDriver extends ControllerZfsSshBaseDriver {
let response;
const startApiVersion = httpClient.getApiVersion();
const versionInfo = {};
const versionErrors = {};
const versionResponses = {};
httpClient.setApiVersion(2);
/**
@ -1785,14 +1788,21 @@ class FreeNASDriver extends ControllerZfsSshBaseDriver {
*/
try {
response = await httpClient.get(endpoint);
versionResponses.v2 = response;
if (response.statusCode == 200) {
versionInfo.v2 = response.body;
}
// return immediately to save on resources and silly requests
await this.setVersionInfoCache(versionInfo);
return versionInfo;
} catch (e) {}
// return immediately to save on resources and silly requests
await this.setVersionInfoCache(versionInfo);
// reset apiVersion
httpClient.setApiVersion(startApiVersion);
return versionInfo;
}
} catch (e) {
versionErrors.v2 = e;
}
httpClient.setApiVersion(1);
/**
@ -1801,17 +1811,39 @@ class FreeNASDriver extends ControllerZfsSshBaseDriver {
*/
try {
response = await httpClient.get(endpoint);
if (response.statusCode == 200) {
versionResponses.v1 = response;
if (response.statusCode == 200 && IsJsonString(response.body)) {
versionInfo.v1 = response.body;
await this.setVersionInfoCache(versionInfo);
// reset apiVersion
httpClient.setApiVersion(startApiVersion);
return versionInfo;
}
} catch (e) {}
} catch (e) {
versionErrors.v1 = e;
}
// reset apiVersion
httpClient.setApiVersion(startApiVersion);
await this.setVersionInfoCache(versionInfo);
return versionInfo;
// throw error if cannot get v1 or v2 data
// likely bad creds/url
throw new GrpcError(
grpc.status.UNKNOWN,
`FreeNAS error getting system version info: ${JSON.stringify({
errors: versionErrors,
responses: versionResponses,
})}`
);
}
}
function IsJsonString(str) {
try {
JSON.parse(str);
} catch (e) {
return false;
}
return true;
}
module.exports.FreeNASDriver = FreeNASDriver;