From 69b610b503c8402da51ae29200cd526cbb9a2950 Mon Sep 17 00:00:00 2001 From: Travis Glenn Hansen Date: Mon, 12 Apr 2021 09:58:18 -0600 Subject: [PATCH 1/4] recan session during node stage Signed-off-by: Travis Glenn Hansen --- README.md | 2 ++ src/driver/index.js | 10 +++++++++ src/utils/iscsi.js | 54 ++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 65 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f1f8042..1280788 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,8 @@ Predominantly 3 things are needed: ## Guides - https://jonathangazeley.com/2021/01/05/using-truenas-to-provide-persistent-storage-for-kubernetes/ +- https://gist.github.com/admun/4372899f20421a947b7544e5fc9f9117 (migrating + from `nfs-client-provisioner` to `democratic-csi`) ## Node Prep diff --git a/src/driver/index.js b/src/driver/index.js index 869268a..b6b6c2b 100644 --- a/src/driver/index.js +++ b/src/driver/index.js @@ -343,6 +343,7 @@ class CsiBaseDriver { // put these options in place to force targets managed by csi to be explicitly attached (in the case of unclearn shutdown etc) let nodeDB = { "node.startup": "manual", + //"node.session.scan": "manual", }; const nodeDBKeyPrefix = "node-db."; for (const key in normalizedSecrets) { @@ -359,6 +360,15 @@ class CsiBaseDriver { // login await iscsi.iscsiadm.login(volume_context.iqn, portal); + // get associated session + let session = await iscsi.iscsiadm.getSession( + volume_context.iqn, + portal + ); + + // rescan in scenarios when login previously occurred but volumes never appeared + await iscsi.iscsiadm.rescanSession(session); + // find device name device = `/dev/disk/by-path/ip-${portal}-iscsi-${volume_context.iqn}-lun-${volume_context.lun}`; let deviceByPath = device; diff --git a/src/utils/iscsi.js b/src/utils/iscsi.js index 36216f7..6230356 100644 --- a/src/utils/iscsi.js +++ b/src/utils/iscsi.js @@ -1,4 +1,5 @@ const cp = require("child_process"); +const { setegid } = require("process"); function getIscsiValue(value) { if (value == "") return null; @@ -147,6 +148,27 @@ class ISCSI { await iscsi.exec(options.paths.iscsiadm, args); }, + /** + * get session object by iqn/portal + */ + async getSession(tgtIQN, portal) { + const sessions = await iscsi.iscsiadm.getSessions(); + + let session = false; + sessions.every((i_session) => { + if ( + `${i_session.iqn}:${i_session.target}` == tgtIQN && + portal == i_session.portal + ) { + session = i_session; + return false; + } + return true; + }); + + return session; + }, + /** * iscsiadm -m session */ @@ -178,7 +200,7 @@ class ISCSI { fields = entry.split(" "); sessions.push({ protocol: entry.split(":")[0], - id: fields[1].replace("[", "").replace("]", ""), + id: Number(fields[1].replace("[", "").replace("]", "")), portal: fields[2].split(",")[0], target_portal_group_tag: fields[2].split(",")[1], iqn: fields[3].split(":")[0], @@ -438,6 +460,36 @@ class ISCSI { return true; }, + + /** + * iscsiadm -m session -r SID --rescan + * + * @param {*} session + */ + async rescanSession(session) { + let sid; + if (typeof session === "object") { + sid = session.id; + } else { + sid = session; + } + + // make sure session is a valid number + if (session !== 0 && session > 0) { + throw new Error("cannot scan empty session id"); + } + + let args = []; + args = args.concat(["-m", "session", "-r", sid, "--rescan"]); + + try { + await iscsi.exec(options.paths.iscsiadm, args); + } catch (err) { + throw err; + } + + return true; + }, }; } From c63652ba8b544d7b13de46a15495dc7becb77224 Mon Sep 17 00:00:00 2001 From: Travis Glenn Hansen Date: Mon, 12 Apr 2021 10:00:31 -0600 Subject: [PATCH 2/4] changelog entry Signed-off-by: Travis Glenn Hansen --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 430af31..68fa16c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# v1.1.1 + +Released 2021-04-12 + +- rescan iscsi sessions after login during stage call + # v1.1.0 Released 2021-02-21 From 0bb19941b6ef823fd37574bb7a921f9efd69b6d3 Mon Sep 17 00:00:00 2001 From: Travis Glenn Hansen Date: Mon, 12 Apr 2021 10:01:02 -0600 Subject: [PATCH 3/4] bump package version Signed-off-by: Travis Glenn Hansen --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 681185f..f80ccf8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "democratic-csi", - "version": "1.1.0", + "version": "1.1.1", "description": "kubernetes csi driver framework", "main": "bin/democratic-csi", "scripts": { From a3e4ae75f9962ad30a094a7ee0a2fd450cc0ca6c Mon Sep 17 00:00:00 2001 From: Travis Glenn Hansen Date: Mon, 12 Apr 2021 10:02:54 -0600 Subject: [PATCH 4/4] remove unused reference Signed-off-by: Travis Glenn Hansen --- src/utils/iscsi.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/utils/iscsi.js b/src/utils/iscsi.js index 6230356..552198a 100644 --- a/src/utils/iscsi.js +++ b/src/utils/iscsi.js @@ -1,5 +1,4 @@ const cp = require("child_process"); -const { setegid } = require("process"); function getIscsiValue(value) { if (value == "") return null;