3 """ Syndicate configurator. """
9 from threading import Thread
14 logger.log('syndicate plugin starting up...')
16 def syndicate_op(op, mountpoint, syndicate_ip):
18 #syndicate_ip="www.vicci.org"
20 logger.log("Syndicate: Http op %s on url %s to host %s" % (op, mountpoint, syndicate_ip))
23 conn = httplib.HTTPSConnection(syndicate_ip, timeout=60)
24 conn.request(op, mountpoint)
25 r1 = conn.getresponse()
27 logger.log_exc("Exception when contacting syndicate sliver", "Syndicate")
29 if (r1.status / 100) != 2:
30 logger.log("Syndicate: Error: Got http result %d on %s" % (r1.status, mountpoint))
36 def enable_syndicate_mount(sliver, mountpoint, syndicate_ip):
37 if not os.path.exists(mountpoint):
41 logger.log_exc("failed to mkdir syndicate mountpoint", "Syndicate")
44 syndicate_op("PUT", mountpoint, syndicate_ip)
46 def disable_syndicate_mount(sliver, mountpoint, syndicate_ip):
47 syndicate_op("DELETE", mountpoint, syndicate_ip)
49 if os.path.exists(mountpoint):
53 logger.log_exc("failed to delete syndicate mountpoint", "Syndicate")
55 def get_syndicate_ip():
56 fn = "/vservers/princeton_syndicate/var/lib/dhclient/dhclient-eth0.leases"
57 if not os.path.exists(fn):
58 logger.log("Syndicate: cannot find princeton_syndicate's dhclient lease db")
62 for line in open(fn).readlines():
64 if line.startswith("fixed-address"):
68 logger.log("Syndicate: no fixed_address line in dhclient lease db")
71 parts=fixed_address.split(" ")
73 logger.log("Syndicate: malformed fixed-address line in dhclient: %s" % line)
76 ip = parts[1].strip(";")
78 #logger.log("Syndicate ip is %s" % ip)
82 def GetSlivers(data, conf = None, plc = None):
83 node_id = tools.node_id()
85 if 'slivers' not in data:
86 logger.log_missing_data("syndicate.GetSlivers",'slivers')
89 for sliver in data['slivers']:
90 enable_syndicate = False
92 # build a dict of attributes, because it's more convenient
94 for attribute in sliver['attributes']:
95 attributes[attribute['tagname']] = attribute['value']
97 sliver_name = sliver['name']
98 syndicate_mountpoint = os.path.join("/vservers", sliver_name, "syndicate")
99 enable_syndicate = attributes.get("enable_syndicate", False)
100 has_syndicate = os.path.exists(syndicate_mountpoint)
102 if enable_syndicate and (not has_syndicate):
103 logger.log("Syndicate: enabling syndicate for %s" % sliver_name)
104 #enable_syndicate_mount(sliver, syndicate_mountpoint, get_syndicate_ip())
105 t = Thread(target=enable_syndicate_mount, args=(sliver, syndicate_mountpoint, get_syndicate_ip()))
108 elif (not enable_syndicate) and (has_syndicate):
109 logger.log("Syndicate: disabling syndicate for %s" % sliver_name)
110 #disable_syndicate_mount(sliver, syndicate_mountpoint, get_syndicate_ip())
111 t = Thread(target=disable_syndicate_mount, args=(sliver, syndicate_mountpoint, get_syndicate_ip()))