diff --git a/nova/objects/migrate_data.py b/nova/objects/migrate_data.py index 44dce4f4852c..04c7ab192cac 100644 --- a/nova/objects/migrate_data.py +++ b/nova/objects/migrate_data.py @@ -107,7 +107,9 @@ class LibvirtLiveMigrateBDMInfo(obj_base.NovaObject): class LibvirtLiveMigrateData(LiveMigrateData): # Version 1.0: Initial version # Version 1.1: Added target_connect_addr - VERSION = '1.1' + # Version 1.2: Added 'serial_listen_ports' to allow live migration with + # serial console. + VERSION = '1.2' fields = { 'filename': fields.StringField(), @@ -122,6 +124,7 @@ class LibvirtLiveMigrateData(LiveMigrateData): 'graphics_listen_addr_vnc': fields.IPAddressField(nullable=True), 'graphics_listen_addr_spice': fields.IPAddressField(nullable=True), 'serial_listen_addr': fields.StringField(nullable=True), + 'serial_listen_ports': fields.ListOfIntegersField(), 'bdms': fields.ListOfObjectsField('LibvirtLiveMigrateBDMInfo'), 'target_connect_addr': fields.StringField(nullable=True), } @@ -130,6 +133,9 @@ class LibvirtLiveMigrateData(LiveMigrateData): super(LibvirtLiveMigrateData, self).obj_make_compatible( primitive, target_version) target_version = versionutils.convert_version_to_tuple(target_version) + if target_version < (1, 2): + if 'serial_listen_ports' in primitive: + del primitive['serial_listen_ports'] if target_version < (1, 1) and 'target_connect_addr' in primitive: del primitive['target_connect_addr'] diff --git a/nova/tests/unit/objects/test_migrate_data.py b/nova/tests/unit/objects/test_migrate_data.py index ffc07773eacc..33a11d5ef74f 100644 --- a/nova/tests/unit/objects/test_migrate_data.py +++ b/nova/tests/unit/objects/test_migrate_data.py @@ -70,6 +70,18 @@ class _TestLiveMigrateData(object): migrate_data.LiveMigrateData.detect_implementation(legacy), migrate_data.XenapiLiveMigrateData) + def test_obj_make_compatible(self): + props = { + 'serial_listen_addr': '127.0.0.1', + 'serial_listen_ports': [1000, 10001, 10002, 10003], + } + + obj = migrate_data.LibvirtLiveMigrateData(**props) + primitive = obj.obj_to_primitive() + self.assertIn('serial_listen_ports', primitive['nova_object.data']) + obj.obj_make_compatible(primitive['nova_object.data'], '1.1') + self.assertNotIn('serial_listen_ports', primitive['nova_object.data']) + class TestLiveMigrateData(test_objects._LocalTest, _TestLiveMigrateData): diff --git a/nova/tests/unit/objects/test_objects.py b/nova/tests/unit/objects/test_objects.py index 9f3b2e592b98..7d9d97eb7a5b 100644 --- a/nova/tests/unit/objects/test_objects.py +++ b/nova/tests/unit/objects/test_objects.py @@ -1153,7 +1153,7 @@ object_data = { 'Inventory': '1.0-f4160797d47a533a58700e9ddcc9c5e2', 'InventoryList': '1.0-de53f0fd078c27cc1d43400f4e8bcef8', 'LibvirtLiveMigrateBDMInfo': '1.0-252aabb723ca79d5469fa56f64b57811', - 'LibvirtLiveMigrateData': '1.1-4ecf40aae7fee7bb37fc3b2123e760de', + 'LibvirtLiveMigrateData': '1.2-c489f63478d13eace828128ea3dfa57c', 'KeyPair': '1.4-1244e8d1b103cc69d038ed78ab3a8cc6', 'KeyPairList': '1.2-58b94f96e776bedaf1e192ddb2a24c4e', 'Migration': '1.4-17979b9f2ae7f28d97043a220b2a8350',