
It is the first step to have vmtemplate.py using the same functions used by model/vmstorages.py The disk generation will also use get_disk_xml() but it will be done in a separated patch. Signed-off-by: Aline Manera <alinefm@linux.vnet.ibm.com> --- src/kimchi/model/vms.py | 1 - src/kimchi/vmtemplate.py | 78 +++++++++++++----------------------------------- 2 files changed, 20 insertions(+), 59 deletions(-) diff --git a/src/kimchi/model/vms.py b/src/kimchi/model/vms.py index 1089464..51d2348 100644 --- a/src/kimchi/model/vms.py +++ b/src/kimchi/model/vms.py @@ -209,7 +209,6 @@ class VMsModel(object): stream_protocols = self.caps.libvirt_stream_protocols xml = t.to_vm_xml(name, vm_uuid, libvirt_stream_protocols=stream_protocols, - qemu_stream_dns=self.caps.qemu_stream_dns, graphics=graphics, volumes=vol_list) diff --git a/src/kimchi/vmtemplate.py b/src/kimchi/vmtemplate.py index 5f22db9..aede24f 100644 --- a/src/kimchi/vmtemplate.py +++ b/src/kimchi/vmtemplate.py @@ -19,23 +19,20 @@ import os import string -import socket import time import urlparse import uuid - from distutils.version import LooseVersion - +from lxml import etree +from lxml.builder import E from kimchi import osinfo from kimchi.exception import InvalidParameter, IsoFormatError, MissingParameter from kimchi.imageinfo import probe_image, probe_img_info from kimchi.isoinfo import IsoImage from kimchi.utils import check_url_path, pool_name_from_uri -from lxml import etree -from lxml.builder import E - +from kimchi.xmlutils.disk import get_disk_xml QEMU_NAMESPACE = "xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'" @@ -122,69 +119,36 @@ class VMTemplate(object): except IsoFormatError: raise InvalidParameter("KCHISO0001E", {'filename': iso}) - def _get_cdrom_xml(self, libvirt_stream_protocols, qemu_stream_dns): + def _get_cdrom_xml(self, libvirt_stream_protocols): if 'cdrom' not in self.info: return '' - bus = self.info['cdrom_bus'] - dev = "%s%s" % (self._bus_to_dev[bus], - string.lowercase[self.info['cdrom_index']]) - local_file = """ - <disk type='file' device='cdrom'> - <driver name='qemu' type='raw'/> - <source file='%(src)s' /> - <target dev='%(dev)s' bus='%(bus)s'/> - <readonly/> - </disk> - """ - - network_file = """ - <disk type='network' device='cdrom'> - <driver name='qemu' type='raw'/> - <source protocol='%(protocol)s' name='%(url_path)s'> - <host name='%(hostname)s' port='%(port)s'/> - </source> - <target dev='%(dev)s' bus='%(bus)s'/> - <readonly/> - </disk> - """ + params = {} + params['type'] = 'cdrom' + params['format'] = 'raw' + params['bus'] = self.info['cdrom_bus'] + params['index'] = self.info['cdrom_index'] + params['path'] = self.info['cdrom'] qemu_stream_cmdline = """ <qemu:commandline> <qemu:arg value='-drive'/> - <qemu:arg value='file=%(url)s,if=none,id=drive-%(bus)s0-1-0,\ -readonly=on,format=raw'/> + <qemu:arg value='file=%(path)s,if=none,id=drive-%(bus)s0-1-0,\ +readonly=on,format=%(format)s'/> <qemu:arg value='-device'/> <qemu:arg value='%(bus)s-cd,bus=%(bus)s.1,unit=0,\ drive=drive-%(bus)s0-1-0,id=%(bus)s0-1-0'/> </qemu:commandline> """ - if not self.info.get('iso_stream', False): - params = {'src': self.info['cdrom'], 'dev': dev, 'bus': bus} - return local_file % (params) - - output = urlparse.urlparse(self.info['cdrom']) - port = output.port - protocol = output.scheme - hostname = output.hostname - url_path = output.path - - if port is None: - port = socket.getservbyname(protocol) + if self.info.get('iso_stream', False): + protocol = urlparse.urlparse(params['path']).scheme + if protocol not in libvirt_stream_protocols: + # return qemucmdline XML + return qemu_stream_cmdline % params - url = self.info['cdrom'] - if not qemu_stream_dns: - hostname = socket.gethostbyname(hostname) - url = protocol + "://" + hostname + ":" + str(port) + url_path - - if protocol not in libvirt_stream_protocols: - return qemu_stream_cmdline % {'url': url, 'bus': bus} - - params = {'protocol': protocol, 'url_path': url_path, - 'hostname': hostname, 'port': port, 'dev': dev, 'bus': bus} - - return network_file % (params) + dev, xml = get_disk_xml(params) + return xml def _get_disks_xml(self, vm_uuid): storage_path = self._get_storage_path() @@ -380,10 +344,8 @@ drive=drive-%(bus)s0-1-0,id=%(bus)s0-1-0'/> else: params['disks'] = self._get_disks_xml(vm_uuid) - qemu_stream_dns = kwargs.get('qemu_stream_dns', False) libvirt_stream_protocols = kwargs.get('libvirt_stream_protocols', []) - cdrom_xml = self._get_cdrom_xml(libvirt_stream_protocols, - qemu_stream_dns) + cdrom_xml = self._get_cdrom_xml(libvirt_stream_protocols) if not urlparse.urlparse(self.info.get('cdrom', "")).scheme in \ libvirt_stream_protocols and \ -- 1.9.3