libvirt: Add serial ports to the migration data object
The serial console code in nova picks TCP ports for each serial interface of an instance. When doing a live migration, the TCP ports used for the migrating instance might be in use on the target hypervisor which causes the live migration to fail. This patch adds a field to the migration data object so that a follow up patch can use that to rewrite the guest XML. Change-Id: I970014ee0ee8059f5976797bf344fea9a7ccb32d Related-Bug: #1455252
This commit is contained in:
parent
cdfbb9a668
commit
c8ceeb46c7
|
@ -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']
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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',
|
||||
|
|
Loading…
Reference in New Issue