[Kimchi-devel] [PATCH] Refactor vmstorage name generation

Aline Manera alinefm at linux.vnet.ibm.com
Wed Aug 13 18:18:11 UTC 2014


On 08/13/2014 05:53 AM, lvroyce at linux.vnet.ibm.com wrote:
> From: Royce Lv <lvroyce at linux.vnet.ibm.com>
>
> We generated all storage name with 'hd' prefix,
> which is not proper for scsi and virtio disk.
> So refactor name generation to produce proper device name.
>
> Signed-off-by: Royce Lv <lvroyce at linux.vnet.ibm.com>
> ---
>   src/kimchi/model/vmstorages.py | 46 ++++++++++++++++++++++--------------------
>   1 file changed, 24 insertions(+), 22 deletions(-)
>
> diff --git a/src/kimchi/model/vmstorages.py b/src/kimchi/model/vmstorages.py
> index b5311db..9ae8584 100644
> --- a/src/kimchi/model/vmstorages.py
> +++ b/src/kimchi/model/vmstorages.py
> @@ -38,6 +38,7 @@ from kimchi.vmdisks import get_device_xml, get_vm_disk, get_vm_disk_list
>   from kimchi.vmdisks import DEV_TYPE_SRC_ATTR_MAP
>
>   HOTPLUG_TYPE = ['scsi', 'virtio']
> +prefix_map = {'ide': 'hd', 'virtio': 'vd', 'scsi': 'sd'}

Usually constants are declared with CAPS LOCK
PREFIX_MAP = {'ide': 'hd', 'virtio': 'vd', 'scsi': 'sd'}

>
>   def _get_device_bus(dev_type, dom):
> @@ -140,17 +141,8 @@ class VMStoragesModel(object):
>
>       def create(self, vm_name, params):
>           dom = VMModel.get_vm(vm_name, self.conn)
> -        # Use device name passed or pick next
> -        dev_name = params.get('dev', None)
> -        if dev_name is None:
> -            params['dev'] = self._get_storage_device_name(vm_name)
> -        else:
> -            devices = self.get_list(vm_name)
> -            if dev_name in devices:
> -                raise OperationFailed(
> -                    'KCHVMSTOR0004E',
> -                    {'dev_name': dev_name, 'vm_name': vm_name})
> -
> +        params['bus'] = _get_device_bus(params['type'], dom)
> +        self._get_storage_device_name(vm_name, params)
>           # Path will never be blank due to API.json verification.
>           # There is no need to cover this case here.
>           params['format'] = 'raw'
> @@ -171,7 +163,6 @@ class VMStoragesModel(object):
>               params['format'] = vol_info['format']
>               params['path'] = vol_info['path']
>           params['src_type'] = _check_path(params['path'])
> -        params['bus'] = _get_device_bus(params['type'], dom)
>           if (params['bus'] not in HOTPLUG_TYPE
>                   and DOM_STATE_MAP[dom.info()[0]] != 'shutoff'):
>               raise InvalidOperation('KCHVMSTOR0011E')
> @@ -187,16 +178,27 @@ class VMStoragesModel(object):
>               raise OperationFailed("KCHVMSTOR0008E", {'error': e.message})
>           return params['dev']
>
> -    def _get_storage_device_name(self, vm_name):
> -        dev_list = [dev for dev in self.get_list(vm_name)
> -                    if dev.startswith('hd')]
> -        if len(dev_list) == 0:
> -            return 'hda'
> -        dev_list.sort()
> -        last_dev = dev_list.pop()
> -        # TODO: Improve to device names "greater then" hdz
> -        next_dev_letter_pos = string.ascii_lowercase.index(last_dev[2]) + 1
> -        return 'hd' + string.ascii_lowercase[next_dev_letter_pos]
> +    def _get_storage_device_name(self, vm_name, params):
> +        if params.get('dev') is None:
> +            bus_prefix = prefix_map[params['bus']]
> +            dev_list = [dev for dev in self.get_list(vm_name)
> +                        if dev.startswith(bus_prefix)]
> +            if len(dev_list) == 0:
> +                params['dev'] = bus_prefix + 'a'
> +            else:
> +                dev_list.sort()
> +                last_dev = dev_list.pop()
> +                # TODO: Improve to device names "greater then" hdz
> +                next_dev_letter_pos =\
> +                    string.ascii_lowercase.index(last_dev[2]) + 1
> +                params['dev'] =\
> +                    bus_prefix + string.ascii_lowercase[next_dev_letter_pos]
> +
> +        devices = self.get_list(vm_name)
> +        if params['dev'] in devices:
> +            raise OperationFailed(
> +                'KCHVMSTOR0004E',
> +                {'dev_name': params['dev'], 'vm_name': vm_name})
>
>       def get_list(self, vm_name):
>           dom = VMModel.get_vm(vm_name, self.conn)




More information about the Kimchi-devel mailing list