Rough draft to support admin tickets from "blessed" interfaces.
[nodemanager.git] / api_calls.py
index 4abf67c..128a11f 100644 (file)
@@ -39,6 +39,7 @@ except: import logger as sliver_vs
 import ticket as ticket_module
 import tools
 
+deliver_ticket = None  # set in sm.py:start()
 
 api_method_dict = {}
 nargs_dict = {}
@@ -120,6 +121,24 @@ def Ticket(ticket):
     except Exception, err:
         raise xmlrpclib.Fault(102, 'Ticket error: ' + str(err))
 
+@export_to_docbook(roles=['self'], 
+                   accepts=[Parameter(str, 'A ticket returned from GetSlivers()')], 
+                   returns=Parameter(int, '1 if successful'))
+@export_to_api(1)
+def AdminTicket(ticket):
+    """Admin interface to create slivers based on ticket returned by GetSlivers().
+    """
+    try:
+        data, = xmlrpclib.loads(ticket)[0]
+        name = data['slivers'][0]['name']
+        if data != None:
+            deliver_ticket(data)
+        logger.log('Admin Ticket delivered for %s' % name)
+        Create(database.db.get(name))
+    except Exception, err:
+        raise xmlrpclib.Fault(102, 'Ticket error: ' + str(err))
+
+
 @export_to_docbook(roles=['self'],
                    accepts=[], 
                    returns={'sliver_name' : Parameter(int, 'the associated xid')})
@@ -163,9 +182,9 @@ def Destroy(sliver_name):
                    returns=Parameter(int, '1 if successful'))
 @export_to_api(1)
 def Start(sliver_name):
-    """Run start scripts belonging to the specified sliver"""
+    """Configure and start sliver."""
     rec = sliver_name
-    accounts.get(rec['name']).start()
+    accounts.get(rec['name']).start(rec)
 
 @export_to_docbook(roles=['nm-controller', 'self'], 
                     accepts=[Parameter(str, 'A sliver/slice name.')], 
@@ -186,7 +205,6 @@ def ReCreate(sliver_name):
     Stop(sliver_name)
     Destroy(sliver_name)
     Create(sliver_name)
-    Start(sliver_name)
 
 @export_to_docbook(roles=['nm-controller', 'self'], 
                     accepts=[Parameter(str, 'A sliver/slice name.')],