From ccc5ea206de804cc4827442fdd7acfcbed186965 Mon Sep 17 00:00:00 2001 From: Travis Glenn Hansen Date: Wed, 8 Sep 2021 13:26:26 -0600 Subject: [PATCH] support templates for nfs share comment Signed-off-by: Travis Glenn Hansen --- CHANGELOG.md | 7 ++++ examples/freenas-api-nfs.yaml | 1 + examples/freenas-nfs.yaml | 1 + package-lock.json | 64 +++++++++++++++++------------------ package.json | 2 +- src/driver/freenas/api.js | 23 +++++++++++-- src/driver/freenas/ssh.js | 25 ++++++++++++-- 7 files changed, 85 insertions(+), 38 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ec7fbf..1828d5e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# v1.3.1 + +Released 2021-09-08 + +- support using a template for nfs share comment in `freenas-nfs` and + `freenas-api-nfs` (see #115) + # v1.3.0 Released 2021-09-02 diff --git a/examples/freenas-api-nfs.yaml b/examples/freenas-api-nfs.yaml index 0c59b8b..68084cb 100644 --- a/examples/freenas-api-nfs.yaml +++ b/examples/freenas-api-nfs.yaml @@ -48,6 +48,7 @@ zfs: #- "-m u:kube:full_set:allow" nfs: + #shareCommentTemplate: "{{ parameters.[csi.storage.k8s.io/pvc/namespace] }}-{{ parameters.[csi.storage.k8s.io/pvc/name] }}" shareHost: server address shareAlldirs: false shareAllowedHosts: [] diff --git a/examples/freenas-nfs.yaml b/examples/freenas-nfs.yaml index 6e778c8..3ebe09f 100644 --- a/examples/freenas-nfs.yaml +++ b/examples/freenas-nfs.yaml @@ -58,6 +58,7 @@ zfs: #- "-m u:kube:full_set:allow" nfs: + #shareCommentTemplate: "{{ parameters.[csi.storage.k8s.io/pvc/namespace] }}-{{ parameters.[csi.storage.k8s.io/pvc/name] }}" shareHost: server address shareAlldirs: false shareAllowedHosts: [] diff --git a/package-lock.json b/package-lock.json index 2f4b754..3815d4e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "democratic-csi", - "version": "1.2.0", + "version": "1.3.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "democratic-csi", - "version": "1.2.0", + "version": "1.3.1", "license": "MIT", "dependencies": { "@grpc/grpc-js": "^1.3.6", @@ -311,9 +311,9 @@ "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" }, "node_modules/@types/node": { - "version": "16.7.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.10.tgz", - "integrity": "sha512-S63Dlv4zIPb8x6MMTgDq5WWRJQe56iBEY0O3SOFA9JrRienkOVDXSXBjjJw6HTNQYSE2JI6GMCR6LVbIMHJVvA==" + "version": "16.7.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.13.tgz", + "integrity": "sha512-pLUPDn+YG3FYEt/pHI74HmnJOWzeR+tOIQzUx93pi9M7D8OE7PSLr97HboXwk5F+JS+TLtWuzCOW97AHjmOXXA==" }, "node_modules/acorn": { "version": "7.4.1", @@ -723,9 +723,9 @@ } }, "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "node_modules/delayed-stream": { @@ -1063,9 +1063,9 @@ "dev": true }, "node_modules/fast-safe-stringify": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz", - "integrity": "sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, "node_modules/fecha": { "version": "4.2.1", @@ -2671,9 +2671,9 @@ "dev": true }, "node_modules/ssh2": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.3.0.tgz", - "integrity": "sha512-OjBQ5FR+ClYav3fRnvkhycmd5co5qEfofBaZEqVO3I4tKJLZqu+Ku4LN4nJSckjhqQnomqBqlCdvD3iGV+6isA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.4.0.tgz", + "integrity": "sha512-XvXwcXKvS452DyQvCa6Ct+chpucwc/UyxgliYz+rWXJ3jDHdtBb9xgmxJdMmnIn5bpgGAEV3KaEsH98ZGPHqwg==", "hasInstallScript": true, "dependencies": { "asn1": "^0.2.4", @@ -2888,9 +2888,9 @@ } }, "node_modules/uglify-js": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.1.tgz", - "integrity": "sha512-JhS3hmcVaXlp/xSo3PKY5R0JqKs5M3IV+exdLHW99qKvKivPO4Z8qbej6mte17SOPqAOVMjt/XGgWacnFSzM3g==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.2.tgz", + "integrity": "sha512-rtPMlmcO4agTUfz10CbgJ1k6UAoXM2gWb3GoMPPZB/+/Ackf8lNWk11K4rYi2D0apgoFRLtQOZhb+/iGNJq26A==", "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -3343,9 +3343,9 @@ "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" }, "@types/node": { - "version": "16.7.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.10.tgz", - "integrity": "sha512-S63Dlv4zIPb8x6MMTgDq5WWRJQe56iBEY0O3SOFA9JrRienkOVDXSXBjjJw6HTNQYSE2JI6GMCR6LVbIMHJVvA==" + "version": "16.7.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.13.tgz", + "integrity": "sha512-pLUPDn+YG3FYEt/pHI74HmnJOWzeR+tOIQzUx93pi9M7D8OE7PSLr97HboXwk5F+JS+TLtWuzCOW97AHjmOXXA==" }, "acorn": { "version": "7.4.1", @@ -3665,9 +3665,9 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "delayed-stream": { @@ -3932,9 +3932,9 @@ "dev": true }, "fast-safe-stringify": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz", - "integrity": "sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, "fecha": { "version": "4.2.1", @@ -5153,9 +5153,9 @@ "dev": true }, "ssh2": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.3.0.tgz", - "integrity": "sha512-OjBQ5FR+ClYav3fRnvkhycmd5co5qEfofBaZEqVO3I4tKJLZqu+Ku4LN4nJSckjhqQnomqBqlCdvD3iGV+6isA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.4.0.tgz", + "integrity": "sha512-XvXwcXKvS452DyQvCa6Ct+chpucwc/UyxgliYz+rWXJ3jDHdtBb9xgmxJdMmnIn5bpgGAEV3KaEsH98ZGPHqwg==", "requires": { "asn1": "^0.2.4", "bcrypt-pbkdf": "^1.0.2", @@ -5318,9 +5318,9 @@ "dev": true }, "uglify-js": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.1.tgz", - "integrity": "sha512-JhS3hmcVaXlp/xSo3PKY5R0JqKs5M3IV+exdLHW99qKvKivPO4Z8qbej6mte17SOPqAOVMjt/XGgWacnFSzM3g==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.2.tgz", + "integrity": "sha512-rtPMlmcO4agTUfz10CbgJ1k6UAoXM2gWb3GoMPPZB/+/Ackf8lNWk11K4rYi2D0apgoFRLtQOZhb+/iGNJq26A==", "optional": true }, "uri-js": { diff --git a/package.json b/package.json index 2db972f..ab8b339 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "democratic-csi", - "version": "1.3.0", + "version": "1.3.1", "description": "kubernetes csi driver framework", "main": "bin/democratic-csi", "scripts": { diff --git a/src/driver/freenas/api.js b/src/driver/freenas/api.js index 75b7acb..bd06a3c 100644 --- a/src/driver/freenas/api.js +++ b/src/driver/freenas/api.js @@ -196,6 +196,25 @@ class FreeNASApiDriver extends CsiBaseDriver { properties[FREENAS_NFS_SHARE_PROPERTY_NAME].value ) ) { + let nfsShareComment; + if (this.options.nfs.shareCommentTemplate) { + nfsShareComment = Handlebars.compile( + this.options.nfs.shareCommentTemplate + )({ + name: call.request.name, + parameters: call.request.parameters, + csi: { + name: this.ctx.args.csiName, + version: this.ctx.args.csiVersion, + }, + zfs: { + datasetName: datasetName, + }, + }); + } else { + nfsShareComment = `democratic-csi (${this.ctx.args.csiName}): ${datasetName}`; + } + switch (apiVersion) { case 1: case 2: @@ -203,7 +222,7 @@ class FreeNASApiDriver extends CsiBaseDriver { case 1: share = { nfs_paths: [properties.mountpoint.value], - nfs_comment: `democratic-csi (${this.ctx.args.csiName}): ${datasetName}`, + nfs_comment: nfsShareComment || "", nfs_network: this.options.nfs.shareAllowedNetworks.join(","), nfs_hosts: this.options.nfs.shareAllowedHosts.join(","), @@ -220,7 +239,7 @@ class FreeNASApiDriver extends CsiBaseDriver { case 2: share = { paths: [properties.mountpoint.value], - comment: `democratic-csi (${this.ctx.args.csiName}): ${datasetName}`, + comment: nfsShareComment || "", networks: this.options.nfs.shareAllowedNetworks, hosts: this.options.nfs.shareAllowedHosts, alldirs: this.options.nfs.shareAlldirs, diff --git a/src/driver/freenas/ssh.js b/src/driver/freenas/ssh.js index d0e488a..74c9e18 100644 --- a/src/driver/freenas/ssh.js +++ b/src/driver/freenas/ssh.js @@ -193,6 +193,25 @@ class FreeNASSshDriver extends ControllerZfsSshBaseDriver { properties[FREENAS_NFS_SHARE_PROPERTY_NAME].value ) ) { + let nfsShareComment; + if (this.options.nfs.shareCommentTemplate) { + nfsShareComment = Handlebars.compile( + this.options.nfs.shareCommentTemplate + )({ + name: call.request.name, + parameters: call.request.parameters, + csi: { + name: this.ctx.args.csiName, + version: this.ctx.args.csiVersion, + }, + zfs: { + datasetName: datasetName, + }, + }); + } else { + nfsShareComment = `democratic-csi (${this.ctx.args.csiName}): ${datasetName}`; + } + switch (apiVersion) { case 1: case 2: @@ -200,7 +219,7 @@ class FreeNASSshDriver extends ControllerZfsSshBaseDriver { case 1: share = { nfs_paths: [properties.mountpoint.value], - nfs_comment: `democratic-csi (${this.ctx.args.csiName}): ${datasetName}`, + nfs_comment: nfsShareComment || "", nfs_network: this.options.nfs.shareAllowedNetworks.join(","), nfs_hosts: this.options.nfs.shareAllowedHosts.join(","), @@ -217,7 +236,7 @@ class FreeNASSshDriver extends ControllerZfsSshBaseDriver { case 2: share = { paths: [properties.mountpoint.value], - comment: `democratic-csi (${this.ctx.args.csiName}): ${datasetName}`, + comment: nfsShareComment || "", networks: this.options.nfs.shareAllowedNetworks, hosts: this.options.nfs.shareAllowedHosts, alldirs: this.options.nfs.shareAlldirs, @@ -1629,7 +1648,7 @@ class FreeNASSshDriver extends ControllerZfsSshBaseDriver { * * scstadmin -resync_dev ${iscsiName} * works but always give a exit code of 1 ^ - * + * * midclt resync_lun_size_for_zvol tank/foo/bar * works on SCALE only ^ */