Skip to content

Commit

Permalink
openstack: fix all volumes nuke
Browse files Browse the repository at this point in the history
Do not allow teuthology-nuke to delete all volumes on openstack.

There is a bug on some openstack clients that --name option
does not work correctly for 'openstack volume list' in contrast
to 'openstack server list' and lists all available volumes
ignoring '--name' option at all.

Signed-off-by: Kyr Shatskyy <[email protected]>
  • Loading branch information
kshtsk authored and Kyr Shatskyy committed Feb 8, 2019
1 parent ab7fa3c commit 22b1a48
Showing 1 changed file with 19 additions and 8 deletions.
27 changes: 19 additions & 8 deletions teuthology/nuke/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,17 @@
log = logging.getLogger(__name__)


def openstack_volume_id(volume):
return (volume.get('ID') or volume['id'])


def openstack_volume_name(volume):
return (volume.get('Display Name') or
volume.get('display_name') or
volume.get('Name') or
volume.get('name'))


def stale_openstack(ctx):
targets = dict(map(lambda i: (i['ID'], i),
OpenStack.list_instances()))
Expand Down Expand Up @@ -93,16 +104,15 @@ def openstack_delete_volume(id):
def stale_openstack_volumes(ctx, volumes):
now = datetime.datetime.now()
for volume in volumes:
volume_id = volume.get('ID') or volume['id']
volume_id = openstack_volume_id(volume)
try:
volume = json.loads(OpenStack().run("volume show -f json " +
volume_id))
except subprocess.CalledProcessError:
log.debug("stale-openstack: {id} disappeared, ignored"
.format(id=volume_id))
continue
volume_name = (volume.get('Display Name') or volume.get('display_name')
or volume['name'])
volume_name = openstack_volume_name(volume)
enforce_json_dictionary(volume)
created_at = datetime.datetime.strptime(
volume['created_at'], '%Y-%m-%dT%H:%M:%S.%f')
Expand Down Expand Up @@ -156,11 +166,12 @@ def openstack_remove_again():
xargs --no-run-if-empty --max-args 1 -P20 openstack server delete --wait
true
""")
sh("""
openstack volume list --name REMOVE-ME --column ID --format value |
xargs --no-run-if-empty --max-args 1 -P20 openstack volume delete
true
""")
volumes = OpenStack().run("volume list -f json --long")
remove_me = [openstack_volume_id(v) for v in volumes
if 'REMOVE-ME' in openstack_volume_name(v)]
for i in remove_me:
log.info("Trying to remove stale volume %i" % i)
openstack_delete_volume(i)


def main(args):
Expand Down

0 comments on commit 22b1a48

Please sign in to comment.