def test_reassign_vm(self, mrapi): volume = mfactory.VolumeFactory() vm = volume.machine another_project = "another_project" with mocked_quotaholder(): vm = servers.reassign(vm.id, another_project, False, credentials=self.credentials) self.assertEqual(vm.project, another_project) self.assertEqual(vm.shared_to_project, False) vol = vm.volumes.get(id=volume.id) self.assertNotEqual(vol.project, another_project) volume = mfactory.VolumeFactory() volume.index = 0 volume.save() vm = volume.machine another_project = "another_project" with mocked_quotaholder(): vm = servers.reassign(vm.id, another_project, True, credentials=self.credentials) self.assertEqual(vm.project, another_project) self.assertEqual(vm.shared_to_project, True) vol = vm.volumes.get(id=volume.id) self.assertEqual(vol.project, another_project) self.assertEqual(vol.shared_to_project, True)
def test_reassign_vm_backends(self, mrapi): volume = mfactory.VolumeFactory() vm = volume.machine original_project = vm.project another_project = "another_project" with mocked_quotaholder(): servers.reassign(vm, another_project, False) self.assertEqual(vm.project, another_project) self.assertEqual(vm.shared_to_project, False) vol = vm.volumes.get(id=volume.id) self.assertNotEqual(vol.project, another_project) backend = vm.backend backend.public = False backend.save() with mocked_quotaholder(): self.assertRaises(faults.BadRequest, servers.reassign, vm, original_project, False) self.assertEqual(vm.project, another_project) self.assertEqual(vm.shared_to_project, False) vol = vm.volumes.get(id=volume.id) self.assertNotEqual(vol.project, another_project) mfactory.ProjectBackendFactory(project=original_project, backend=backend) with mocked_quotaholder(): servers.reassign(vm, original_project, False) self.assertEqual(vm.project, original_project) self.assertEqual(vm.shared_to_project, False) vol = vm.volumes.get(id=volume.id) self.assertEqual(vol.project, original_project)
def test_reassign_vm_backends(self, mrapi): volume = mfactory.VolumeFactory() vm = volume.machine original_project = vm.project another_project = "another_project" with mocked_quotaholder(): vm = servers.reassign(vm.id, another_project, False, credentials=self.credentials) self.assertEqual(vm.project, another_project) self.assertEqual(vm.shared_to_project, False) vol = vm.volumes.get(id=volume.id) self.assertNotEqual(vol.project, another_project) backend = vm.backend backend.public = False backend.save() with mocked_quotaholder(): self.assertRaises(faults.Forbidden, servers.reassign, vm.id, original_project, False, credentials=self.credentials) self.assertEqual(vm.project, another_project) self.assertEqual(vm.shared_to_project, False) vol = vm.volumes.get(id=volume.id) self.assertNotEqual(vol.project, another_project) mfactory.ProjectBackendFactory(project=original_project, backend=backend) with mocked_quotaholder(): vm = servers.reassign(vm.id, original_project, False, credentials=self.credentials) self.assertEqual(vm.project, original_project) self.assertEqual(vm.shared_to_project, False) vol = vm.volumes.get(id=volume.id) self.assertEqual(vol.project, original_project)
def reassign(request, server_id, args): credentials = request.credentials shared_to_project = args.get("shared_to_project", False) if shared_to_project and not settings.CYCLADES_SHARED_RESOURCES_ENABLED: raise faults.Forbidden("Sharing resource to the members of the project" " is not permitted") project = args.get("project") if project is None: raise faults.BadRequest("Missing 'project' attribute.") servers.reassign( server_id, project, shared_to_project, credentials=credentials) log.info("User %s reassigned VM %s to project %s, shared %s", credentials.userid, server_id, project, shared_to_project) return HttpResponse(status=200)
def test_reassign_vm(self, mrapi): volume = mfactory.VolumeFactory() vm = volume.machine another_project = "another_project" with mocked_quotaholder(): servers.reassign(vm, another_project) self.assertEqual(vm.project, another_project) vol = vm.volumes.get(id=volume.id) self.assertNotEqual(vol.project, another_project) volume = mfactory.VolumeFactory() volume.index = 0 volume.save() vm = volume.machine another_project = "another_project" with mocked_quotaholder(): servers.reassign(vm, another_project) self.assertEqual(vm.project, another_project) vol = vm.volumes.get(id=volume.id) self.assertEqual(vol.project, another_project)
def test_reassign_vm_flavors(self, mrapi): volume = mfactory.VolumeFactory() vm = volume.machine vm_id = vm.id original_project = vm.project another_project = "another_project" with mocked_quotaholder(): servers.reassign(vm_id, another_project, False, credentials=self.credentials) vm = models.VirtualMachine.objects.get(id=vm_id) self.assertEqual(vm.project, another_project) self.assertEqual(vm.shared_to_project, False) vol = vm.volumes.get(id=volume.id) self.assertNotEqual(vol.project, another_project) vm = models.VirtualMachine.objects.get(id=vm_id) flavor = vm.flavor flavor.public = False flavor.save() with mocked_quotaholder(): self.assertRaises(faults.Forbidden, servers.reassign, vm_id, original_project, False, self.credentials) vm = models.VirtualMachine.objects.get(id=vm_id) self.assertEqual(vm.project, another_project) self.assertEqual(vm.shared_to_project, False) vol = vm.volumes.get(id=volume.id) self.assertNotEqual(vol.project, another_project) mfactory.FlavorAccessFactory(project=original_project, flavor=flavor) with mocked_quotaholder(): servers.reassign(vm_id, original_project, False, credentials=self.credentials) vm = models.VirtualMachine.objects.get(id=vm_id) self.assertEqual(vm.project, original_project) self.assertEqual(vm.shared_to_project, False) vol = vm.volumes.get(id=volume.id) self.assertEqual(vol.project, original_project)
def reassign(request, vm, args): if request.user_uniq != vm.userid: raise faults.Forbidden("Action 'reassign' is allowed only to the owner" " of the VM.") shared_to_project = args.get("shared_to_project", False) if shared_to_project and not settings.CYCLADES_SHARED_RESOURCES_ENABLED: raise faults.Forbidden("Sharing resource to the members of the project" " is not permitted") project = args.get("project") if project is None: raise faults.BadRequest("Missing 'project' attribute.") servers.reassign(vm, project, shared_to_project) log.info("User %s reassigned VM %s to project %s, shared %s", request.user_uniq, vm.id, project, shared_to_project) return HttpResponse(status=200)
def reassign(request, server_id, args): credentials = request.credentials shared_to_project = args.get("shared_to_project", False) if shared_to_project and not settings.CYCLADES_SHARED_RESOURCES_ENABLED: raise faults.Forbidden("Sharing resource to the members of the project" " is not permitted") project = args.get("project") if project is None: raise faults.BadRequest("Missing 'project' attribute.") servers.reassign(server_id, project, shared_to_project, credentials=credentials) log.info("User %s reassigned VM %s to project %s, shared %s", credentials.userid, server_id, project, shared_to_project) return HttpResponse(status=200)
def reassign(request, vm, args): project = args.get("project") if project is None: raise faults.BadRequest("Missing 'project' attribute.") servers.reassign(vm, project) return HttpResponse(status=200)