Merge pull request #10 from ceph/wip-fix-importcycle

lock: Fix import cycle breakage

Reviewed-by: Warren Usui <warren.usui@inktank.com>
This commit is contained in:
Sam Lang 2013-04-12 13:06:55 -07:00
commit 35e6db72a1
4 changed files with 39 additions and 32 deletions

View File

@ -1,5 +1,4 @@
import argparse
import httplib2
import json
import logging
import subprocess
@ -7,29 +6,17 @@ import urllib
import yaml
import re
import collections
import os
import tempfile
from teuthology import lockstatus as ls
from teuthology import misc as teuthology
log = logging.getLogger(__name__)
def _lock_url(ctx):
return ctx.teuthology_config['lock_server']
def send_request(method, url, body=None, headers=None):
http = httplib2.Http()
resp, content = http.request(url, method=method, body=body, headers=headers)
if resp.status == 200:
return (True, content, resp.status)
log.info("%s request to '%s' with body '%s' failed with response code %d",
method, url, body, resp.status)
return (False, None, resp.status)
def lock_many(ctx, num, machinetype, user=None, description=None):
if user is None:
user = teuthology.get_user()
success, content, status = send_request('POST', _lock_url(ctx),
success, content, status = ls.send_request('POST', ls._lock_url(ctx),
urllib.urlencode(dict(
user=user,
num=num,
@ -49,7 +36,7 @@ def lock_many(ctx, num, machinetype, user=None, description=None):
def lock(ctx, name, user=None):
if user is None:
user = teuthology.get_user()
success, _, _ = send_request('POST', _lock_url(ctx) + '/' + name,
success, _, _ = ls.send_request('POST', ls._lock_url(ctx) + '/' + name,
urllib.urlencode(dict(user=user)))
if success:
log.debug('locked %s as %s', name, user)
@ -60,7 +47,7 @@ def lock(ctx, name, user=None):
def unlock(ctx, name, user=None):
if user is None:
user = teuthology.get_user()
success, _ , _ = send_request('DELETE', _lock_url(ctx) + '/' + name + '?' + \
success, _ , _ = ls.send_request('DELETE', ls._lock_url(ctx) + '/' + name + '?' + \
urllib.urlencode(dict(user=user)))
if success:
log.debug('unlocked %s', name)
@ -68,14 +55,8 @@ def unlock(ctx, name, user=None):
log.error('failed to unlock %s', name)
return success
def get_status(ctx, name):
success, content, _ = send_request('GET', _lock_url(ctx) + '/' + name)
if success:
return json.loads(content)
return None
def list_locks(ctx):
success, content, _ = send_request('GET', _lock_url(ctx))
success, content, _ = ls.send_request('GET', ls._lock_url(ctx))
if success:
return json.loads(content)
return None
@ -90,7 +71,7 @@ def update_lock(ctx, name, description=None, status=None, sshpubkey=None):
updated['sshpubkey'] = sshpubkey
if updated:
success, _, _ = send_request('PUT', _lock_url(ctx) + '/' + name,
success, _, _ = ls.send_request('PUT', ls._lock_url(ctx) + '/' + name,
body=urllib.urlencode(updated),
headers={'Content-type': 'application/x-www-form-urlencoded'})
return success
@ -283,7 +264,7 @@ Lock, unlock, or query lock status of machines.
assert ctx.desc is None, '--desc does nothing with --list'
if machines:
statuses = [get_status(ctx, machine) for machine in machines]
statuses = [ls.get_status(ctx, machine) for machine in machines]
else:
statuses = list_locks(ctx)
vmachines = []
@ -295,7 +276,7 @@ Lock, unlock, or query lock status of machines.
if vmachines:
scan_for_locks(ctx, vmachines)
if machines:
statuses = [get_status(ctx, machine) for machine in machines]
statuses = [ls.get_status(ctx, machine) for machine in machines]
else:
statuses = list_locks(ctx)
if statuses:
@ -349,7 +330,7 @@ Lock, unlock, or query lock status of machines.
return ret
else:
machines_to_update.append(machine)
status_info = get_status(ctx,machine)
status_info = ls.get_status(ctx,machine)
if status_info['vpshost']:
do_create(ctx, machine, status_info['vpshost'])
elif ctx.unlock:
@ -360,7 +341,7 @@ Lock, unlock, or query lock status of machines.
return ret
else:
machines_to_update.append(machine)
status_info = get_status(ctx,machine)
status_info = ls.get_status(ctx,machine)
if status_info['vpshost']:
do_destroy(machine, status_info['vpshost'])
elif ctx.num_to_lock:

25
teuthology/lockstatus.py Normal file
View File

@ -0,0 +1,25 @@
import json
import httplib2
import logging
log = logging.getLogger(__name__)
def _lock_url(ctx):
return ctx.teuthology_config['lock_server']
def send_request(method, url, body=None, headers=None):
http = httplib2.Http()
resp, content = http.request(url, method=method, body=body, headers=headers)
if resp.status == 200:
return (True, content, resp.status)
log.info("%s request to '%s' with body '%s' failed with response code %d",
method, url, body, resp.status)
return (False, None, resp.status)
def get_status(ctx, name):
success, content, _ = send_request('GET', _lock_url(ctx) + '/' + name)
if success:
return json.loads(content)
return None

View File

@ -13,7 +13,7 @@ import yaml
import json
from teuthology import safepath
from teuthology import lock
from teuthology import lockstatus
from .orchestra import run
log = logging.getLogger(__name__)
@ -37,7 +37,7 @@ def get_testdir(ctx):
if not checked_jobid:
jobids = {}
for machine in ctx.config['targets'].iterkeys():
status = lock.get_status(ctx, machine)
status = lockstatus.get_status(ctx, machine)
jid = status['description'].split('/')[-1]
jobids[jid] = 1
if len(jobids) > 1:

View File

@ -8,6 +8,7 @@ import yaml
import re
import subprocess
from teuthology import lockstatus
from teuthology import lock
from teuthology import misc as teuthology
from teuthology.parallel import parallel
@ -124,7 +125,7 @@ def check_lock(ctx, config):
return
log.info('Checking locks...')
for machine in ctx.config['targets'].iterkeys():
status = lock.get_status(ctx, machine)
status = lockstatus.get_status(ctx, machine)
log.debug('machine status is %s', repr(status))
assert status is not None, \
'could not read lock status for {name}'.format(name=machine)