diff --git a/cinder/volume/drivers/nexenta/volume.py b/cinder/volume/drivers/nexenta/volume.py index fb1e94db0d4..e9d7ce0d653 100644 --- a/cinder/volume/drivers/nexenta/volume.py +++ b/cinder/volume/drivers/nexenta/volume.py @@ -201,39 +201,41 @@ def _do_export(self, _ctx, volume, ensure=False): target_name = self._get_target_name(volume['name']) target_group_name = self._get_target_group_name(volume['name']) + target_already_configured = False try: self.nms.iscsitarget.create_target({'target_name': target_name}) except nexenta.NexentaException as exc: - if not ensure or 'already configured' not in exc.args[1]: - raise + if ensure and 'already configured' in exc.args[1]: + target_already_configured = True + LOG.info(_('Ignored target creation error "%s" while ensuring ' + 'export'), exc) else: - LOG.info(_('Ignored target creation error "%s"' - ' while ensuring export'), exc) + raise try: self.nms.stmf.create_targetgroup(target_group_name) except nexenta.NexentaException as exc: - if not ensure or 'already exists' not in exc.args[1]: - raise - else: + if ((ensure and 'already exists' in exc.args[1]) or + (target_already_configured and + 'target must be offline' in exc.args[1])): LOG.info(_('Ignored target group creation error "%s"' ' while ensuring export'), exc) + else: + raise try: self.nms.stmf.add_targetgroup_member(target_group_name, target_name) except nexenta.NexentaException as exc: if not ensure or 'already exists' not in exc.args[1]: raise - else: - LOG.info(_('Ignored target group member addition error "%s"' - ' while ensuring export'), exc) + LOG.info(_('Ignored target group member addition error "%s" while ' + 'ensuring export'), exc) try: self.nms.scsidisk.create_lu(zvol_name, {}) except nexenta.NexentaException as exc: if not ensure or 'in use' not in exc.args[1]: raise - else: - LOG.info(_('Ignored LU creation error "%s"' - ' while ensuring export'), exc) + LOG.info(_('Ignored LU creation error "%s"' + ' while ensuring export'), exc) try: self.nms.scsidisk.add_lun_mapping_entry(zvol_name, { 'target_group': target_group_name, @@ -241,9 +243,8 @@ def _do_export(self, _ctx, volume, ensure=False): except nexenta.NexentaException as exc: if not ensure or 'view entry exists' not in exc.args[1]: raise - else: - LOG.info(_('Ignored LUN mapping entry addition error "%s"' - ' while ensuring export'), exc) + LOG.info(_('Ignored LUN mapping entry addition error "%s"' + ' while ensuring export'), exc) return '%s:%s,1 %s 0' % (CONF.nexenta_host, CONF.nexenta_iscsi_target_portal_port, target_name)