spaces after comma
[nodemanager.git] / plugins / syndicate.py
1 #!/usr/bin/python
2
3 """ Syndicate configurator.  """
4
5 import httplib
6 import os
7 import shutil
8 import tools
9
10 from threading import Thread
11 import logger
12 import tools
13
14 def start():
15     logger.log('syndicate plugin starting up...')
16
17 def syndicate_op(op, mountpoint, syndicate_ip):
18     #op="GET"
19     #syndicate_ip="www.vicci.org"
20
21     logger.log("Syndicate: Http op %s on url %s to host %s" % (op, mountpoint, syndicate_ip))
22
23     try:
24         conn = httplib.HTTPSConnection(syndicate_ip, timeout=60)
25         conn.request(op, mountpoint)
26         r1 = conn.getresponse()
27     except:
28         logger.log_exc("Exception when contacting syndicate sliver", "Syndicate")
29
30     if (r1.status / 100) != 2:
31        logger.log("Syndicate: Error: Got http result %d on %s" % (r1.status, mountpoint))
32        return False
33
34     return result
35
36
37 def enable_syndicate_mount(sliver, mountpoint, syndicate_ip):
38     if not os.path.exists(mountpoint):
39        try:
40            os.mkdir(mountpoint)
41        except:
42            logger.log_exc("failed to mkdir syndicate mountpoint", "Syndicate")
43            return
44
45     syndicate_op("PUT", mountpoint, syndicate_ip)
46
47 def disable_syndicate_mount(sliver, mountpoint, syndicate_ip):
48     syndicate_op("DELETE", mountpoint, syndicate_ip)
49
50     if os.path.exists(mountpoint):
51        try:
52            os.rmdir(mountpoint)
53        except:
54            logger.log_exc("failed to delete syndicate mountpoint", "Syndicate")
55
56 def GetSlivers(data, conf = None, plc = None):
57     node_id = tools.node_id()
58
59     if 'slivers' not in data:
60         logger.log_missing_data("syndicate.GetSlivers", 'slivers')
61         return
62
63     syndicate_sliver = None
64     for sliver in data['slivers']:
65         if sliver['name'] == "princeton_syndicate":
66             syndicate_sliver = sliver
67
68     if not syndicate_sliver:
69         logger.log("Syndicate: no princeton_syndicate sliver on this node. aborting.")
70         return
71
72     syndicate_ip = tools.get_sliver_ip("princeton_syndicate")
73     if not syndicate_ip:
74         logger.log("Syndicate: unable to get syndicate sliver ip. aborting.")
75         return
76
77     for sliver in data['slivers']:
78         enable_syndicate = False
79
80         # build a dict of attributes, because it's more convenient
81         attributes={}
82         for attribute in sliver['attributes']:
83            attributes[attribute['tagname']] = attribute['value']
84
85         sliver_name = sliver['name']
86         syndicate_mountpoint = os.path.join("/vservers", sliver_name, "syndicate")
87         enable_syndicate = attributes.get("enable_syndicate", False)
88         has_syndicate = os.path.exists(syndicate_mountpoint)
89
90         if enable_syndicate and (not has_syndicate):
91             logger.log("Syndicate: enabling syndicate for %s" % sliver_name)
92             #enable_syndicate_mount(sliver, syndicate_mountpoint, syndicate_ip)
93             t = Thread(target=enable_syndicate_mount, args=(sliver, syndicate_mountpoint, syndicate_ip))
94             t.start()
95
96         elif (not enable_syndicate) and (has_syndicate):
97             logger.log("Syndicate: disabling syndicate for %s" % sliver_name)
98             #disable_syndicate_mount(sliver, syndicate_mountpoint, syndicate_ip)
99             t = Thread(target=disable_syndicate_mount, args=(sliver, syndicate_mountpoint, syndicate_ip))
100             t.start()
101