* Explicitly run configure, which sets capabilities and resources, before starting...
authorFaiyaz Ahmed <faiyaza@cs.princeton.edu>
Tue, 9 Sep 2008 16:47:50 +0000 (16:47 +0000)
committerFaiyaz Ahmed <faiyaza@cs.princeton.edu>
Tue, 9 Sep 2008 16:47:50 +0000 (16:47 +0000)
* Print username when NM api returns permission denied.

accounts.py
api.py
api_calls.py

index 09c8eed..0dbf000 100644 (file)
@@ -114,16 +114,18 @@ class Worker:
             try: next_class.create(self.name, rec['vref'])
             finally: self._create_sem.release()
         if not isinstance(self._acct, next_class): self._acct = next_class(rec)
-        else: self._acct.configure(rec)
         if startingup or \
           not self.is_running() or \
           next_class != curr_class or \
           self._acct.initscriptchanged:
-            self._acct.start()
+            self.start(rec)
+        else: self._acct.configure(rec)
 
     def ensure_destroyed(self): self._destroy(self._get_class())
 
-    def start(self, d): self._acct.start(delay=d)
+    def start(self, rec, d = 0): 
+        self._acct.configure(rec)
+        self._acct.start(delay=d)
 
     def stop(self): self._acct.stop()
 
diff --git a/api.py b/api.py
index b099fb8..f8200fb 100644 (file)
--- a/api.py
+++ b/api.py
@@ -63,7 +63,7 @@ class APIRequestHandler(SimpleXMLRPCServer.SimpleXMLRPCRequestHandler):
                     raise xmlrpclib.Fault(102, \
                         '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.')
+                    raise xmlrpclib.Fault(108, '%s: Permission denied.' % caller_name)
                 try: result = method(target_rec, *args[1:])
                 except Exception, err: raise xmlrpclib.Fault(104, 'Error in call: %s' %err)
             else: result = method(*args)
index e99a559..cd97e13 100644 (file)
@@ -164,9 +164,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.')],