59 lines
2.0 KiB
Python
59 lines
2.0 KiB
Python
|
import subprocess, os
|
||
|
|
||
|
def http_client_post(ip, port, url, entries = {}):
|
||
|
import urllib.request, urllib.parse, json
|
||
|
url = url if not url.startswith('/') else url[1:]
|
||
|
response = urllib.request.urlopen('http://%s:%d/%s' % (ip, port, url), urllib.parse.urlencode(entries).encode())
|
||
|
obj = json.loads(response.read().decode().strip())
|
||
|
response.close()
|
||
|
return obj
|
||
|
|
||
|
class case_handler:
|
||
|
# [Order-by] lexicographic order
|
||
|
|
||
|
# curl -L -X POST http://0.0.0.0:1728/v1/minions/list
|
||
|
def minions_list(form, args):
|
||
|
minions = []
|
||
|
for item in args.conn:
|
||
|
minions.append(args.conn[item][1])
|
||
|
return {"minions": minions}
|
||
|
|
||
|
# curl -L -X POST -F mem=4096 -F cpu=2 http://0.0.0.0:1728/v1/resource/allocation
|
||
|
def resource_allocation(form, args):
|
||
|
mem = int(form['mem'])
|
||
|
cpu = int(form['cpu'])
|
||
|
candidates = {}
|
||
|
from daemon.http import minion_http_handler
|
||
|
for item in args.conn:
|
||
|
addr = args.conn[item][1]
|
||
|
obj = http_client_post(addr, minion_http_handler.http_port, '/v1/system/memsw/available')
|
||
|
if obj['success'] and obj['data']['Mbytes'] >= mem:
|
||
|
candidates[addr] = obj['data']
|
||
|
|
||
|
if len(candidates) <= 0:
|
||
|
raise Exception("no minions")
|
||
|
else:
|
||
|
from policy.allocate import candidates_selector
|
||
|
one = candidates_selector.select(candidates)
|
||
|
return {"recommend": one}
|
||
|
|
||
|
# curl -L -X POST -F user=docklet http://0.0.0.0:1728/v1/user/live/add
|
||
|
def user_live_add(form, args):
|
||
|
if not os.path.exists('/var/lib/docklet/global/users/%s' % form['user']):
|
||
|
return False
|
||
|
subprocess.getoutput('echo live > /var/lib/docklet/global/users/%s/status' % form['user'])
|
||
|
return True
|
||
|
|
||
|
# curl -L -X POST -F user=docklet http://0.0.0.0:1728/v1/user/live/remove
|
||
|
def user_live_remove(form, args):
|
||
|
subprocess.getoutput('rm -f /var/lib/docklet/global/users/%s/status' % form['user'])
|
||
|
return True
|
||
|
|
||
|
# curl -L -X POST http://0.0.0.0:1728/v1/user/live/list
|
||
|
def user_live_list(form, args):
|
||
|
return subprocess.getoutput('ls -1 /var/lib/docklet/global/users/*/status 2>/dev/null | awk -F\/ \'{print $(NF-1)\'}').split()
|
||
|
|
||
|
|
||
|
|
||
|
|