mirror of
https://github.com/democratic-csi/democratic-csi.git
synced 2026-10-18 19:05:45 +02:00
implement normalized parameters, driver factory
This commit is contained in:
+15
-15
@@ -93,33 +93,33 @@ const packageDefinition = protoLoader.loadSync(PROTO_PATH, {
|
||||
const protoDescriptor = grpc.loadPackageDefinition(packageDefinition);
|
||||
const csi = protoDescriptor.csi.v1;
|
||||
|
||||
// include available drivers
|
||||
const { FreeNASDriver } = require("../src/driver/freenas");
|
||||
|
||||
logger.info("initializing csi driver: %s", options.driver);
|
||||
|
||||
let driver;
|
||||
switch (options.driver) {
|
||||
case "freenas-nfs":
|
||||
case "freenas-iscsi":
|
||||
driver = new FreeNASDriver({ logger, args, cache, package }, options);
|
||||
break;
|
||||
default:
|
||||
logger.error("invalid csi driver: %s", args.driver);
|
||||
break;
|
||||
try {
|
||||
driver = require("../src/driver/factory").factory({ logger, args, cache, package }, options);
|
||||
} catch (err) {
|
||||
logger.error(err.toString());
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
async function requestHandlerProxy(call, callback, serviceMethodName) {
|
||||
const cleansedCall = JSON.parse(JSON.stringify(call));
|
||||
for (const key in cleansedCall.request) {
|
||||
if (key.includes("secret")) {
|
||||
cleansedCall.request[key] = "redacted";
|
||||
}
|
||||
}
|
||||
try {
|
||||
logger.debug(
|
||||
logger.info(
|
||||
"new request - driver: %s method: %s call: %j",
|
||||
driver.constructor.name,
|
||||
serviceMethodName,
|
||||
call
|
||||
cleansedCall
|
||||
);
|
||||
//const response = await handler.call(driver, call);
|
||||
const response = await driver[serviceMethodName](call);
|
||||
logger.debug(
|
||||
logger.info(
|
||||
"new response - driver: %s method: %s response: %j",
|
||||
driver.constructor.name,
|
||||
serviceMethodName,
|
||||
@@ -133,7 +133,7 @@ async function requestHandlerProxy(call, callback, serviceMethodName) {
|
||||
serviceMethodName,
|
||||
JSON.stringify(e)
|
||||
);
|
||||
console.log(e);
|
||||
|
||||
if (e.name == "GrpcError") {
|
||||
callback(e);
|
||||
} else {
|
||||
|
||||
@@ -5,7 +5,7 @@ httpConnection:
|
||||
host: server address
|
||||
port: 80
|
||||
username: root
|
||||
password:
|
||||
password:
|
||||
allowInsecure: true
|
||||
sshConnection:
|
||||
host: server address
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user