# Tool to clean up leaked Boot-From-Volume Volumes from openstack import connection import openstack import datetime import sys # openstack.enable_logging(http_debug=True) c = openstack.connect(cloud='openstackjenkins-vexxhost', region_name='sjc1') now = datetime.datetime.utcnow() server_ids = [s.id for s in c.list_servers()] for vol in c.list_volumes(): vol_age = datetime.datetime.strptime(vol['created_at'][:19], '%Y-%m-%dT%H:%M:%S') - now if (vol.size == 80 and vol_age.seconds > 3600 and vol.attachments and vol.attachments[0]['server_id'] not in server_ids): att = vol.attachments[0] print('DELETE /attachments/{attachment} for {server}'.format( server=att['server_id'], attachment=att['attachment_id'])) print(c.block_storage.delete( '/attachments/{attachment}'.format(attachment=att['attachment_id']), microversion='3.31')) print('DELETE volume {vol}'.format(vol=att['volume_id'])) print(c.delete_volume(dict(id=att['volume_id'])))