Example #1
0
def delete_volume(cloud: Cloud, device_id: str):
    LOG.info('Delete volume: %s' % device_id)
    volume = [v for v in cloud.list_volumes() if v.id == device_id]
    if volume:
        volume = volume[0]
    else:
        raise AssertionError('Can\'t found Volume in cloud with ID: %s' % device_id)
    for i in range(10):
        try:
            cloud._driver._conn.destroy_volume(volume)
            break
        except Exception as e:
            if 'attached' in e.message:
                LOG.warning('Volume %s currently attached to server' % device_id)
                time.sleep(60)
Example #2
0
def assert_attached_disk_types(context: dict, cloud: Cloud, farm: Farm):
    #TODO: Add support for maximum clouds
    LOG.info('Verify type of attached disks')
    role = lib_role.get_role(context, farm)
    storage_config = IMPL.farm.get_role_settings(farm.id, role.role.id)['storages']
    volume_ids = {}
    attached_volumes = {}
    platform = CONF.feature.platform
    for device in storage_config['configs']:
        volume_ids[device['mountPoint']] = [s['storageId'] for s in storage_config['devices'][device['id']]]
    ids = list(chain.from_iterable(volume_ids.values()))
    volumes = list(filter(lambda x: x.id in ids, cloud.list_volumes()))
    for mount_point in volume_ids:
        attached_volumes[mount_point] = filter(lambda x: x.id in volume_ids[mount_point], volumes)
    LOG.debug(f'Volumes in mount points: {attached_volumes}')
    if platform.is_gce:
        diskmount = next(attached_volumes['/media/diskmount'])
        assert diskmount.extra['type'] == 'pd-standard', f"Volume attached to /media/diskmount must be pd-standard " \
            f"but it: {diskmount.extra['type']}"