X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plugins%2Fsyndicate.py;h=4a9d4de592a5e0bbea3840156cf217c69265f7de;hb=48a73b18fd7daed13c645c1adeddb57b560e7a2d;hp=a4c9a45f97a6820c16237ba83375df41f832c840;hpb=4885d1e14fa561693476761056dcb1ae9c30be7d;p=nodemanager.git diff --git a/plugins/syndicate.py b/plugins/syndicate.py index a4c9a45..4a9d4de 100644 --- a/plugins/syndicate.py +++ b/plugins/syndicate.py @@ -2,21 +2,39 @@ """ Syndicate configurator. """ +import http.client import os import shutil +import tools +from threading import Thread import logger import tools - def start(): logger.log('syndicate plugin starting up...') -def syndicate_op(op, mountpoint): - # here is where the magic happens - pass +def syndicate_op(op, mountpoint, syndicate_ip): + #op="GET" + #syndicate_ip="www.vicci.org" + + logger.log("Syndicate: Http op %s on url %s to host %s" % (op, mountpoint, syndicate_ip)) + + try: + conn = http.client.HTTPSConnection(syndicate_ip, timeout=60) + conn.request(op, mountpoint) + r1 = conn.getresponse() + except: + logger.log_exc("Exception when contacting syndicate sliver", "Syndicate") + + if (r1.status / 100) != 2: + logger.log("Syndicate: Error: Got http result %d on %s" % (r1.status, mountpoint)) + return False + + return result + -def enable_syndicate_mount(sliver, mountpoint): +def enable_syndicate_mount(sliver, mountpoint, syndicate_ip): if not os.path.exists(mountpoint): try: os.mkdir(mountpoint) @@ -24,10 +42,10 @@ def enable_syndicate_mount(sliver, mountpoint): logger.log_exc("failed to mkdir syndicate mountpoint", "Syndicate") return - syndicate_op("PUT", mountpoint) + syndicate_op("PUT", mountpoint, syndicate_ip) -def dsiable_syndicate_mount(sliver, mountpoint): - syndicate_op("DELETE", mountpoint) +def disable_syndicate_mount(sliver, mountpoint, syndicate_ip): + syndicate_op("DELETE", mountpoint, syndicate_ip) if os.path.exists(mountpoint): try: @@ -39,7 +57,21 @@ def GetSlivers(data, conf = None, plc = None): node_id = tools.node_id() if 'slivers' not in data: - logger.log_missing_data("syndicate.GetSlivers",'slivers') + logger.log_missing_data("syndicate.GetSlivers", 'slivers') + return + + syndicate_sliver = None + for sliver in data['slivers']: + if sliver['name'] == "princeton_syndicate": + syndicate_sliver = sliver + + if not syndicate_sliver: + logger.log("Syndicate: no princeton_syndicate sliver on this node. aborting.") + return + + syndicate_ip = tools.get_sliver_ip("princeton_syndicate") + if not syndicate_ip: + logger.log("Syndicate: unable to get syndicate sliver ip. aborting.") return for sliver in data['slivers']: @@ -57,9 +89,13 @@ def GetSlivers(data, conf = None, plc = None): if enable_syndicate and (not has_syndicate): logger.log("Syndicate: enabling syndicate for %s" % sliver_name) - enable_syndicate_mount(sliver, syndicate_mountpoint) + #enable_syndicate_mount(sliver, syndicate_mountpoint, syndicate_ip) + t = Thread(target=enable_syndicate_mount, args=(sliver, syndicate_mountpoint, syndicate_ip)) + t.start() elif (not enable_syndicate) and (has_syndicate): logger.log("Syndicate: disabling syndicate for %s" % sliver_name) - disable_syndicate_mount(sliver, syndicate_mountpoint) + #disable_syndicate_mount(sliver, syndicate_mountpoint, syndicate_ip) + t = Thread(target=disable_syndicate_mount, args=(sliver, syndicate_mountpoint, syndicate_ip)) + t.start()