mirror of
https://github.com/Security-Onion-Solutions/securityonion.git
synced 2025-12-06 09:12:45 +01:00
nsm volume as vdb, os vda by ordering pci slots
This commit is contained in:
@@ -334,6 +334,34 @@ def attach_volume_to_vm(conn, vm_name, volume_path, logger):
|
|||||||
logger.error("VM: Could not find <devices> element in XML")
|
logger.error("VM: Could not find <devices> element in XML")
|
||||||
raise VolumeAttachmentError("Could not find <devices> element in VM XML")
|
raise VolumeAttachmentError("Could not find <devices> element in VM XML")
|
||||||
|
|
||||||
|
# Log ALL devices with PCI addresses to find conflicts
|
||||||
|
logger.info("DISK_DEBUG: Examining ALL devices with PCI addresses")
|
||||||
|
for device in devices_elem:
|
||||||
|
address = device.find('./address')
|
||||||
|
if address is not None and address.get('type') == 'pci':
|
||||||
|
bus = address.get('bus', 'unknown')
|
||||||
|
slot = address.get('slot', 'unknown')
|
||||||
|
function = address.get('function', 'unknown')
|
||||||
|
logger.info(f"DISK_DEBUG: Device {device.tag}: bus={bus}, slot={slot}, function={function}")
|
||||||
|
|
||||||
|
# Log existing disk configuration for debugging
|
||||||
|
logger.info("DISK_DEBUG: Examining existing disk configuration")
|
||||||
|
existing_disks = devices_elem.findall('./disk')
|
||||||
|
for idx, disk in enumerate(existing_disks):
|
||||||
|
target = disk.find('./target')
|
||||||
|
source = disk.find('./source')
|
||||||
|
address = disk.find('./address')
|
||||||
|
|
||||||
|
dev_name = target.get('dev') if target is not None else 'unknown'
|
||||||
|
source_file = source.get('file') if source is not None else 'unknown'
|
||||||
|
|
||||||
|
if address is not None:
|
||||||
|
slot = address.get('slot', 'unknown')
|
||||||
|
bus = address.get('bus', 'unknown')
|
||||||
|
logger.info(f"DISK_DEBUG: Disk {idx}: dev={dev_name}, source={source_file}, slot={slot}, bus={bus}")
|
||||||
|
else:
|
||||||
|
logger.info(f"DISK_DEBUG: Disk {idx}: dev={dev_name}, source={source_file}, no address element")
|
||||||
|
|
||||||
# Check if vdb already exists
|
# Check if vdb already exists
|
||||||
for disk in devices_elem.findall('./disk'):
|
for disk in devices_elem.findall('./disk'):
|
||||||
target = disk.find('./target')
|
target = disk.find('./target')
|
||||||
@@ -369,16 +397,38 @@ def attach_volume_to_vm(conn, vm_name, volume_path, logger):
|
|||||||
})
|
})
|
||||||
|
|
||||||
# Add address element
|
# Add address element
|
||||||
|
# Use bus 0x07 with slot 0x00 to ensure NSM volume appears after OS disk (which is on bus 0x04)
|
||||||
|
# Bus 0x05 is used by memballoon, bus 0x06 is used by rng device
|
||||||
|
# Libvirt requires slot <= 0 for non-zero buses
|
||||||
|
# This ensures vda = OS disk, vdb = NSM volume
|
||||||
ET.SubElement(disk_elem, 'address', attrib={
|
ET.SubElement(disk_elem, 'address', attrib={
|
||||||
'type': 'pci',
|
'type': 'pci',
|
||||||
'domain': '0x0000',
|
'domain': '0x0000',
|
||||||
'bus': '0x00',
|
'bus': '0x07',
|
||||||
'slot': '0x07',
|
'slot': '0x00',
|
||||||
'function': '0x0'
|
'function': '0x0'
|
||||||
})
|
})
|
||||||
|
|
||||||
logger.info(f"HARDWARE: Added disk configuration for vdb")
|
logger.info(f"HARDWARE: Added disk configuration for vdb")
|
||||||
|
|
||||||
|
# Log disk ordering after adding new disk
|
||||||
|
logger.info("DISK_DEBUG: Disk configuration after adding NSM volume")
|
||||||
|
all_disks = devices_elem.findall('./disk')
|
||||||
|
for idx, disk in enumerate(all_disks):
|
||||||
|
target = disk.find('./target')
|
||||||
|
source = disk.find('./source')
|
||||||
|
address = disk.find('./address')
|
||||||
|
|
||||||
|
dev_name = target.get('dev') if target is not None else 'unknown'
|
||||||
|
source_file = source.get('file') if source is not None else 'unknown'
|
||||||
|
|
||||||
|
if address is not None:
|
||||||
|
slot = address.get('slot', 'unknown')
|
||||||
|
bus = address.get('bus', 'unknown')
|
||||||
|
logger.info(f"DISK_DEBUG: Disk {idx}: dev={dev_name}, source={source_file}, slot={slot}, bus={bus}")
|
||||||
|
else:
|
||||||
|
logger.info(f"DISK_DEBUG: Disk {idx}: dev={dev_name}, source={source_file}, no address element")
|
||||||
|
|
||||||
# Convert XML back to string
|
# Convert XML back to string
|
||||||
new_xml_desc = ET.tostring(root, encoding='unicode')
|
new_xml_desc = ET.tostring(root, encoding='unicode')
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user