initial checkin of syndicate plugin
[nodemanager.git] / plugins / syndicate.py
1 #!/usr/bin/python
2
3 """ Syndicate configurator.  """
4
5 import os
6 import shutil
7
8 import logger
9 import tools
10
11
12 def start():
13     logger.log('syndicate plugin starting up...')
14
15 def syndicate_op(op, mountpoint):
16     # here is where the magic happens
17     pass
18
19 def enable_syndicate_mount(sliver, mountpoint):
20     if not os.path.exists(mountpoint):
21        try:
22            os.mkdir(mountpoint)
23        except:
24            logger.log_exc("failed to mkdir syndicate mountpoint", "Syndicate")
25            return
26
27     syndicate_op("PUT", mountpoint)
28
29 def dsiable_syndicate_mount(sliver, mountpoint):
30     syndicate_op("DELETE", mountpoint)
31
32     if os.path.exists(mountpoint):
33        try:
34            os.rmdir(mountpoint)
35        except:
36            logger.log_exc("failed to delete syndicate mountpoint", "Syndicate")
37
38 def GetSlivers(data, conf = None, plc = None):
39     node_id = tools.node_id()
40
41     if 'slivers' not in data:
42         logger.log_missing_data("syndicate.GetSlivers",'slivers')
43         return
44
45     for sliver in data['slivers']:
46         enable_syndicate = False
47
48         # build a dict of attributes, because it's more convenient
49         attributes={}
50         for attribute in sliver['attributes']:
51            attributes[attribute['tagname']] = attribute['value']
52
53         sliver_name = sliver['name']
54         syndicate_mountpoint = os.path.join("/vservers", sliver_name, "syndicate")
55         enable_syndicate = attributes.get("enable_syndicate", False)
56         has_syndicate = os.path.exists(syndicate_mountpoint)
57
58         if enable_syndicate and (not has_syndicate):
59             logger.log("Syndicate: enabling syndicate for %s" % sliver_name)
60             enable_syndicate_mount(sliver, syndicate_mountpoint)
61
62         elif (not enable_syndicate) and (has_syndicate):
63             logger.log("Syndicate: disabling syndicate for %s" % sliver_name)
64             disable_syndicate_mount(sliver, syndicate_mountpoint)
65