def initialize_connection(self, volume, connector): volume_iqn = volume['provider_location'].split(' ')[1] (auth_method, auth_user, auth_pass) = \ volume['provider_auth'].split(' ', 3) # Add initiator iqns to target ACL try: self._execute('cinder-rtstool', 'add-initiator', volume_iqn, auth_user, auth_pass, connector['initiator'], run_as_root=True) except putils.ProcessExecutionError: LOG.error( _("Failed to add initiator iqn %s to target") % connector['initiator']) raise exception.ISCSITargetAttachFailed(volume_id=volume['id']) iscsi_properties = self._get_iscsi_properties(volume) # FIXME(jdg): For LIO the target_lun is 0, other than that all data # is the same as it is for tgtadm, just modify it here iscsi_properties['target_lun'] = 0 return {'driver_volume_type': 'iscsi', 'data': iscsi_properties}
def initialize_connection(self, volume, connector): volume_iqn = volume['provider_location'].split(' ')[1] (auth_method, auth_user, auth_pass) = \ volume['provider_auth'].split(' ', 3) # Add initiator iqns to target ACL try: utils.execute('cinder-rtstool', 'add-initiator', volume_iqn, auth_user, auth_pass, connector['initiator'], run_as_root=True) except putils.ProcessExecutionError: LOG.error(_LE("Failed to add initiator iqn %s to target") % connector['initiator']) raise exception.ISCSITargetAttachFailed( volume_id=volume['id']) iscsi_properties = self._get_iscsi_properties(volume, connector.get( 'multipath')) return { 'driver_volume_type': self.iscsi_protocol, 'data': iscsi_properties }
def initialize_connection(self, volume, connector): volume_iqn = volume['provider_location'].split(' ')[1] (auth_method, auth_user, auth_pass) = \ volume['provider_auth'].split(' ', 3) # Add initiator iqns to target ACL LOG.info(('Exporting iscsi initiator: %(initiator)s ' 'for volume: %(id)s'), {"initiator": connector['initiator'], "id": volume["id"]}) try: self._execute('cinder-rtstool', 'add-initiator', volume_iqn, auth_user, auth_pass, connector['initiator'], run_as_root=True) except putils.ProcessExecutionError: LOG.exception("Failed to add initiator iqn %s to target", connector['initiator']) raise exception.ISCSITargetAttachFailed( volume_id=volume['id']) # We make changes persistent self._persist_configuration(volume['id']) ret = super(LioAdm, self).initialize_connection(volume, connector) LOG.info(('Exported iscsi initiator for' ' volume: %s'), volume["id"]) return ret
def initialize_connection(self, volume, connector): """Map the created volume to connector['initiator']. :param volume: dictionary volume reference :param connector: dictionary connector reference """ LOG.info(_LI("initialize volume %(vol)s connector %(conn)s"), {'vol': volume, 'conn': connector}) # connector[ip, host, wwnns, unititator, wwp/ service_info = self._get_service_target(volume) (ip, ipp, ctl, port, _hdp, tgtalias, secret) = service_info info = _loc_info(volume['provider_location']) if 'tgt' in info.keys(): # spurious repeat connection # print info.keys() LOG.debug("initiate_conn: tgt already set %s", info['tgt']) (arid, lun_name) = info['id_lu'] loc = arid + '.' + lun_name # sps, use target if provided try: out = self.bend.add_iscsi_conn(self.config['hnas_cmd'], self.config['mgmt_ip0'], self.config['username'], self.config['password'], lun_name, _hdp, port, tgtalias, connector['initiator']) except processutils.ProcessExecutionError: msg = _("Error attaching volume %s. " "Target limit might be reached!") % volume['id'] raise exception.ISCSITargetAttachFailed(message=msg) hnas_portal = ip + ':' + ipp # sps need hlun, fulliqn hlun = out.split()[1] fulliqn = out.split()[13] tgt = hnas_portal + ',' + tgtalias + ',' + loc + ',' + ctl + ',' tgt += port + ',' + hlun LOG.info(_LI("initiate: connection %s"), tgt) properties = {} properties['provider_location'] = tgt self._update_vol_location(volume['id'], tgt) properties['target_discovered'] = False properties['target_portal'] = hnas_portal properties['target_iqn'] = fulliqn properties['target_lun'] = int(hlun) properties['volume_id'] = volume['id'] properties['auth_username'] = connector['initiator'] if self.config['chap_enabled'] == 'True': properties['auth_method'] = 'CHAP' properties['auth_password'] = secret conn_info = {'driver_volume_type': 'iscsi', 'data': properties} LOG.debug("initialize_connection: conn_info: %s.", conn_info) return conn_info
def initialize_connection(self, volume, connector): LOG.debug('initialize_connection: volume %(vol)s with connector ' '%(conn)s', {'vol': volume['id'], 'conn': connector}) volume_name = acs5000_common.VOLUME_PREFIX + volume['name'][-12:] ret = self._cmd.create_lun_map(volume_name, 'WITH_ISCSI', connector['initiator']) if ret['key'] == 303: raise exception.VolumeNotFound(volume_id=volume_name) elif ret['key'] == 402: raise exception.ISCSITargetAttachFailed(volume_id=volume_name) else: lun_info = ret['arr'] properties = {} properties['target_discovered'] = False properties['target_iqns'] = lun_info['iscsi_name'] properties['target_portals'] = lun_info['portal'] properties['target_luns'] = lun_info['lun'] properties['volume_id'] = volume['id'] properties['auth_method'] = '' properties['auth_username'] = '' properties['auth_password'] = '' properties['discovery_auth_method'] = '' properties['discovery_auth_username'] = '' properties['discovery_auth_password'] = '' return {'driver_volume_type': 'iscsi', 'data': properties}
def terminate_connection(self, volume, connector): volume_iqn = volume['provider_location'].split(' ')[1] # Delete initiator iqns from target ACL try: self._execute('cinder-rtstool', 'delete-initiator', volume_iqn, connector['initiator'], run_as_root=True) except putils.ProcessExecutionError: LOG.error(_LE("Failed to delete initiator iqn %s to target.") % connector['initiator']) raise exception.ISCSITargetAttachFailed(volume_id=volume['id'])
def initialize_connection(self, volume, connector): """Maps the created volume to connector['initiator']. :param volume: dictionary volume reference :param connector: dictionary connector reference :returns: The connection information :raises: ISCSITargetAttachFailed """ service_info = self._get_service_target(volume) (ip, ipp, evs, port, _fs, tgtalias, secret) = service_info try: conn = self.backend.add_iscsi_conn(volume.name, _fs, port, tgtalias, connector['initiator']) except processutils.ProcessExecutionError: msg = (_("Error attaching volume %(vol)s. " "Target limit might be reached!") % { 'vol': volume.id }) LOG.error(msg) raise exception.ISCSITargetAttachFailed(volume_id=volume.id) hnas_portal = ip + ':' + ipp lu_id = six.text_type(conn['lu_id']) fulliqn = conn['iqn'] tgt = (hnas_portal + ',' + tgtalias + ',' + volume.provider_location + ',' + evs + ',' + port + ',' + lu_id) LOG.info(_LI("initiate: connection %(tgt)s"), {'tgt': tgt}) properties = {} properties['provider_location'] = tgt properties['target_discovered'] = False properties['target_portal'] = hnas_portal properties['target_iqn'] = fulliqn properties['target_lu'] = int(lu_id) properties['volume_id'] = volume.id properties['auth_username'] = connector['initiator'] if self.config['chap_enabled']: properties['auth_method'] = 'CHAP' properties['auth_password'] = secret conn_info = {'driver_volume_type': 'iscsi', 'data': properties} return conn_info
def initialize_connection(self, volume, connector): LOG.debug( 'enter: initialize_connection: volume ' '%(vol)s with connector %(conn)s', { 'vol': volume.id, 'conn': connector }) volume_name = self._convert_name(volume.name) ret = self._cmd.create_lun_map(volume_name, self.protocol, connector['initiator']) if ret['key'] == 0: lun_required = ['iscsi_name', 'portal', 'lun'] lun_info = ret['arr'] for param in lun_required: if param not in lun_info: msg = (_('initialize_connection: Param %(param)s ' 'was not returned correctly when volume ' '%(vol)s mapping.') % { 'param': param, 'vol': volume.id }) raise exception.VolumeBackendAPIException(data=msg) data = { 'target_discovered': False, 'target_iqns': lun_info['iscsi_name'], 'target_portals': lun_info['portal'], 'target_luns': lun_info['lun'], 'volume_id': volume.id } LOG.debug( 'leave: initialize_connection: volume ' '%(vol)s with connector %(conn)s', { 'vol': volume.id, 'conn': connector }) return {'driver_volume_type': 'iscsi', 'data': data} if ret['key'] == 303: raise exception.VolumeNotFound(volume_id=volume_name) elif ret['key'] == 402: raise exception.ISCSITargetAttachFailed(volume_id=volume_name) else: msg = (_('failed to map the volume %(vol)s to ' 'connector %(conn)s.') % { 'vol': volume['id'], 'conn': connector }) raise exception.VolumeBackendAPIException(data=msg)
def initialize_connection(self, volume, connector): volume_iqn = volume['provider_location'].split(' ')[1] (auth_method, auth_user, auth_pass) = \ volume['provider_auth'].split(' ', 3) # Add initiator iqns to target ACL try: self._execute('rtstool', 'add-initiator', volume_iqn, auth_user, auth_pass, connector['initiator'], run_as_root=True) except exception.ProcessExecutionError as e: LOG.error( _("Failed to add initiator iqn %s to target") % connector['initiator']) raise exception.ISCSITargetAttachFailed(volume_id=volume['id'])
def initialize_connection(self, volume, connector): volume_iqn = volume['provider_location'].split(' ')[1] (auth_method, auth_user, auth_pass) = \ volume['provider_auth'].split(' ', 3) # Add initiator iqns to target ACL try: self._execute('cinder-rtstool', 'add-initiator', volume_iqn, auth_user, auth_pass, connector['initiator'], run_as_root=True) except putils.ProcessExecutionError: LOG.exception(_LE("Failed to add initiator iqn %s to target"), connector['initiator']) raise exception.ISCSITargetAttachFailed( volume_id=volume['id']) # We make changes persistent self._persist_configuration(volume['id']) return super(LioAdm, self).initialize_connection(volume, connector)