mirror of
https://github.com/democratic-csi/democratic-csi.git
synced 2026-10-22 10:52:22 +02:00
implement normalized parameters, driver factory
This commit is contained in:
@@ -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