Openstack 源码修改,实现nova boot 创建的虚拟机支持USB 重定向(支持其它如声卡的方法类似)
方式是在产生的xml 字符串的时候 直接强行添加入xml
找到产生xml的文件
vim /usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py
找到函数:
def _get_guest_xml(self, context, instance,network_info, disk_info,
image_meta, rescue=None,
block_device_info=None,write_to_disk=False):
…………………
LOG.debug(strutils.mask_password(msg),instance=instance)
conf = self._get_guest_config(instance, network_info, image_meta,
disk_info, rescue, block_device_info,
context)
xml = conf.to_xml()
“”” 使用字符操作,强行加入以下USB重定向代码到xml中------------------------------------add
pos = xml.find("</devices>")
if pos !=-1:
xml = xml[:pos]+" <redirdev bus='usb' type='spicevmc'>\n </redirdev>\n <redirdev bus='usb'type='spicevmc'>\n </redirdev>\n <redirdev bus='usb' type='spicevmc'>\n </redirdev>\n "+xml[pos:]
“””---------------------------------------------------------------------------------------------------------------------end
if write_to_disk:
instance_dir = libvirt_utils.get_instance_path(instance)
xml_path = os.path.join(instance_dir, 'libvirt.xml')
libvirt_utils.write_to_file(xml_path, xml)
LOG.debug('End _get_guest_xml xml=%(xml)s',
{'xml': xml},instance=instance)
return xml
………………
重启服务即可
创建虚拟机,virt-manager 中效果如下: