diff --git a/cinder/tests/unit/volume/drivers/test_nimble.py b/cinder/tests/unit/volume/drivers/test_nimble.py index 4f78cc3cbf8..57ccdfd6585 100644 --- a/cinder/tests/unit/volume/drivers/test_nimble.py +++ b/cinder/tests/unit/volume/drivers/test_nimble.py @@ -1200,6 +1200,8 @@ class NimbleDriverConnectionTestCase(NimbleDriverBaseTestCase): 'initiator_target_map': {'1000000000000000': ['1111111111111101']}}} + self.driver._create_igroup_for_initiator("test-initiator3", + [1111111111111101]) self.assertEqual( expected_res, self.driver.initialize_connection( @@ -1209,6 +1211,12 @@ class NimbleDriverConnectionTestCase(NimbleDriverBaseTestCase): {'initiator': 'test-initiator3', 'wwpns': ['1000000000000000']})) + expected_calls = [mock.call.create_initiator_group_fc( + 'openstack-abcdefghijkl'), + mock.call.add_initiator_to_igroup_fc('openstack-abcdefghijkl', + 1111111111111101)] + self.mock_client_service.assert_has_calls(expected_calls) + @mock.patch(NIMBLE_URLLIB2) @mock.patch(NIMBLE_CLIENT) @mock.patch.object(obj_volume.VolumeList, 'get_all_by_host', diff --git a/cinder/volume/drivers/nimble.py b/cinder/volume/drivers/nimble.py index 83246b8bb20..21b842619c5 100644 --- a/cinder/volume/drivers/nimble.py +++ b/cinder/volume/drivers/nimble.py @@ -573,7 +573,7 @@ class NimbleBaseVolumeDriver(san.SanDriver): pass - def _create_igroup_for_initiator(self, initiator_name, wwpn): + def _create_igroup_for_initiator(self, initiator_name, wwpns): """Creates igroup for an initiator and returns the igroup name.""" igrp_name = 'openstack-' + self._generate_random_string(12) LOG.info(_LI('Creating initiator group %(grp)s ' @@ -583,7 +583,9 @@ class NimbleBaseVolumeDriver(san.SanDriver): self.APIExecutor.create_initiator_group(igrp_name) self.APIExecutor.add_initiator_to_igroup(igrp_name, initiator_name) elif self._storage_protocol == "FC": - self.APIExecutor.create_initiator_group_fc(igrp_name, wwpn) + self.APIExecutor.create_initiator_group_fc(igrp_name) + for wwpn in wwpns: + self.APIExecutor.add_initiator_to_igroup_fc(igrp_name, wwpn) return igrp_name def _get_igroupname_for_initiator_fc(self, initiator_wwpns): @@ -1213,18 +1215,13 @@ class NimbleRestAPIExecutor(object): r = self.post(api, data) return r['data'] - def create_initiator_group_fc(self, initiator_grp_name, wwpns): + def create_initiator_group_fc(self, initiator_grp_name): api = "initiator_groups" data = {} data["data"] = {} data["data"]["name"] = initiator_grp_name data["data"]["access_protocol"] = "fc" - data["data"]["fc_initiators"] = [] - for wwpn in wwpns: - initiator = {} - initiator["wwpn"] = self._format_to_wwpn(wwpn) - data["data"]["fc_initiators"].append(initiator) r = self.post(api, data) return r['data'] @@ -1246,6 +1243,17 @@ class NimbleRestAPIExecutor(object): r = self.post(api, data) return r['data'] + def add_initiator_to_igroup_fc(self, initiator_grp_name, wwpn): + initiator_group_id = self.get_initiator_grp_id(initiator_grp_name) + api = "initiators" + data = {"data": { + "access_protocol": "fc", + "initiator_group_id": initiator_group_id, + "wwpn": self._format_to_wwpn(wwpn) + }} + r = self.post(api, data) + return r['data'] + def get_pool_id(self, pool_name): api = "pools/" filter = {'name': pool_name}