[Kimchi-devel] [PATCH 4/5] Update model to support cdrom eject
Aline Manera
alinefm at linux.vnet.ibm.com
Mon Jun 9 21:19:55 UTC 2014
Reviewed-by: Aline Manera <alinefm at linux.vnet.ibm.com>
On 06/03/2014 04:20 AM, lvroyce at linux.vnet.ibm.com wrote:
> From: Royce Lv <lvroyce at linux.vnet.ibm.com>
>
> Modify xml generation to adjust to cdrom eject change.
>
> Signed-off-by: Royce Lv <lvroyce at linux.vnet.ibm.com>
> ---
> src/kimchi/model/vmstorages.py | 33 +++++++++++++++++++++++----------
> 1 file changed, 23 insertions(+), 10 deletions(-)
>
> diff --git a/src/kimchi/model/vmstorages.py b/src/kimchi/model/vmstorages.py
> index 6511515..354fc36 100644
> --- a/src/kimchi/model/vmstorages.py
> +++ b/src/kimchi/model/vmstorages.py
> @@ -49,10 +49,22 @@ def _get_device_bus(dev_type, dom):
> return lookup(distro, version)[dev_type+'_bus']
>
>
> -def _get_storage_xml(params):
> +def _get_storage_xml(params, ignore_source=False):
> src_type = params.get('src_type')
> disk = E.disk(type=src_type, device=params.get('type'))
> disk.append(E.driver(name='qemu', type=params['format']))
> +
> + disk.append(E.target(dev=params.get('dev'), bus=params['bus']))
> + if params.get('address'):
> + # ide disk target id is always '0'
> + disk.append(E.address(
> + type='drive', controller=params['address']['controller'],
> + bus=params['address']['bus'], target='0',
> + unit=params['address']['unit']))
> +
> + if ignore_source:
> + return ET.tostring(disk)
> +
> # Working with url paths
> if src_type == 'network':
> output = urlparse.urlparse(params.get('path'))
> @@ -67,13 +79,6 @@ def _get_storage_xml(params):
> source.set(DEV_TYPE_SRC_ATTR_MAP[src_type], params.get('path'))
> disk.append(source)
>
> - disk.append(E.target(dev=params.get('dev'), bus=params['bus']))
> - if params.get('address'):
> - # ide disk target id is always '0'
> - disk.append(E.address(
> - type='drive', controller=params['address']['controller'],
> - bus=params['address']['bus'], target='0',
> - unit=params['address']['unit']))
> return ET.tostring(disk)
>
>
> @@ -230,17 +235,25 @@ class VMStorageModel(object):
> raise OperationFailed("KCHVMSTOR0010E", {'error': e.message})
>
> def update(self, vm_name, dev_name, params):
> - params['src_type'] = _check_path(params['path'])
> + if params.get('path'):
> + params['src_type'] = _check_path(params['path'])
> + ignore_source = False
> + else:
> + params['src_type'] = 'file'
> + ignore_source = True
> dom = VMModel.get_vm(vm_name, self.conn)
>
> dev_info = self.lookup(vm_name, dev_name)
> if dev_info['type'] != 'cdrom':
> raise InvalidOperation("KCHVMSTOR0006E")
> dev_info.update(params)
> - xml = _get_storage_xml(dev_info)
> + xml = _get_storage_xml(dev_info, ignore_source)
>
> try:
> dom.updateDeviceFlags(xml, get_vm_config_flag(dom, 'all'))
> except Exception as e:
> raise OperationFailed("KCHVMSTOR0009E", {'error': e.message})
> return dev_name
> +
> + def eject(self, vm_name, dev_name):
> + return self.update(vm_name, dev_name, dict())
More information about the Kimchi-devel
mailing list