implement normalized parameters, driver factory

This commit is contained in:
Travis Glenn Hansen
2019-11-25 10:21:01 -07:00
parent 380caec9ed
commit 78fa1d8f2e
5 changed files with 62 additions and 34 deletions
+3 -3
View File
@@ -351,7 +351,7 @@ class ControllerZfsSshBaseDriver extends CsiBaseDriver {
case "snapshot":
try {
let tmpDetachedClone = JSON.parse(
driver.getParameterValue(
driver.getNormalizedParameterValue(
call.request.parameters,
"detachedVolumesFromSnapshots"
)
@@ -465,7 +465,7 @@ class ControllerZfsSshBaseDriver extends CsiBaseDriver {
case "volume":
try {
let tmpDetachedClone = JSON.parse(
driver.getParameterValue(
driver.getNormalizedParameterValue(
call.request.parameters,
"detachedVolumesFromVolumes"
)
@@ -1363,7 +1363,7 @@ class ControllerZfsSshBaseDriver extends CsiBaseDriver {
let detachedSnapshot = false;
try {
let tmpDetachedSnapshot = JSON.parse(
driver.getParameterValue(call.request.parameters, "detachedSnapshots")
driver.getNormalizedParameterValue(call.request.parameters, "detachedSnapshots")
); // snapshot class parameter
if (typeof tmpDetachedSnapshot === "boolean") {
detachedSnapshot = tmpDetachedSnapshot;
+13
View File
@@ -0,0 +1,13 @@
const { FreeNASDriver } = require("./freenas");
function factory(ctx, options) {
switch (options.driver) {
case "freenas-nfs":
case "freenas-iscsi":
return new FreeNASDriver(ctx, options);
default:
throw new Error("invalid csi driver: " + options.driver);
}
}
module.exports.factory = factory;
+30 -15
View File
@@ -1,5 +1,4 @@
const os = require("os");
const path = require("path");
const grpc = require("grpc");
const fs = require("fs");
const { GrpcError } = require("../utils/grpc");
@@ -31,24 +30,40 @@ class CsiBaseDriver {
* @param {*} parameters
* @param {*} key
*/
getParameterValue(parameters, key) {
getNormalizedParameterValue(parameters, key) {
const normalized = this.getNormalizedParameters(parameters);
return normalized[key];
}
getNormalizedParameters(parameters) {
const normalized = JSON.parse(JSON.stringify(parameters));
const base_key = "democratic-csi.org";
for (const key in parameters) {
let normalizedKey;
let prefixLength;
if (key.startsWith(`${base_key}/${this.options.instance_id}/`)) {
prefixLength = `${base_key}/${this.options.instance_id}/`.length;
normalizedKey = key.slice(prefixLength);
normalized[normalizedKey] = parameters[key];
delete normalized[key];
}
if (
this.options.instance_id &&
parameters[`${base_key}/${this.options.instance_id}/${key}`]
) {
return parameters[`${base_key}/${this.options.instance_id}/${key}`];
if (key.startsWith(`${base_key}/${this.options.driver}/`)) {
prefixLength = `${base_key}/${this.options.driver}/`.length;
normalizedKey = key.slice(prefixLength);
normalized[normalizedKey] = parameters[key];
delete normalized[key];
}
if (key.startsWith(`${base_key}/`)) {
prefixLength = `${base_key}/`.length;
normalizedKey = key.slice(prefixLength);
normalized[normalizedKey] = parameters[key];
delete normalized[key];
}
}
if (
this.options.driver &&
parameters[`${base_key}/${this.options.driver}/${key}`]
) {
return parameters[`${base_key}/${this.options.driver}/${key}`];
}
return parameters[key];
return normalized;
}
async GetPluginInfo(call) {