mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-08 19:26:48 +00:00
Migration left the VM defined on the source host unless "Delete original" was ticked (VIR_MIGRATE_UNDEFINE_SOURCE). With the shared storage migration needs, that definition points at the disks the destination VM is running on: the VM showed on both hosts and could be started (or autostarted) a second time against the same disks; only a configured lock manager stops that. moveto now always passes VIR_MIGRATE_UNDEFINE_SOURCE with VIR_MIGRATE_PERSIST_DEST. The option is gone from the form, the view, the API (MigrateSerializer.xml_del) and the clone auto-migration. It removes the definition, not the disk files.
52 lines
1.4 KiB
Python
52 lines
1.4 KiB
Python
"""Migration flags: the source definition never stays behind."""
|
|
|
|
import unittest
|
|
|
|
import libvirt
|
|
from django.conf import settings
|
|
|
|
if not settings.configured:
|
|
settings.configure(MAC_OUI="52:54:10")
|
|
|
|
from vrtManager.instance import wvmInstances
|
|
|
|
|
|
class FakeDomain:
|
|
def __init__(self):
|
|
self.calls = []
|
|
|
|
def migrate(self, dconn, flags, dname, uri, bandwidth):
|
|
self.calls.append((flags, uri))
|
|
|
|
|
|
class FakeSource:
|
|
def __init__(self, state):
|
|
self.state = state
|
|
self.instance = FakeDomain()
|
|
|
|
def get_status(self):
|
|
return self.state
|
|
|
|
def get_arch(self):
|
|
return "x86_64"
|
|
|
|
def get_dom_emulator(self):
|
|
return "/usr/bin/qemu-system-x86_64"
|
|
|
|
|
|
def destination():
|
|
dest = wvmInstances.__new__(wvmInstances)
|
|
dest.wvm = object()
|
|
dest.get_emulator = lambda arch: "/usr/bin/qemu-system-x86_64"
|
|
return dest
|
|
|
|
|
|
class MigrationFlagsTestCase(unittest.TestCase):
|
|
def test_the_source_definition_is_always_removed(self):
|
|
for state, live, offline in ((1, True, False), (5, False, True)):
|
|
with self.subTest(state=state):
|
|
source = FakeSource(state)
|
|
destination().moveto(source, "vm", live=live, unsafe=False, offline=offline)
|
|
flags = source.instance.calls[0][0]
|
|
self.assertTrue(flags & libvirt.VIR_MIGRATE_UNDEFINE_SOURCE)
|
|
self.assertTrue(flags & libvirt.VIR_MIGRATE_PERSIST_DEST)
|