diff --git a/nova/tests/unit/virt/libvirt/test_driver.py b/nova/tests/unit/virt/libvirt/test_driver.py index 486bff1f2fa2..c4f89f16e6ce 100644 --- a/nova/tests/unit/virt/libvirt/test_driver.py +++ b/nova/tests/unit/virt/libvirt/test_driver.py @@ -6643,6 +6643,21 @@ class LibvirtConnTestCase(test.NoDBTestCase): self.context, instance_ref, 'dest', False, None, dom) + def test_live_migration_fails_with_invalid_live_migration_flag(self): + self.flags(live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE, " + "VIR_MIGRATE_PEER2PEER, " + "VIR_MIGRATE_LIVE, " + "VIR_MIGRATE_TUNNELLED, " + "VIR_MIGRATE_FOO_BAR", + group='libvirt') + instance_ref = self.test_instance + dom = fakelibvirt.virDomain + drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False) + self.assertRaises(exception.Invalid, + drvr._live_migration_operation, + self.context, instance_ref, 'dest', + False, None, dom) + @mock.patch.object(fakelibvirt, 'VIR_DOMAIN_XML_MIGRATABLE', None, create=True) def test_live_migration_uses_migrateToURI_without_migratable_flag(self): diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index b9eecd296e74..b1a873f3022f 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -5666,7 +5666,15 @@ class LibvirtDriver(driver.ComputeDriver): flaglist = CONF.libvirt.block_migration_flag.split(',') else: flaglist = CONF.libvirt.live_migration_flag.split(',') - flagvals = [getattr(libvirt, x.strip()) for x in flaglist] + + def getflag(s): + try: + return getattr(libvirt, s) + except AttributeError: + msg = _("Unknown libvirt live migration flag '%s'") % s + raise exception.Invalid(msg) + + flagvals = [getflag(x.strip()) for x in flaglist] logical_sum = six.moves.reduce(lambda x, y: x | y, flagvals) pre_live_migrate_data = (migrate_data or {}).get(