get syndicate sliver ip by using ifconfig in sliver context
[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     syndicate_ip = tools.get_syndicate_ip("princeton_syndicate")
60     if not syndicate_ip:
61         logger.log("Syndicate: unable to get syndicate sliver ip. aborting.")
62
63     if 'slivers' not in data:
64         logger.log_missing_data("syndicate.GetSlivers",'slivers')
65         return
66
67     for sliver in data['slivers']:
68         enable_syndicate = False
69
70         # build a dict of attributes, because it's more convenient
71         attributes={}
72         for attribute in sliver['attributes']:
73            attributes[attribute['tagname']] = attribute['value']
74
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)
79
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))
84             t.start()
85
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))
90             t.start()
91