def test_replace_boot_index_already_exist(self, mock_notify, mock_upd): boot_index = 100 mock_upd.side_effect = \ exception.VolumeTargetBootIndexAlreadyExists(boot_index=boot_index) response = self.patch_json('/volume/targets/%s' % self.target.uuid, [{'path': '/boot_index', 'value': boot_index, 'op': 'replace'}], expect_errors=True, headers=self.headers) self.assertEqual('application/json', response.content_type) self.assertEqual(http_client.CONFLICT, response.status_code) self.assertTrue(response.json['error_message']) self.assertTrue(mock_upd.called) kargs = mock_upd.call_args[0][1] self.assertEqual(boot_index, kargs.boot_index) mock_notify.assert_has_calls([mock.call(mock.ANY, mock.ANY, 'update', obj_fields.NotificationLevel.INFO, obj_fields.NotificationStatus.START, node_uuid=self.node.uuid), mock.call(mock.ANY, mock.ANY, 'update', obj_fields.NotificationLevel.ERROR, obj_fields.NotificationStatus.ERROR, node_uuid=self.node.uuid)])
def create_volume_target(self, target_info): if 'uuid' not in target_info: target_info['uuid'] = uuidutils.generate_uuid() target = models.VolumeTarget() target.update(target_info) with _session_for_write() as session: try: session.add(target) session.flush() except db_exc.DBDuplicateEntry as exc: if 'boot_index' in exc.columns: raise exception.VolumeTargetBootIndexAlreadyExists( boot_index=target_info['boot_index']) raise exception.VolumeTargetAlreadyExists( uuid=target_info['uuid']) return target
def update_volume_target(self, ident, target_info): if 'uuid' in target_info: msg = _("Cannot overwrite UUID for an existing Volume Target.") raise exception.InvalidParameterValue(err=msg) try: with _session_for_write() as session: query = model_query(models.VolumeTarget) query = add_identity_filter(query, ident) ref = query.one() orig_boot_index = ref['boot_index'] ref.update(target_info) session.flush() except db_exc.DBDuplicateEntry: raise exception.VolumeTargetBootIndexAlreadyExists( boot_index=target_info.get('boot_index', orig_boot_index)) except NoResultFound: raise exception.VolumeTargetNotFound(target=ident) return ref