From ff636544554e0feb9a2890c52dfedcf28df5fbf0 Mon Sep 17 00:00:00 2001 From: Travis Glenn Hansen Date: Fri, 22 Nov 2019 21:00:44 -0700 Subject: [PATCH] prep work for aggregate drivers --- Dockerfile | 5 +++++ bin/democratic-csi | 8 +------ examples/freenas-iscsi.yaml | 2 ++ examples/freenas-nfs.yaml | 2 ++ src/driver/controller-zfs-ssh/index.js | 12 ++++++++--- src/driver/freenas/index.js | 4 ++-- src/driver/index.js | 30 ++++++++++++++++++++++++++ 7 files changed, 51 insertions(+), 12 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0b3ea00..8e12803 100644 --- a/Dockerfile +++ b/Dockerfile @@ -53,5 +53,10 @@ COPY --chown=csi:csi . . USER root +# remove build deps +#RUN apt-get update && \ +# apt-get purge -y python make gcc g++ && \ +# rm -rf /var/lib/apt/lists/* + EXPOSE 50051 ENTRYPOINT [ "bin/democratic-csi" ] diff --git a/bin/democratic-csi b/bin/democratic-csi index 328f679..dbb0650 100755 --- a/bin/democratic-csi +++ b/bin/democratic-csi @@ -8,12 +8,6 @@ const args = require("yargs") .env("DEMOCRATIC_CSI") .scriptName("democratic-csi") .usage("$0 [options]") - .option("driver", { - alias: "d", - describe: "driver", - choices: ["freenas-nfs", "freenas-iscsi"] - }) - .demandOption(["driver"], "driver is required") .option("driver-config-file", { describe: "provide a path to driver config file", config: true, @@ -105,7 +99,7 @@ const { FreeNASDriver } = require("../src/driver/freenas"); logger.info("initializing csi driver: %s", args.driver); let driver; -switch (args.driver) { +switch (options.driver) { case "freenas-nfs": case "freenas-iscsi": driver = new FreeNASDriver({ logger, args, cache, package }, options); diff --git a/examples/freenas-iscsi.yaml b/examples/freenas-iscsi.yaml index 1ab158f..0b72554 100644 --- a/examples/freenas-iscsi.yaml +++ b/examples/freenas-iscsi.yaml @@ -1,3 +1,5 @@ +driver: freenas-iscsi +instance_id: httpConnection: protocol: http host: server address diff --git a/examples/freenas-nfs.yaml b/examples/freenas-nfs.yaml index b9c8479..5d667b1 100644 --- a/examples/freenas-nfs.yaml +++ b/examples/freenas-nfs.yaml @@ -1,3 +1,5 @@ +driver: freenas-nfs +instance_id: httpConnection: protocol: http host: server address diff --git a/src/driver/controller-zfs-ssh/index.js b/src/driver/controller-zfs-ssh/index.js index 2e054cd..f0b719b 100644 --- a/src/driver/controller-zfs-ssh/index.js +++ b/src/driver/controller-zfs-ssh/index.js @@ -351,7 +351,10 @@ class ControllerZfsSshBaseDriver extends CsiBaseDriver { case "snapshot": try { let tmpDetachedClone = JSON.parse( - call.request.parameters.detachedVolumesFromSnapshots + driver.getParameterValue( + call.request.parameters, + "detachedVolumesFromSnapshots" + ) ); if (typeof tmpDetachedClone === "boolean") { detachedClone = tmpDetachedClone; @@ -462,7 +465,10 @@ class ControllerZfsSshBaseDriver extends CsiBaseDriver { case "volume": try { let tmpDetachedClone = JSON.parse( - call.request.parameters.detachedVolumesFromVolumes + driver.getParameterValue( + call.request.parameters, + "detachedVolumesFromVolumes" + ) ); if (typeof tmpDetachedClone === "boolean") { detachedClone = tmpDetachedClone; @@ -1357,7 +1363,7 @@ class ControllerZfsSshBaseDriver extends CsiBaseDriver { let detachedSnapshot = false; try { let tmpDetachedSnapshot = JSON.parse( - call.request.parameters.detachedSnapshots + driver.getParameterValue(call.request.parameters, "detachedSnapshots") ); // snapshot class parameter if (typeof tmpDetachedSnapshot === "boolean") { detachedSnapshot = tmpDetachedSnapshot; diff --git a/src/driver/freenas/index.js b/src/driver/freenas/index.js index 514c072..d2635d5 100644 --- a/src/driver/freenas/index.js +++ b/src/driver/freenas/index.js @@ -18,7 +18,7 @@ class FreeNASDriver extends ControllerZfsSshBaseDriver { * into various calls such as GetControllerCapabilities etc */ getDriverZfsResourceType() { - switch (this.ctx.args.driver) { + switch (this.options.driver) { case "freenas-nfs": return "filesystem"; case "freenas-iscsi": @@ -35,7 +35,7 @@ class FreeNASDriver extends ControllerZfsSshBaseDriver { } getDriverShareType() { - switch (this.ctx.args.driver) { + switch (this.options.driver) { case "freenas-nfs": return "nfs"; case "freenas-iscsi": diff --git a/src/driver/index.js b/src/driver/index.js index f2b4074..7872506 100644 --- a/src/driver/index.js +++ b/src/driver/index.js @@ -21,6 +21,36 @@ class CsiBaseDriver { this.options = options; } + /** + * abstract way of retrieving values from parameters/secrets + * in order of preference: + * - democratic-csi.org/{instance_id}/{key} + * - democratic-csi.org/{driver}/{key} + * - {key} + * + * @param {*} parameters + * @param {*} key + */ + getParameterValue(parameters, key) { + const base_key = "democratic-csi.org"; + + if ( + this.options.instance_id && + parameters[`${base_key}/${this.options.instance_id}/${key}`] + ) { + return parameters[`${base_key}/${this.options.instance_id}/${key}`]; + } + + if ( + this.options.driver && + parameters[`${base_key}/${this.options.driver}/${key}`] + ) { + return parameters[`${base_key}/${this.options.driver}/${key}`]; + } + + return parameters[key]; + } + async GetPluginInfo(call) { return { name: this.ctx.args.csiName,