3 """ Syndicate configurator. """
10 from threading import Thread
15 logger.log('syndicate plugin starting up...')
17 def syndicate_op(op, mountpoint, syndicate_ip):
19 #syndicate_ip="www.vicci.org"
21 logger.log("Syndicate: Http op %s on url %s to host %s" % (op, mountpoint, syndicate_ip))
24 conn = httplib.HTTPSConnection(syndicate_ip, timeout=60)
25 conn.request(op, mountpoint)
26 r1 = conn.getresponse()
28 logger.log_exc("Exception when contacting syndicate sliver", "Syndicate")
30 if (r1.status / 100) != 2:
31 logger.log("Syndicate: Error: Got http result %d on %s" % (r1.status, mountpoint))
37 def enable_syndicate_mount(sliver, mountpoint, syndicate_ip):
38 if not os.path.exists(mountpoint):
42 logger.log_exc("failed to mkdir syndicate mountpoint", "Syndicate")
45 syndicate_op("PUT", mountpoint, syndicate_ip)
47 def disable_syndicate_mount(sliver, mountpoint, syndicate_ip):
48 syndicate_op("DELETE", mountpoint, syndicate_ip)
50 if os.path.exists(mountpoint):
54 logger.log_exc("failed to delete syndicate mountpoint", "Syndicate")
56 def GetSlivers(data, conf = None, plc = None):
57 node_id = tools.node_id()
59 syndicate_ip = tools.get_sliver_ip("princeton_syndicate")
61 logger.log("Syndicate: unable to get syndicate sliver ip. aborting.")
63 if 'slivers' not in data:
64 logger.log_missing_data("syndicate.GetSlivers",'slivers')
67 for sliver in data['slivers']:
68 enable_syndicate = False
70 # build a dict of attributes, because it's more convenient
72 for attribute in sliver['attributes']:
73 attributes[attribute['tagname']] = attribute['value']
75 sliver_name = sliver['name']
76 syndicate_mountpoint = os.path.join("/vservers", sliver_name, "syndicate")
77 enable_syndicate = attributes.get("enable_syndicate", False)
78 has_syndicate = os.path.exists(syndicate_mountpoint)
80 if enable_syndicate and (not has_syndicate):
81 logger.log("Syndicate: enabling syndicate for %s" % sliver_name)
82 #enable_syndicate_mount(sliver, syndicate_mountpoint, syndicate_ip)
83 t = Thread(target=enable_syndicate_mount, args=(sliver, syndicate_mountpoint, syndicate_ip))
86 elif (not enable_syndicate) and (has_syndicate):
87 logger.log("Syndicate: disabling syndicate for %s" % sliver_name)
88 #disable_syndicate_mount(sliver, syndicate_mountpoint, syndicate_ip)
89 t = Thread(target=disable_syndicate_mount, args=(sliver, syndicate_mountpoint, syndicate_ip))