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)
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']}"