summaryrefslogtreecommitdiffstats
path: root/src/com.gluster.storage.management.gateway.scripts/src/backend
diff options
context:
space:
mode:
authorShireesh Anjal <anjalshireesh@gmail.com>2011-08-23 00:38:37 -0700
committerShireesh Anjal <anjalshireesh@gmail.com>2011-08-23 00:38:37 -0700
commita6d45221ce12e3b1d30c00a2977df3e3e51cdc4e (patch)
treed5b9f31b41d60a72df7771fc5a594f7dccc6374f /src/com.gluster.storage.management.gateway.scripts/src/backend
parentb4a139bcccdabd195b4c7f68b88fdfce8eb01a59 (diff)
parent19799d3c3bb7f3346764b8f9426274a2b8537b58 (diff)
Merge pull request #269 from balamurugana/master
Added symlink of gmg-reset-password.sh in /usr/sbin. Added gluster CIFS volume statup script.
Diffstat (limited to 'src/com.gluster.storage.management.gateway.scripts/src/backend')
-rwxr-xr-xsrc/com.gluster.storage.management.gateway.scripts/src/backend/gluster-volume-settings.init.d20
-rw-r--r--src/com.gluster.storage.management.gateway.scripts/src/backend/gluster_cifs_volume_startup.py122
2 files changed, 142 insertions, 0 deletions
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/backend/gluster-volume-settings.init.d b/src/com.gluster.storage.management.gateway.scripts/src/backend/gluster-volume-settings.init.d
new file mode 100755
index 00000000..97bc01ee
--- /dev/null
+++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/gluster-volume-settings.init.d
@@ -0,0 +1,20 @@
+#!/bin/bash
+#
+# chkconfig: - 90 10
+### BEGIN INIT INFO
+# Required-Start: $network syslog glusterd
+# Default-Start: 3 5
+# Description: Setup/cleanup CIFS settings of Gluster volumes
+### END INIT INFO
+
+case "$1" in
+ start)
+ modprobe -q fuse
+ sleep 3
+ if ! lsmod | grep -qw fuse; then
+ echo "FATAL: fuse kernel module is not found. Gluster CIFS volume access will not work" >&2
+ exit 1
+ fi
+ /usr/sbin/gluster_cifs_volume_startup
+ ;;
+esac
diff --git a/src/com.gluster.storage.management.gateway.scripts/src/backend/gluster_cifs_volume_startup.py b/src/com.gluster.storage.management.gateway.scripts/src/backend/gluster_cifs_volume_startup.py
new file mode 100644
index 00000000..cc4c394d
--- /dev/null
+++ b/src/com.gluster.storage.management.gateway.scripts/src/backend/gluster_cifs_volume_startup.py
@@ -0,0 +1,122 @@
+#!/usr/bin/python
+# Copyright (C) 2011 Gluster, Inc. <http://www.gluster.com>
+# This file is part of Gluster Management Gateway.
+#
+
+import os
+import sys
+import glob
+p1 = os.path.abspath(os.path.dirname(sys.argv[0]))
+p2 = "%s/common" % os.path.dirname(p1)
+if not p1 in sys.path:
+ sys.path.append(p1)
+if not p2 in sys.path:
+ sys.path.append(p2)
+import Globals
+import Utils
+import VolumeUtils
+
+def getGlusterVolumeInfo(volumeName=None):
+ volumeNameList = None
+ if Utils.isString(volumeName):
+ volumeNameList = [volumeName]
+ if type(volumeName) == type([]):
+ volumeNameList = volumeName
+
+ status = Utils.runCommand("gluster volume info", output=True, root=True)
+ if status["Status"] != 0:
+ Utils.log("Failed to execute 'gluster volume info' command")
+ return None
+
+ volumeInfoDict = {}
+ volumeInfo = {}
+ volumeName = None
+ brickList = []
+ for line in status['Stdout'].split("\n"):
+ if not line:
+ if volumeName and volumeInfo:
+ volumeInfo["Bricks"] = brickList
+ volumeInfoDict[volumeName] = volumeInfo
+ volumeInfo = {}
+ volumeName = None
+ brickList = []
+ continue
+
+ tokens = line.split(":")
+ if tokens[0].strip().upper() == "BRICKS":
+ continue
+ elif tokens[0].strip().upper() == "VOLUME NAME":
+ volumeName = tokens[1].strip()
+ volumeInfo["VolumeName"] = volumeName
+ elif tokens[0].strip().upper() == "TYPE":
+ volumeInfo["VolumeType"] = tokens[1].strip()
+ elif tokens[0].strip().upper() == "STATUS":
+ volumeInfo["VolumeStatus"] = tokens[1].strip()
+ elif tokens[0].strip().upper() == "TRANSPORT-TYPE":
+ volumeInfo["TransportType"] = tokens[1].strip()
+ elif tokens[0].strip().upper().startswith("BRICK"):
+ brickList.append(":".join(tokens[1:]).strip())
+
+ if volumeName and volumeInfo:
+ volumeInfoDict[volumeName] = volumeInfo
+
+ if not volumeNameList:
+ return volumeInfoDict
+
+ # remove unwanted volume info
+ for volumeName in list(set(volumeInfoDict.keys()) - set(volumeNameList)):
+ del volumeInfoDict[volumeName]
+
+ return volumeInfoDict
+
+
+def main():
+ volumeInfo = getGlusterVolumeInfo()
+ if not volumeInfo:
+ print "No volume present. Removing CIFS volume configuration if any"
+ Utils.runCommand("rm -fr %s/*" % Globals.VOLUME_CONF_DIR, root=True, shell=True)
+ Utils.runCommand("rm -fr %s/*" % Globals.REEXPORT_DIR, root=True, shell=True)
+ Utils.runCommand("rm -fr %s/*" % Globals.CIFS_EXPORT_DIR, root=True, shell=True)
+ sys.exit(0)
+
+ try:
+ fp = open(Globals.VOLUME_SMBCONF_FILE)
+ lines = fp.readlines()
+ fp.close()
+ except IOError, e:
+ Utils.log("Failed to samba volume configuration file %s: %s" % (Globals.VOLUME_SMBCONF_FILE, str(e)))
+ sys.stderr.write("Failed to samba volume configuration file %s: %s\n" % (Globals.VOLUME_SMBCONF_FILE, str(e)))
+ sys.exit(1)
+
+ volumeSmbConfList = [line.strip() for line in lines]
+ for volumeName in volumeInfo.keys():
+ if not "include = %s/%s.smbconf" % (Globals.VOLUME_CONF_DIR, volumeName) in volumeSmbConfList:
+ continue
+ if 'STOPPED' == volumeInfo[volumeName]['VolumeStatus'].upper():
+ Utils.runCommand("rmdir %s/%s" % (Globals.CIFS_EXPORT_DIR, volumeName), root=True)
+ if not VolumeUtils.excludeVolume(volumeName):
+ Utils.log("Failed to exclude %s volume for CIFS reexport" % volumeName)
+ continue
+ if 'STARTED' == volumeInfo[volumeName]['VolumeStatus'].upper():
+ volumeMountDirName = "%s/%s" % (Globals.REEXPORT_DIR, volumeName)
+ if Utils.runCommand("mount -t glusterfs 127.0.0.1:%s %s" % (volumeName, volumeMountDirName)) != 0:
+ Utils.log("Failed to mount volume %s" % (volumeName))
+
+ smbConfFileList = glob.glob("%s/*.smbconf" % Globals.VOLUME_CONF_DIR)
+ volumeList = [smbConfFileName.split(".smbconf")[0].split("/")[-1] for smbConfFileName in smbConfFileList]
+ danglingVolumeList = list(set(volumeList).difference(set(volumeInfo.keys())))
+ if not danglingVolumeList:
+ sys.exit(0)
+
+ print "Cleaning up dangling volume(s):", danglingVolumeList
+ for volumeName in danglingVolumeList:
+ Utils.runCommand("rmdir %s/%s" % (Globals.REEXPORT_DIR, volumeName), root=True)
+ Utils.runCommand("rm -f %s/%s" % (Globals.CIFS_EXPORT_DIR, volumeName), root=True)
+ if not VolumeUtils.excludeVolume(volumeName):
+ Utils.log("Failed to exclude volume %s for CIFS reexport" % volumeName)
+ Utils.runCommand("rm -f %s/%s.smbconf" % (Globals.VOLUME_CONF_DIR, volumeName), root=True)
+
+ sys.exit(0)
+
+if __name__ == "__main__":
+ main()