Added ReCreate. Also added try catch to api eval of rpc method.
authorFaiyaz Ahmed <faiyaza@cs.princeton.edu>
Wed, 21 Nov 2007 14:41:17 +0000 (14:41 +0000)
committerFaiyaz Ahmed <faiyaza@cs.princeton.edu>
Wed, 21 Nov 2007 14:41:17 +0000 (14:41 +0000)
api.py
api_calls.py

diff --git a/api.py b/api.py
index 0491dc2..34f4823 100644 (file)
--- a/api.py
+++ b/api.py
@@ -68,7 +68,8 @@ class APIRequestHandler(SimpleXMLRPCServer.SimpleXMLRPCRequestHandler):
                         'Invalid argument: the first argument must be a sliver name.')
                 if not caller_name in (target_name, target_rec['delegations']):
                     raise xmlrpclib.Fault(108, 'Permission denied.')
-                result = method(target_rec, *args[1:])
+                try: result = method(target_rec, *args[1:])
+                               except Exception, err: raise xmlrpclib.Fault(104, 'Error in call: %s' %err)
             else: result = method(*args)
             if result == None: result = 1
             return result
index fa13792..656bf1f 100644 (file)
@@ -176,6 +176,18 @@ def Stop(sliver_name):
     rec = sliver_name
     accounts.get(rec['name']).stop()
 
+@export_to_docbook(roles=['nm-controller', 'self'], 
+                                       accepts=[Parameter(str, 'A sliver/slice name.')], 
+                                  returns=Parameter(int, '1 if successful'))
+
+@export_to_api(1)
+def ReCreate(sliver_name):
+       """Stop, Destroy, Create, Start sliver in order to reinstall it."""
+       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.')], 
                                   returns=Parameter(dict, "A resource specification"))