* New method 'initiators':
Usage: Return a list of iSCSI initiator.
Parameter: NULL
Return: [{'initiator_wwn': initiator_wwn, 'wwn_type': wwn_type},]
* New method 'initiator_create':
Usage: Create a initiators.
Parameter: initiator_wwn # iSCSI IQN
Return: [{'initiator_wwn': initiator_wwn, 'wwn_type': wwn_type},]
* New method 'initiator_delete':
Usage: Delete a initiators along with masking information.
Parameter: initiator_wwn # iSCSI IQN
Return: None
* With these methods, libstoragemgmt can use routine method to do
volume masking:
1. Create access group(for targetd, each initiator is a access group).
2. Mask volume to this new access group.
This can simplify volume mask design of libstoragemgmt as all found storage
array are following above way to do volume masking.
* Tested via libstoragemgmt targetd plugin.
Signed-off-by: Gris Ge <fge(a)redhat.com>
---
targetd/block.py | 36 ++++++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/targetd/block.py b/targetd/block.py
index e8206b2..cbcfaee 100644
--- a/targetd/block.py
+++ b/targetd/block.py
@@ -105,6 +105,9 @@ def initialize(config_dict):
export_create=export_create,
export_destroy=export_destroy,
initiator_set_auth=initiator_set_auth,
+ initiators=initiators,
+ initiator_create=initiator_create,
+ initiator_delete=initiator_delete,
)
@@ -277,6 +280,39 @@ def export_destroy(req, pool, vol, initiator_wwn):
RTSRoot().save_to_file()
+def initiators(req):
+ try:
+ fm = FabricModule('iscsi')
+ t = Target(fm, target_name, mode='lookup')
+ tpg = TPG(t, 1, mode='lookup')
+ except RTSLibNotInCFS:
+ return []
+
+ initiators = []
+ for na in tpg.node_acls:
+ initiators.append(
+ dict(initiator_wwn=na.node_wwn, wwn_type=na.wwn_type))
+ return initiators
+
+
+def initiator_create(req, initiator_wwn):
+ fm = FabricModule('iscsi')
+ t = Target(fm, target_name)
+ tpg = TPG(t, 1)
+ na = NodeACL(tpg, initiator_wwn)
+ RTSRoot().save_to_file()
+ return dict(initiator_wwn=na.node_wwn, wwn_type=na.wwn_type)
+
+
+def initiator_delete(req, initiator_wwn):
+ fm = FabricModule('iscsi')
+ t = Target(fm, target_name)
+ tpg = TPG(t, 1)
+ na = NodeACL(tpg, initiator_wwn)
+ na.delete()
+ RTSRoot().save_to_file()
+
+
def initiator_set_auth(req, initiator_wwn, in_user, in_pass, out_user,
out_pass):
fm = FabricModule('iscsi')
--
1.8.3.1