spaces after comma
[nodemanager.git] / plugins / syndicate.py
index a4c9a45..e8ddccd 100644 (file)
@@ -2,21 +2,39 @@
 
 """ Syndicate configurator.  """
 
+import httplib
 import os
 import shutil
+import tools
 
+from threading import Thread
 import logger
 import tools
 
-
 def start():
     logger.log('syndicate plugin starting up...')
 
-def syndicate_op(op, mountpoint):
-    # here is where the magic happens
-    pass
+def syndicate_op(op, mountpoint, syndicate_ip):
+    #op="GET"
+    #syndicate_ip="www.vicci.org"
+
+    logger.log("Syndicate: Http op %s on url %s to host %s" % (op, mountpoint, syndicate_ip))
+
+    try:
+        conn = httplib.HTTPSConnection(syndicate_ip, timeout=60)
+        conn.request(op, mountpoint)
+        r1 = conn.getresponse()
+    except:
+        logger.log_exc("Exception when contacting syndicate sliver", "Syndicate")
+
+    if (r1.status / 100) != 2:
+       logger.log("Syndicate: Error: Got http result %d on %s" % (r1.status, mountpoint))
+       return False
+
+    return result
+
 
-def enable_syndicate_mount(sliver, mountpoint):
+def enable_syndicate_mount(sliver, mountpoint, syndicate_ip):
     if not os.path.exists(mountpoint):
        try:
            os.mkdir(mountpoint)
@@ -24,10 +42,10 @@ def enable_syndicate_mount(sliver, mountpoint):
            logger.log_exc("failed to mkdir syndicate mountpoint", "Syndicate")
            return
 
-    syndicate_op("PUT", mountpoint)
+    syndicate_op("PUT", mountpoint, syndicate_ip)
 
-def dsiable_syndicate_mount(sliver, mountpoint):
-    syndicate_op("DELETE", mountpoint)
+def disable_syndicate_mount(sliver, mountpoint, syndicate_ip):
+    syndicate_op("DELETE", mountpoint, syndicate_ip)
 
     if os.path.exists(mountpoint):
        try:
@@ -39,7 +57,21 @@ def GetSlivers(data, conf = None, plc = None):
     node_id = tools.node_id()
 
     if 'slivers' not in data:
-        logger.log_missing_data("syndicate.GetSlivers",'slivers')
+        logger.log_missing_data("syndicate.GetSlivers", 'slivers')
+        return
+
+    syndicate_sliver = None
+    for sliver in data['slivers']:
+        if sliver['name'] == "princeton_syndicate":
+            syndicate_sliver = sliver
+
+    if not syndicate_sliver:
+        logger.log("Syndicate: no princeton_syndicate sliver on this node. aborting.")
+        return
+
+    syndicate_ip = tools.get_sliver_ip("princeton_syndicate")
+    if not syndicate_ip:
+        logger.log("Syndicate: unable to get syndicate sliver ip. aborting.")
         return
 
     for sliver in data['slivers']:
@@ -57,9 +89,13 @@ def GetSlivers(data, conf = None, plc = None):
 
         if enable_syndicate and (not has_syndicate):
             logger.log("Syndicate: enabling syndicate for %s" % sliver_name)
-            enable_syndicate_mount(sliver, syndicate_mountpoint)
+            #enable_syndicate_mount(sliver, syndicate_mountpoint, syndicate_ip)
+            t = Thread(target=enable_syndicate_mount, args=(sliver, syndicate_mountpoint, syndicate_ip))
+            t.start()
 
         elif (not enable_syndicate) and (has_syndicate):
             logger.log("Syndicate: disabling syndicate for %s" % sliver_name)
-            disable_syndicate_mount(sliver, syndicate_mountpoint)
+            #disable_syndicate_mount(sliver, syndicate_mountpoint, syndicate_ip)
+            t = Thread(target=disable_syndicate_mount, args=(sliver, syndicate_mountpoint, syndicate_ip))
+            t.start()