'Get the non-volume disk information from the domain xml
:param LibvirtConfigGuest guest_config: the libvirt domain config
for the instance
:param dict block_device_info: block device info for BDMs
:returns disk_info: list of dicts with keys:
* \'type\': the disk type (str)
* \'path\': the disk path (str)
* \'virt_disk_size\': the virtual disk size (int)
* \'backing_file\': backing file of a disk image (str)
* \'disk_size\': physical disk size (int)
* \'over_committed_disk_size\': virt_disk_size - disk_size or 0'

def _get_instance_disk_info_from_config(self, guest_config, block_device_info):

    block_device_mapping = driver.block_device_info_get_mapping(block_device_info)
    volume_devices = set()
    for vol in block_device_mapping:
        disk_dev = vol['mount_device'].rpartition('/')[2]
        volume_devices.add(disk_dev)
    disk_info = []
    if ((guest_config.virt_type == 'parallels') and (guest_config.os_type == fields.VMMode.EXE)):
        node_type = 'filesystem'
    else:
        node_type = 'disk'
    for device in guest_config.devices:
        if (device.root_name != node_type):
            continue
        disk_type = device.source_type
        if (device.root_name == 'filesystem'):
            target = device.target_dir
            if (device.source_type == 'file'):
                path = device.source_file
            elif (device.source_type == 'block'):
                path = device.source_dev
            else:
                path = None
        else:
            target = device.target_dev
            path = device.source_path
        if (not path):
            LOG.debug('skipping    disk    for    %s    as    it    does    not    have    a    path', guest_config.name)
            continue
        if (disk_type not in ['file', 'block']):
            LOG.debug('skipping    disk    because    it    looks    like    a    volume', path)
            continue
        if (target in volume_devices):
            LOG.debug('skipping    disk    %(path)s    (%(target)s)    as    it    is    a    volume', {'path': path, 'target': target})
            continue
        if (device.root_name == 'filesystem'):
            driver_type = device.driver_type
        else:
            driver_type = device.driver_format
        if (disk_type == 'file'):
            if (driver_type == 'ploop'):
                dk_size = 0
                for (dirpath, dirnames, filenames) in os.walk(path):
                    for f in filenames:
                        fp = os.path.join(dirpath, f)
                        dk_size += os.path.getsize(fp)
            else:
                dk_size = int(os.path.getsize(path))
        elif ((disk_type == 'block') and block_device_info):
            dk_size = lvm.get_volume_size(path)
        else:
            LOG.debug('skipping    disk    %(path)s    (%(target)s)    -    unable    to    determine    if    volume', {'path': path, 'target': target})
            continue
        if (driver_type in ('qcow2', 'ploop')):
            backing_file = libvirt_utils.get_disk_backing_file(path)
            virt_size = disk_api.get_disk_size(path)
            over_commit_size = (int(virt_size) - dk_size)
        else:
            backing_file = ''
            virt_size = dk_size
            over_commit_size = 0
        disk_info.append({'type': driver_type, 'path': path, 'virt_disk_size': virt_size, 'backing_file': backing_file, 'disk_size': dk_size, 'over_committed_disk_size': over_commit_size})
    return disk_info
