]> git.apps.os.sepia.ceph.com Git - teuthology.git/commitdiff
Don't destroy a vps that is owned by someone else 428/head
authorZack Cerza <zack@redhat.com>
Thu, 5 Feb 2015 21:52:32 +0000 (14:52 -0700)
committerZack Cerza <zack@redhat.com>
Thu, 5 Feb 2015 21:58:00 +0000 (14:58 -0700)
This only affects the unlock_one() codepath at this point.

Signed-off-by: Zack Cerza <zack@redhat.com>
teuthology/lock.py
teuthology/provision.py

index e14977241a2917b2cef95edebba8c78b9c1e54e0..02a83e4434586dda1abcfb40c23513f93de758b2 100644 (file)
@@ -431,7 +431,7 @@ def unlock_one(ctx, name, user=None):
     if user is None:
         user = misc.get_user()
     name = misc.canonicalize_hostname(name, user=None)
-    if not provision.destroy_if_vm(ctx, name):
+    if not provision.destroy_if_vm(ctx, name, user):
         log.error('downburst destroy failed for %s', name)
     request = dict(name=name, locked=False, locked_by=user, description=None)
     uri = os.path.join(config.lock_server, 'nodes', name, 'lock', '')
index e9803f51637a9122b303071b312a83c00c673924..e2bcb7cd6480449a911206086f5074d1ef967fe9 100644 (file)
@@ -98,7 +98,7 @@ def create_if_vm(ctx, machine_name):
     return True
 
 
-def destroy_if_vm(ctx, machine_name):
+def destroy_if_vm(ctx, machine_name, user=None):
     """
     Use downburst to destroy a virtual machine
 
@@ -107,6 +107,10 @@ def destroy_if_vm(ctx, machine_name):
     status_info = get_status(machine_name)
     if not status_info or not status_info.get('is_vm', False):
         return True
+    if user is not None and user != status_info['locked_by']:
+        log.error("Tried to destroy {node} as {as_user} but it is locked by {locked_by}".format(
+            node=machine_name, as_user=user, locked_by=status_info['locked_by']))
+        return False
     phys_host = decanonicalize_hostname(status_info['vm_host']['name'])
     destroyMe = decanonicalize_hostname(machine_name)
     dbrst = _get_downburst_exec()