Merge "libvirt: Break up get_disk_mapping within blockinfo"
This commit is contained in:
commit
476d0eb623
|
@ -530,32 +530,76 @@ def get_disk_mapping(virt_type, instance, disk_bus, cdrom_bus, image_meta,
|
||||||
|
|
||||||
Returns the guest disk mapping for the devices.
|
Returns the guest disk mapping for the devices.
|
||||||
"""
|
"""
|
||||||
|
# NOTE(lyarwood): This is a legacy rescue attempt so provide a mapping with
|
||||||
mapping = {}
|
# the rescue disk, original root disk and optional config drive.
|
||||||
|
|
||||||
if rescue and rescue_image_meta is None:
|
if rescue and rescue_image_meta is None:
|
||||||
rescue_info = get_next_disk_info(mapping,
|
return _get_rescue_disk_mapping(
|
||||||
disk_bus, boot_index=1)
|
virt_type, instance, disk_bus, image_meta)
|
||||||
mapping['disk.rescue'] = rescue_info
|
|
||||||
mapping['root'] = rescue_info
|
|
||||||
|
|
||||||
os_info = get_next_disk_info(mapping,
|
# NOTE(lyarwood): This is a new stable rescue attempt so provide a mapping
|
||||||
disk_bus)
|
# with the original mapping *and* rescue disk appended to the end.
|
||||||
mapping['disk'] = os_info
|
if rescue and rescue_image_meta:
|
||||||
|
return _get_stable_device_rescue_mapping(
|
||||||
|
virt_type, instance, disk_bus, cdrom_bus, image_meta,
|
||||||
|
block_device_info, rescue_image_meta)
|
||||||
|
|
||||||
if configdrive.required_by(instance):
|
# NOTE(lyarwood): This is a normal spawn so fetch the full disk mapping.
|
||||||
device_type = get_config_drive_type()
|
return _get_disk_mapping(
|
||||||
disk_bus = get_disk_bus_for_device_type(instance,
|
virt_type, instance, disk_bus, cdrom_bus, image_meta,
|
||||||
virt_type,
|
block_device_info)
|
||||||
image_meta,
|
|
||||||
device_type)
|
|
||||||
config_info = get_next_disk_info(mapping,
|
|
||||||
disk_bus,
|
|
||||||
device_type)
|
|
||||||
mapping['disk.config.rescue'] = config_info
|
|
||||||
|
|
||||||
return mapping
|
|
||||||
|
|
||||||
|
def _get_rescue_disk_mapping(virt_type, instance, disk_bus, image_meta):
|
||||||
|
"""Build disk mapping for a legacy instance rescue
|
||||||
|
|
||||||
|
This legacy method of rescue requires that the rescue device is attached
|
||||||
|
first, ahead of the original root disk and optional config drive.
|
||||||
|
|
||||||
|
:param virt_type: Virt type used by libvirt.
|
||||||
|
:param instance: nova.objects.instance.Instance object
|
||||||
|
:param disk_bus: Disk bus to use within the mapping
|
||||||
|
:param image_meta: objects.image_meta.ImageMeta for the instance
|
||||||
|
|
||||||
|
:returns: Disk mapping for the given instance
|
||||||
|
"""
|
||||||
|
mapping = {}
|
||||||
|
rescue_info = get_next_disk_info(mapping,
|
||||||
|
disk_bus, boot_index=1)
|
||||||
|
mapping['disk.rescue'] = rescue_info
|
||||||
|
mapping['root'] = rescue_info
|
||||||
|
|
||||||
|
os_info = get_next_disk_info(mapping,
|
||||||
|
disk_bus)
|
||||||
|
mapping['disk'] = os_info
|
||||||
|
|
||||||
|
if configdrive.required_by(instance):
|
||||||
|
device_type = get_config_drive_type()
|
||||||
|
disk_bus = get_disk_bus_for_device_type(instance,
|
||||||
|
virt_type,
|
||||||
|
image_meta,
|
||||||
|
device_type)
|
||||||
|
config_info = get_next_disk_info(mapping,
|
||||||
|
disk_bus,
|
||||||
|
device_type)
|
||||||
|
mapping['disk.config.rescue'] = config_info
|
||||||
|
|
||||||
|
return mapping
|
||||||
|
|
||||||
|
|
||||||
|
def _get_disk_mapping(virt_type, instance, disk_bus, cdrom_bus, image_meta,
|
||||||
|
block_device_info):
|
||||||
|
"""Build disk mapping for a given instance
|
||||||
|
|
||||||
|
:param virt_type: Virt type used by libvirt.
|
||||||
|
:param instance: nova.objects.instance.Instance object
|
||||||
|
:param disk_bus: Disk bus to use within the mapping
|
||||||
|
:param cdrom_bus: CD-ROM bus to use within the mapping
|
||||||
|
:param image_meta: objects.image_meta.ImageMeta for the instance
|
||||||
|
:param block_device_info: dict detailing disks and volumes attached
|
||||||
|
|
||||||
|
:returns: Disk mapping for the given instance.
|
||||||
|
"""
|
||||||
|
mapping = {}
|
||||||
pre_assigned_device_names = \
|
pre_assigned_device_names = \
|
||||||
[block_device.strip_dev(get_device_name(bdm)) for bdm in itertools.chain(
|
[block_device.strip_dev(get_device_name(bdm)) for bdm in itertools.chain(
|
||||||
driver.block_device_info_get_ephemerals(block_device_info),
|
driver.block_device_info_get_ephemerals(block_device_info),
|
||||||
|
@ -638,17 +682,35 @@ def get_disk_mapping(virt_type, instance, disk_bus, cdrom_bus, image_meta,
|
||||||
disk_bus,
|
disk_bus,
|
||||||
device_type)
|
device_type)
|
||||||
mapping['disk.config'] = config_info
|
mapping['disk.config'] = config_info
|
||||||
|
return mapping
|
||||||
|
|
||||||
# NOTE(lyarwood): This can only be a stable device rescue so add the rescue
|
|
||||||
# disk as the final disk in the mapping.
|
|
||||||
if rescue and rescue_image_meta:
|
|
||||||
rescue_device = get_rescue_device(rescue_image_meta)
|
|
||||||
rescue_bus = get_rescue_bus(instance, virt_type, rescue_image_meta,
|
|
||||||
rescue_device)
|
|
||||||
rescue_info = get_next_disk_info(mapping, rescue_bus,
|
|
||||||
device_type=rescue_device)
|
|
||||||
mapping['disk.rescue'] = rescue_info
|
|
||||||
|
|
||||||
|
def _get_stable_device_rescue_mapping(virt_type, instance, disk_bus, cdrom_bus,
|
||||||
|
image_meta, block_device_info, rescue_image_meta):
|
||||||
|
"""Build a disk mapping for a given instance and add a rescue device
|
||||||
|
|
||||||
|
This method builds the original disk mapping of the instance before
|
||||||
|
attaching the rescue device last.
|
||||||
|
|
||||||
|
:param virt_type: Virt type used by libvirt.
|
||||||
|
:param instance: nova.objects.instance.Instance object
|
||||||
|
:param disk_bus: Disk bus to use within the mapping
|
||||||
|
:param cdrom_bus: CD-ROM bus to use within the mapping
|
||||||
|
:param image_meta: objects.image_meta.ImageMeta for the instance
|
||||||
|
:param block_device_info: dict detailing disks and volumes attached
|
||||||
|
:param rescue_image_meta: objects.image_meta.ImageMeta of the rescue image
|
||||||
|
|
||||||
|
:returns: Disk mapping dict with rescue device added.
|
||||||
|
"""
|
||||||
|
mapping = _get_disk_mapping(
|
||||||
|
virt_type, instance, disk_bus, cdrom_bus, image_meta,
|
||||||
|
block_device_info)
|
||||||
|
rescue_device = get_rescue_device(rescue_image_meta)
|
||||||
|
rescue_bus = get_rescue_bus(instance, virt_type, rescue_image_meta,
|
||||||
|
rescue_device)
|
||||||
|
rescue_info = get_next_disk_info(mapping, rescue_bus,
|
||||||
|
device_type=rescue_device)
|
||||||
|
mapping['disk.rescue'] = rescue_info
|
||||||
return mapping
|
return mapping
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue