diff options
author | Shireesh Anjal <anjalshireesh@gmail.com> | 2011-08-23 00:38:37 -0700 |
---|---|---|
committer | Shireesh Anjal <anjalshireesh@gmail.com> | 2011-08-23 00:38:37 -0700 |
commit | a6d45221ce12e3b1d30c00a2977df3e3e51cdc4e (patch) | |
tree | d5b9f31b41d60a72df7771fc5a594f7dccc6374f /src/com.gluster.storage.management.gateway.scripts/src/backend | |
parent | b4a139bcccdabd195b4c7f68b88fdfce8eb01a59 (diff) | |
parent | 19799d3c3bb7f3346764b8f9426274a2b8537b58 (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')
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() |