--- /dev/null
+import argparse
+import textwrap
+
+import teuthology.lock
+
+
+def _positive_int(string):
+ value = int(string)
+ if value < 1:
+ raise argparse.ArgumentTypeError(
+ '{string} is not positive'.format(string=string))
+ return value
+
+
+def main():
+ teuthology.lock.main(parse_args())
+
+
+def parse_args():
+ parser = argparse.ArgumentParser(
+ description='Lock, unlock, or query lock status of machines',
+ epilog=textwrap.dedent('''
+ Examples:
+ teuthology-lock --summary
+ teuthology-lock --lock-many 1 --machine-type vps
+ teuthology-lock --lock -t target.yaml
+ teuthology-lock --list-targets plana01
+ teuthology-lock --list --brief --owner user@host
+ teuthology-lock --update --status down --desc testing plana01
+ '''),
+ formatter_class=argparse.RawTextHelpFormatter)
+ parser.add_argument(
+ '-v', '--verbose',
+ action='store_true',
+ default=False,
+ help='be more verbose',
+ )
+ group = parser.add_mutually_exclusive_group(required=True)
+ group.add_argument(
+ '--list',
+ action='store_true',
+ default=False,
+ help='Show lock info for machines owned by you, or only machines ' +
+ 'specified. Can be restricted by --owner, --status, and --locked.',
+ )
+ group.add_argument(
+ '--list-targets',
+ action='store_true',
+ default=False,
+ help='Show lock info for all machines, or only machines specified, ' +
+ 'in targets: yaml format. Can be restricted by --owner, --status, ' +
+ 'and --locked.',
+ )
+ group.add_argument(
+ '--lock',
+ action='store_true',
+ default=False,
+ help='lock particular machines',
+ )
+ group.add_argument(
+ '--unlock',
+ action='store_true',
+ default=False,
+ help='unlock particular machines',
+ )
+ group.add_argument(
+ '--lock-many',
+ dest='num_to_lock',
+ type=_positive_int,
+ help='lock this many machines',
+ )
+ group.add_argument(
+ '--update',
+ action='store_true',
+ default=False,
+ help='update the description or status of some machines',
+ )
+ group.add_argument(
+ '--summary',
+ action='store_true',
+ default=False,
+ help='summarize locked-machine counts by owner',
+ )
+ parser.add_argument(
+ '-a', '--all',
+ action='store_true',
+ default=False,
+ help='list all machines, not just those owned by you',
+ )
+ parser.add_argument(
+ '--owner',
+ default=None,
+ help='owner of the lock(s) (must match to unlock a machine)',
+ )
+ parser.add_argument(
+ '-f',
+ action='store_true',
+ default=False,
+ help="don't exit after the first error, continue locking or " +
+ "unlocking other machines",
+ )
+ parser.add_argument(
+ '--desc',
+ default=None,
+ help='lock description',
+ )
+ parser.add_argument(
+ '--desc-pattern',
+ default=None,
+ help='lock description',
+ )
+ parser.add_argument(
+ '--machine-type',
+ default=None,
+ help='Type of machine to lock, valid choices: mira | plana | ' +
+ 'burnupi | vps | saya | tala',
+ )
+ parser.add_argument(
+ '--status',
+ default=None,
+ choices=['up', 'down'],
+ help='whether a machine is usable for testing',
+ )
+ parser.add_argument(
+ '--locked',
+ default=None,
+ choices=['true', 'false'],
+ help='whether a machine is locked',
+ )
+ parser.add_argument(
+ '--brief',
+ action='store_true',
+ default=False,
+ help='Shorten information reported from --list',
+ )
+ parser.add_argument(
+ '-t', '--targets',
+ dest='targets',
+ default=None,
+ help='input yaml containing targets',
+ )
+ parser.add_argument(
+ 'machines',
+ metavar='MACHINE',
+ default=[],
+ nargs='*',
+ help='machines to operate on',
+ )
+ parser.add_argument(
+ '--os-type',
+ default='ubuntu',
+ help='virtual machine type',
+ )
+
+ return parser.parse_args()
import tempfile
import os
import time
-import textwrap
-from argparse import RawTextHelpFormatter
from .config import config
from . import lockstatus as ls
ok_machs[machine] = machines[machine]
else:
log.error('Unable to create virtual machine: %s' % machine)
- unlock(ctx, machine)
+ unlock_one(ctx, machine)
return ok_machs
return machines
if status == 503:
return []
-def lock(ctx, name, user=None, description=None):
+def lock_one(ctx, name, user=None, description=None):
if user is None:
user = teuthology.get_user()
success, _, _ = ls.send_request(
return success
-def unlock(ctx, name, user=None):
+def unlock_one(ctx, name, user=None):
if user is None:
user = teuthology.get_user()
success, _, _ = ls.send_request(
return True
-def _positive_int(string):
- value = int(string)
- if value < 1:
- raise argparse.ArgumentTypeError(
- '{string} is not positive'.format(string=string))
- return value
-
-
def canonicalize_hostname(s):
if re.match('ubuntu@.*\.front\.sepia\.ceph\.com', s) is None:
s = 'ubuntu@' + s + '.front.sepia.ceph.com'
return s
-def main():
- parser = argparse.ArgumentParser(
- description='Lock, unlock, or query lock status of machines',
- epilog=textwrap.dedent('''
- Examples:
- teuthology-lock --summary
- teuthology-lock --lock-many 1 --machine-type vps
- teuthology-lock --lock -t target.yaml
- teuthology-lock --list-targets plana01
- teuthology-lock --list --brief --owner user@host
- teuthology-lock --update --status down --desc testing plana01
- '''),
- formatter_class=RawTextHelpFormatter)
- parser.add_argument(
- '-v', '--verbose',
- action='store_true',
- default=False,
- help='be more verbose',
- )
- group = parser.add_mutually_exclusive_group(required=True)
- group.add_argument(
- '--list',
- action='store_true',
- default=False,
- help='Show lock info for machines owned by you, or only machines ' +
- 'specified. Can be restricted by --owner, --status, and --locked.',
- )
- group.add_argument(
- '--list-targets',
- action='store_true',
- default=False,
- help='Show lock info for all machines, or only machines specified, ' +
- 'in targets: yaml format. Can be restricted by --owner, --status, ' +
- 'and --locked.',
- )
- group.add_argument(
- '--lock',
- action='store_true',
- default=False,
- help='lock particular machines',
- )
- group.add_argument(
- '--unlock',
- action='store_true',
- default=False,
- help='unlock particular machines',
- )
- group.add_argument(
- '--lock-many',
- dest='num_to_lock',
- type=_positive_int,
- help='lock this many machines',
- )
- group.add_argument(
- '--update',
- action='store_true',
- default=False,
- help='update the description or status of some machines',
- )
- group.add_argument(
- '--summary',
- action='store_true',
- default=False,
- help='summarize locked-machine counts by owner',
- )
- parser.add_argument(
- '-a', '--all',
- action='store_true',
- default=False,
- help='list all machines, not just those owned by you',
- )
- parser.add_argument(
- '--owner',
- default=None,
- help='owner of the lock(s) (must match to unlock a machine)',
- )
- parser.add_argument(
- '-f',
- action='store_true',
- default=False,
- help="don't exit after the first error, continue locking or " +
- "unlocking other machines",
- )
- parser.add_argument(
- '--desc',
- default=None,
- help='lock description',
- )
- parser.add_argument(
- '--desc-pattern',
- default=None,
- help='lock description',
- )
- parser.add_argument(
- '--machine-type',
- default=None,
- help='Type of machine to lock, valid choices: mira | plana | ' +
- 'burnupi | vps | saya | tala',
- )
- parser.add_argument(
- '--status',
- default=None,
- choices=['up', 'down'],
- help='whether a machine is usable for testing',
- )
- parser.add_argument(
- '--locked',
- default=None,
- choices=['true', 'false'],
- help='whether a machine is locked',
- )
- parser.add_argument(
- '--brief',
- action='store_true',
- default=False,
- help='Shorten information reported from --list',
- )
- parser.add_argument(
- '-t', '--targets',
- dest='targets',
- default=None,
- help='input yaml containing targets',
- )
- parser.add_argument(
- 'machines',
- metavar='MACHINE',
- default=[],
- nargs='*',
- help='machines to operate on',
- )
- parser.add_argument(
- '--os-type',
- default='ubuntu',
- help='virtual machine type',
- )
-
- ctx = parser.parse_args()
-
+def main(ctx):
loglevel = logging.INFO
if ctx.verbose:
loglevel = logging.DEBUG
elif ctx.lock:
for machine in machines:
- if not lock(ctx, machine, user):
+ if not lock_one(ctx, machine, user):
ret = 1
if not ctx.f:
return ret
create_if_vm(ctx, machine)
elif ctx.unlock:
for machine in machines:
- if not unlock(ctx, machine, user):
+ if not unlock_one(ctx, machine, user):
ret = 1
if not ctx.f:
return ret
if len(result) < ctx.num_to_lock:
log.error("Locking failed.")
for machn in result:
- unlock(ctx, machn)
+ unlock_one(ctx, machn)
ret = 1
else:
log.info("Successfully Locked:\n%s\n" % shortnames)