ganeti-noded: quit on QuitGanetiException
[ganeti-local] / daemons / ganeti-noded
index 115c51b..5388660 100755 (executable)
@@ -77,6 +77,17 @@ class ServerObject(BaseHTTPServer.BaseHTTPRequestHandler):
       params = simplejson.loads(body)
       result = method(params)
       payload = simplejson.dumps(result)
+    except errors.QuitGanetiException, err:
+      global _EXIT_GANETI_NODED
+      _EXIT_GANETI_NODED = True
+      if isinstance(err, tuple) and len(err) == 2:
+        if err[0]:
+          self.send_error(500, "Error: %s" % str(err[1]))
+        else:
+          payload = simplejson.dumps(err[1])
+      else:
+        self.log_message('GanetiQuitException Usage Error')
+        self.send_error(500, "Error: %s" % str(err))
     except Exception, err:
       self.send_error(500, "Error: %s" % str(err))
       return False
@@ -220,6 +231,14 @@ class ServerObject(BaseHTTPServer.BaseHTTPRequestHandler):
     amount = params[1]
     return backend.GrowBlockDevice(cfbd, amount)
 
+  @staticmethod
+  def perspective_blockdev_close(params):
+    """Closes the given block devices.
+
+    """
+    disks = [objects.Disk.FromDict(cf) for cf in params]
+    return backend.CloseBlockDevices(disks)
+
   # export/import  --------------------------
 
   @staticmethod
@@ -611,8 +630,12 @@ def main():
 
   logger.SetupLogging(program="ganeti-noded", debug=options.debug)
 
+  global _EXIT_GANETI_NODED
+  _EXIT_GANETI_NODED = False
+
   httpd = BaseHTTPServer.HTTPServer(('', port), ServerObject)
-  httpd.serve_forever()
+  while (not _EXIT_GANETI_NODED):
+    httpd.handle_request()
 
 
 if __name__ == '__main__':