* New method: access_group_init_add(ag_name, init_id, init_type) Add a new initiator into a access group. If defined access group does not exist, create one with requested initiator. Parameters: ag_name (str): Access group name init_id (str): iSCSI initiator address init_type (str): Reserved for future use. Should be set as 'iscsi' Returns: N/A Errors: -52: Exists initiator. Requested 'init_id' is in use
Signed-off-by: Gris Ge fge@redhat.com --- API.md | 12 ++++++++++++ targetd/block.py | 30 ++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+)
diff --git a/API.md b/API.md index 214f636..c16eb54 100644 --- a/API.md +++ b/API.md @@ -175,6 +175,18 @@ Returns: Errors: N/A
+### access_group_init_add(ag_name, init_id, init_type) +Add a new initiator into a access group. +If defined access group does not exist, create one with requested initiator. +Parameters: + ag_name (str): Access group name + init_id (str): iSCSI initiator address + init_type (str): Reserved for future use. Should be set as 'iscsi' +Returns: + N/A +Errors: + -52: Exists initiator. Requested 'init_id' is in use + File system operations ---------------------- Ability to create different file systems and perform operation on them. The diff --git a/targetd/block.py b/targetd/block.py index e834a09..0ea7875 100644 --- a/targetd/block.py +++ b/targetd/block.py @@ -110,6 +110,7 @@ def initialize(config_dict): access_group_list=access_group_list, access_group_create=access_group_create, access_group_destroy=access_group_destroy, + access_group_init_add=access_group_init_add, )
@@ -433,3 +434,32 @@ def access_group_create(req, ag_name, init_id, init_type): def access_group_destroy(req, ag_name): NodeACLGroup(_get_iscsi_tpg(), ag_name).delete() RTSRoot().save_to_file() + + +def access_group_init_add(req, ag_name, init_id, init_type): + if init_type != 'iscsi': + raise TargetdError( + TargetdError.NO_SUPPORT, "Only support iscsi") + + tpg = _get_iscsi_tpg() + # Pre-check: + # 1. Already in requested access group, return silently. + # 2. Initiator does not exist. + # 3. Initiator not used by other access group. + + if init_id in list(NodeACLGroup(tpg, ag_name).wwns): + return + + for node_acl_group in tpg.node_acl_groups: + if init_id in list(node_acl_group.wwns): + raise TargetdError( + TargetdError.EXISTS_INITIATOR, + "Requested init_id is used by other access group") + for node_acl in tpg.node_acls: + if init_id == node_acl.node_wwn: + raise TargetdError( + TargetdError.EXISTS_INITIATOR, + "Requested init_id is in use") + + NodeACLGroup(tpg, ag_name).add_acl(init_id) + RTSRoot().save_to_file()