Add RPC calls to mount Gluster storage directory.

Signed-off-by: Weiwei Jia <[email protected]>
---
 lib/backend.py      |   31 +++++++++++++++++++++++++++++++
 lib/rpc_defs.py     |    5 +++++
 lib/server/noded.py |   12 ++++++++++++
 3 files changed, 48 insertions(+)

diff --git a/lib/backend.py b/lib/backend.py
index 7063aa5..c61a1e8 100644
--- a/lib/backend.py
+++ b/lib/backend.py
@@ -3230,6 +3230,37 @@ def CreateFileStorageDir(file_storage_dir):
             file_storage_dir, err, exc=True)
 
 
+def MountGlusterStorageDir(gluster_hostname,
+                           gluster_volname,
+                           gluster_storage_dir):
+  """Mount gluster storage directory.
+
+  @type gluster_hostname: str
+  @param gluster_hostname: hostname of gluster server
+  @type gluster_volname: str
+  @param gluster_volname: volume name of gluster server
+  @type gluster_storage_dir: str
+  @param gluster_storage_dir: directory to mount
+
+  @rtype: tuple
+  @return: tuple with first element a boolean indicating whether dir
+      mount was successful or not
+
+  """
+  gluster_storage_dir = _TransformFileStorageDir(gluster_storage_dir)
+  if os.path.exists(gluster_storage_dir):
+    if not os.path.isdir(gluster_storage_dir):
+      _Fail("Specified gluster storage dir '%s' is not a directory",
+            gluster_storage_dir)
+  else:
+    result = utils.RunCmd(["mount", "-t", "glusterfs",
+                   "%s:/%s" % (gluster_hostname, gluster_volname),
+                   gluster_storage_dir])
+    if result.failed:
+      raise errors.OpPrereqError("Could not mount glusterfs, error %s" %
+                   result.output)
+
+
 def RemoveFileStorageDir(file_storage_dir):
   """Remove file storage directory.
 
diff --git a/lib/rpc_defs.py b/lib/rpc_defs.py
index ffb5ceb..83416c9 100644
--- a/lib/rpc_defs.py
+++ b/lib/rpc_defs.py
@@ -190,6 +190,11 @@ _FILE_STORAGE_CALLS = [
   ("file_storage_dir_create", SINGLE, None, constants.RPC_TMO_FAST, [
     ("file_storage_dir", None, "File storage directory"),
     ], None, None, "Create the given file storage directory"),
+  ("mount_gluster_storage_dir", SINGLE, None, constants.RPC_TMO_FAST, [
+    ("gluster_hostname", None, "gluster host name"),
+    ("gluster_volname", None, "gluster volume name"),
+    ("gluster_storage_dir", None, "gluster storage directory"),
+    ], None, None, "Mount the given gluster storage directory"),
   ("file_storage_dir_remove", SINGLE, None, constants.RPC_TMO_FAST, [
     ("file_storage_dir", None, "File storage directory"),
     ], None, None, "Remove the given file storage directory"),
diff --git a/lib/server/noded.py b/lib/server/noded.py
index ecc7c95..75229d7 100644
--- a/lib/server/noded.py
+++ b/lib/server/noded.py
@@ -982,6 +982,18 @@ class NodeRequestHandler(http.server.HttpServerHandler):
     return backend.CreateFileStorageDir(file_storage_dir)
 
   @staticmethod
+  def perspective_mount_gluster_storage_dir(params):
+    """Mount the gluster storage directory.
+
+    """
+    gluster_hostname = params[0]
+    gluster_volname = params[1]
+    gluster_storage_dir = params[2]
+    return backend.MountGlusterStorageDir(gluster_hostname,
+                                          gluster_volname,
+                                          gluster_storage_dir)
+
+  @staticmethod
   def perspective_file_storage_dir_remove(params):
     """Remove the file storage directory.
 
-- 
1.7.10.4

Reply via email to