From 1fac9067f39180011e518a52099f0567ef4a0b5f Mon Sep 17 00:00:00 2001 From: Travis Glenn Hansen Date: Sat, 5 Dec 2020 14:10:03 -0700 Subject: [PATCH 1/2] better errors around versionInfo checks for FreeNAS --- src/driver/freenas/index.js | 56 +++++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 12 deletions(-) diff --git a/src/driver/freenas/index.js b/src/driver/freenas/index.js index 64ce63a..2724fe4 100644 --- a/src/driver/freenas/index.js +++ b/src/driver/freenas/index.js @@ -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; From 6ddf84d2403c1fdeeba79e5dee34779d9d4ba53c Mon Sep 17 00:00:00 2001 From: Travis Glenn Hansen Date: Sat, 5 Dec 2020 15:57:16 -0700 Subject: [PATCH 2/2] remove erroneous dep --- src/driver/freenas/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/driver/freenas/index.js b/src/driver/freenas/index.js index 2724fe4..cce0717 100644 --- a/src/driver/freenas/index.js +++ b/src/driver/freenas/index.js @@ -3,7 +3,6 @@ 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";