[Kimchi-devel] [PATCH] bug fix: Allow user updates the cdrom from local to remote file

Royce Lv lvroyce at linux.vnet.ibm.com
Tue Aug 12 10:08:17 UTC 2014


I can reproduce this (insane)bug in Fedora20:(,
will it be better to integrate it with vm model update logic to wrap 
this kind of fallback?
That way code maintain would be easier.

On 2014年08月12日 10:31, Aline Manera wrote:
> dom.updateDeviceFlags() can not work well while updating cdrom configuration
> from local to remote file.
> Even passing a right xml to this API, it updates the vm xml like below:
>
>      <disk type='network' device='cdrom'>
>        <driver name='qemu' type='raw'/>
>        <source protocol='nbd' name='/13.04/ubuntu-13.04-desktop-amd64.iso'/>
>        <target dev='hdc' bus='ide'/>
>        <readonly/>
>        <address type='drive' controller='0' bus='1' target='0' unit='0'/>
>      </disk>
>
> Instead of:
>
>      <disk type='network' device='cdrom'>
>        <driver name='qemu' type='raw'/>
>        <source protocol='http' name='/13.04/ubuntu-13.04-desktop-amd64.iso'>
>          <host name='ubuntu-releases.cs.umn.edu' port='80'/>
>        </source>
>        <target dev='hdc' bus='ide'/>
>        <readonly/>
>        <address type='drive' controller='0' bus='1' target='0' unit='0'/>
>      </disk>
>
> In this case it is safe to manually update the vm xml to properly change the
> cdrom configuration instead of using the libvirt API.
>
> Signed-off-by: Aline Manera <alinefm at linux.vnet.ibm.com>
> ---
>   src/kimchi/model/vmstorages.py | 15 +++++++++++++++
>   1 file changed, 15 insertions(+)
>
> diff --git a/src/kimchi/model/vmstorages.py b/src/kimchi/model/vmstorages.py
> index b5311db..d2da4aa 100644
> --- a/src/kimchi/model/vmstorages.py
> +++ b/src/kimchi/model/vmstorages.py
> @@ -250,6 +250,21 @@ class VMStorageModel(object):
>           xml = _get_storage_xml(dev_info, ignore_source)
>
>           try:
> +            # FIXME: dom.updateDeviceFlags() can not work well while updating
> +            # cdrom configuration from local to remote file
> +            # In this case it is safe to manually update the vm xml to properly
> +            # change the cdrom configuration
> +            if dev_info['type'] == 'cdrom' and params['src_type'] == 'network':
> +                # check if the current cdrom is a local file
> +                conn = self.conn.get()
> +                dom = conn.lookupByName(vm_name)
> +                root = ET.fromstring(dom.XMLDesc(0))
> +                devices = root.find(".devices")
> +                disk = devices.find(".disk/target[@dev='%s']/.." % dev_name)
> +                if disk.attrib["type"] != 'network':
> +                    devices.replace(disk, ET.fromstring(xml))
> +                    conn.defineXML(ET.tostring(root))
> +
>               dom.updateDeviceFlags(xml, get_vm_config_flag(dom, 'all'))
>           except Exception as e:
>               raise OperationFailed("KCHVMSTOR0009E", {'error': e.message})




More information about the Kimchi-devel mailing list