summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com.gluster.storage.management.server.scripts/src/Globals.py3
-rwxr-xr-xsrc/com.gluster.storage.management.server.scripts/src/NetworkUtils.py16
-rw-r--r--src/com.gluster.storage.management.server.scripts/src/VolumeUtils.py2
-rwxr-xr-xsrc/com.gluster.storage.management.server.scripts/src/add_user_cifs.py37
-rwxr-xr-xsrc/com.gluster.storage.management.server.scripts/src/add_user_cifs_all.py66
-rwxr-xr-xsrc/com.gluster.storage.management.server.scripts/src/create_volume_cifs.py33
-rwxr-xr-xsrc/com.gluster.storage.management.server.scripts/src/delete_user_cifs.py24
-rwxr-xr-xsrc/com.gluster.storage.management.server.scripts/src/delete_user_cifs_all.py53
-rwxr-xr-xsrc/com.gluster.storage.management.server.scripts/src/delete_volume_cifs.py32
-rwxr-xr-xsrc/com.gluster.storage.management.server.scripts/src/grun.py36
-rwxr-xr-xsrc/com.gluster.storage.management.server.scripts/src/modify_volume_cifs.py28
-rwxr-xr-xsrc/com.gluster.storage.management.server.scripts/src/rrd_net.pl23
-rwxr-xr-xsrc/com.gluster.storage.management.server.scripts/src/setup_cifs_config.py81
-rwxr-xr-xsrc/com.gluster.storage.management.server.scripts/src/start_volume_cifs.py41
-rwxr-xr-xsrc/com.gluster.storage.management.server.scripts/src/stop_volume_cifs.py38
15 files changed, 497 insertions, 16 deletions
diff --git a/src/com.gluster.storage.management.server.scripts/src/Globals.py b/src/com.gluster.storage.management.server.scripts/src/Globals.py
index 5c1c4bee..f8a07c25 100644
--- a/src/com.gluster.storage.management.server.scripts/src/Globals.py
+++ b/src/com.gluster.storage.management.server.scripts/src/Globals.py
@@ -55,7 +55,7 @@ VOLUME_USER_DESCRIPTION = "Gluster Volume User"
SERVER_AGENT_RUN_USERNAME = "gluster"
INSTALLER_SERVER_NAME = "$installer$"
-GLUSTER_BASE_DIR = "/GLUSTER"
+GLUSTER_BASE_DIR = "/etc/glustermg"
GLUSTER_LUN_DIR = "/data"
REEXPORT_DIR = "/reexport"
NFS_EXPORT_DIR = "/nfs"
@@ -120,3 +120,4 @@ VERSION_DICTONARY = {}
##
AWS_WEB_SERVICE_URL = "http://169.254.169.254/latest"
+REAL_SAMBA_CONF_FILE = "/etc/samba/real.smb.conf"
diff --git a/src/com.gluster.storage.management.server.scripts/src/NetworkUtils.py b/src/com.gluster.storage.management.server.scripts/src/NetworkUtils.py
index 4ac20f0b..42e9892c 100755
--- a/src/com.gluster.storage.management.server.scripts/src/NetworkUtils.py
+++ b/src/com.gluster.storage.management.server.scripts/src/NetworkUtils.py
@@ -186,10 +186,18 @@ def getNetDeviceDetail(deviceName):
tokens = line.strip().split(":")
if tokens[0].upper() == "ENCAP":
deviceDetail['Model'] = tokens[1].strip().upper()
- if tokens[0].upper() == "ADDR":
- deviceDetail['Ip'] = tokens[1].strip()
- if tokens[0].upper() == "MASK":
- deviceDetail['Mask'] = tokens[1].strip()
+ break
+
+ for line in rv["Stdout"].split("\n"):
+ if line.strip().startswith("inet addr:"):
+ tokens = line.strip().split(":")
+ if tokens[0].upper() == "INET ADDR":
+ try:
+ deviceDetail['Ip'] = tokens[1].strip().split()[0]
+ deviceDetail['Mask'] = tokens[-1].strip()
+ except IndexError:
+ pass
+ break
return deviceDetail
def getNetDeviceGateway(deviceName):
diff --git a/src/com.gluster.storage.management.server.scripts/src/VolumeUtils.py b/src/com.gluster.storage.management.server.scripts/src/VolumeUtils.py
index a19ccd62..b1031ccc 100644
--- a/src/com.gluster.storage.management.server.scripts/src/VolumeUtils.py
+++ b/src/com.gluster.storage.management.server.scripts/src/VolumeUtils.py
@@ -120,8 +120,10 @@ def removeVolumeCifsConfiguration(volumeName):
volumeFile = "%s/%s.smbconf" % (Globals.VOLUME_CONF_DIR, volumeName)
try:
os.remove(volumeFile)
+ return True
except OSError, e:
log("Failed to remove file %s: %s" % (volumeFile, str(e)))
+ return False
def getVolumeListByPartitionName(partitionName):
diff --git a/src/com.gluster.storage.management.server.scripts/src/add_user_cifs.py b/src/com.gluster.storage.management.server.scripts/src/add_user_cifs.py
new file mode 100755
index 00000000..7b9650d1
--- /dev/null
+++ b/src/com.gluster.storage.management.server.scripts/src/add_user_cifs.py
@@ -0,0 +1,37 @@
+#!/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 Globals
+import Utils
+
+def main():
+ if len(sys.argv) < 4:
+ sys.stderr.write("usage: %s UID USERNAME PASSWORD\n" % os.path.basename(sys.argv[0]))
+ sys.exit(-1)
+
+ uid = sys.argv[1]
+ userName = sys.argv[2]
+ password = sys.argv[3]
+
+ if Utils.runCommand("groupadd -g %s %s" % (uid, userName)) != 0:
+ Utils.log("failed to add group gid:%s, name:%s\n" % (uid, userName))
+ sys.exit(1)
+
+ command = ["useradd", "-c", Globals.VOLUME_USER_DESCRIPTION, "-M", "-d", "/", "-s", "/sbin/nologin", "-u", uid, "-g", uid, userName]
+ if Utils.runCommand(command) != 0:
+ Utils.log("failed to add user uid:%s, name:%s\n" % (uid, userName))
+ sys.exit(2)
+
+ if Utils.runCommand("smbpasswd -s -a %s" % userName,
+ input="%s\n%s\n" % (password, password)) != 0:
+ Utils.log("failed to set smbpassword of user uid:%s, name:%s\n" % (uid, userName))
+ sys.exit(3)
+ sys.exit(0)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/src/com.gluster.storage.management.server.scripts/src/add_user_cifs_all.py b/src/com.gluster.storage.management.server.scripts/src/add_user_cifs_all.py
new file mode 100755
index 00000000..e4b48658
--- /dev/null
+++ b/src/com.gluster.storage.management.server.scripts/src/add_user_cifs_all.py
@@ -0,0 +1,66 @@
+#!/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 Utils
+
+
+defaultUid = 1024000
+cifsUserFile = "/etc/glustermg/.users.cifs"
+
+
+def getLastUid():
+ if not os.path.exists(cifsUserFile):
+ return defaultUid
+ try:
+ fp = open(cifsUserFile)
+ content = fp.read()
+ fp.close()
+ except IOError, e:
+ Utils.log("failed to read file %s: %s" % (cifsUserFile, str(e)))
+ return False
+
+ lines = content.strip().split()
+ if not lines:
+ return defaultUid
+ return int(lines[-1].split(":")[0])
+
+
+def setUid(uid, userName):
+ try:
+ fp = open(cifsUserFile, "a")
+ fp.write("%s:%s\n" % (uid, userName))
+ fp.close()
+ return True
+ except IOError, e:
+ Utils.log("failed to write file %s: %s" % (cifsUserFile, str(e)))
+ return False
+
+
+def main():
+ if len(sys.argv) < 4:
+ sys.stderr.write("usage: %s SERVER_FILE USERNAME PASSWORD\n" % os.path.basename(sys.argv[0]))
+ sys.exit(-1)
+
+ serverFile = sys.argv[1]
+ userName = sys.argv[2]
+ password = sys.argv[3]
+
+ uid = getLastUid()
+ if not uid:
+ sys.exit(10)
+
+ uid += 1
+
+ rv = Utils.runCommand("grun.py %s add_user_cifs.py %s %s %s" % (serverFile, uid, userName, password))
+ if rv == 0:
+ if not setUid(uid, userName):
+ sys.exit(11)
+ sys.exit(rv)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/src/com.gluster.storage.management.server.scripts/src/create_volume_cifs.py b/src/com.gluster.storage.management.server.scripts/src/create_volume_cifs.py
new file mode 100755
index 00000000..a81b165b
--- /dev/null
+++ b/src/com.gluster.storage.management.server.scripts/src/create_volume_cifs.py
@@ -0,0 +1,33 @@
+#!/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 Globals
+import Utils
+import VolumeUtils
+
+def main():
+ if len(sys.argv) < 3:
+ sys.stderr.write("usage: %s VOLUME_NAME USER1 USER2 ...\n" % os.path.basename(sys.argv[0]))
+ sys.exit(-1)
+
+ volumeName = sys.argv[1]
+ userList = sys.argv[2:]
+
+ volumeMountDirName = "%s/%s" % (Globals.REEXPORT_DIR, volumeName)
+ try:
+ os.mkdir(volumeMountDirName)
+ except OSError, e:
+ Utils.log("failed creating %s: %s\n" % (volumeMountDirName, str(e)))
+ sys.exit(1)
+
+ if VolumeUtils.writeVolumeCifsConfiguration(volumeName, userList):
+ sys.exit(0)
+ sys.exit(2)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/src/com.gluster.storage.management.server.scripts/src/delete_user_cifs.py b/src/com.gluster.storage.management.server.scripts/src/delete_user_cifs.py
new file mode 100755
index 00000000..e5cda957
--- /dev/null
+++ b/src/com.gluster.storage.management.server.scripts/src/delete_user_cifs.py
@@ -0,0 +1,24 @@
+#!/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 Utils
+
+def main():
+ if len(sys.argv) < 2:
+ sys.stderr.write("usage: %s USERNAME\n" % os.path.basename(sys.argv[0]))
+ sys.exit(-1)
+
+ userName = sys.argv[1]
+
+ if Utils.runCommand("userdel %s" % userName) != 0:
+ Utils.log("failed to remove user name:%s\n" % userName)
+ sys.exit(1)
+ sys.exit(0)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/src/com.gluster.storage.management.server.scripts/src/delete_user_cifs_all.py b/src/com.gluster.storage.management.server.scripts/src/delete_user_cifs_all.py
new file mode 100755
index 00000000..38dd8109
--- /dev/null
+++ b/src/com.gluster.storage.management.server.scripts/src/delete_user_cifs_all.py
@@ -0,0 +1,53 @@
+#!/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 Utils
+
+
+cifsUserFile = "/etc/glustermg/.users.cifs"
+
+
+def removeUser(userName):
+ try:
+ fp = open(cifsUserFile)
+ content = fp.read()
+ fp.close()
+ except IOError, e:
+ Utils.log("failed to read file %s: %s" % (cifsUserFile, str(e)))
+ return False
+
+ try:
+ fp = open(cifsUserFile, "w")
+ lines = content.strip().split()
+ for line in lines:
+ if line.split(":")[1] == userName:
+ continue
+ fp.write("%s\n" % line)
+ fp.close()
+ except IOError, e:
+ Utils.log("failed to write file %s: %s" % (cifsUserFile, str(e)))
+ return False
+ return True
+
+
+def main():
+ if len(sys.argv) < 3:
+ sys.stderr.write("usage: %s SERVER_LIST USERNAME\n" % os.path.basename(sys.argv[0]))
+ sys.exit(-1)
+
+ serverList = sys.argv[1]
+ userName = sys.argv[2]
+
+ rv = Utils.runCommand("grun.py %s delete_user_cifs.py %s" % (serverList, userName))
+ if rv == 0:
+ if not removeUser(userName):
+ sys.exit(10)
+ sys.exit(rv)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/src/com.gluster.storage.management.server.scripts/src/delete_volume_cifs.py b/src/com.gluster.storage.management.server.scripts/src/delete_volume_cifs.py
new file mode 100755
index 00000000..fd1febc9
--- /dev/null
+++ b/src/com.gluster.storage.management.server.scripts/src/delete_volume_cifs.py
@@ -0,0 +1,32 @@
+#!/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 Globals
+import Utils
+import VolumeUtils
+
+def main():
+ if len(sys.argv) != 2:
+ sys.stderr.write("usage: %s VOLUME_NAME\n" % os.path.basename(sys.argv[0]))
+ sys.exit(-1)
+
+ volumeName = sys.argv[1]
+
+ volumeMountDirName = "%s/%s" % (Globals.REEXPORT_DIR, volumeName)
+ try:
+ os.rmdir(volumeMountDirName)
+ except OSError, e:
+ Utils.log("failed deleting %s: %s\n" % (volumeMountDirName, str(e)))
+ sys.exit(1)
+
+ if VolumeUtils.removeVolumeCifsConfiguration(volumeName):
+ sys.exit(0)
+ sys.exit(2)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/src/com.gluster.storage.management.server.scripts/src/grun.py b/src/com.gluster.storage.management.server.scripts/src/grun.py
new file mode 100755
index 00000000..ae93b7f2
--- /dev/null
+++ b/src/com.gluster.storage.management.server.scripts/src/grun.py
@@ -0,0 +1,36 @@
+#!/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 Utils
+
+
+def main():
+ sshCommandPrefix = "ssh -q -o BatchMode=yes -o GSSAPIAuthentication=no -o PasswordAuthentication=no -o StrictHostKeyChecking=no".split()
+
+ if len(sys.argv) < 3:
+ sys.stderr.write("usage: %s SERVER_FILE COMMAND [ARGUMENTS]\n" % os.path.basename(sys.argv[0]))
+ sys.exit(-1)
+ serverFile = sys.argv[1]
+ command = sys.argv[2:]
+
+ try:
+ fp = open(serverFile)
+ serverNameList = fp.readlines()
+ fp.close()
+ except IOError, e:
+ Utils.log("Failed to read server file %s: %s\n" % (serverFile, str(e)))
+ sys.exit(1)
+
+ for serverName in serverNameList:
+ rv = Utils.runCommand(sshCommandPrefix + [serverName.strip()] + command)
+ print rv
+
+ sys.exit(0)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/src/com.gluster.storage.management.server.scripts/src/modify_volume_cifs.py b/src/com.gluster.storage.management.server.scripts/src/modify_volume_cifs.py
new file mode 100755
index 00000000..f6bacfc4
--- /dev/null
+++ b/src/com.gluster.storage.management.server.scripts/src/modify_volume_cifs.py
@@ -0,0 +1,28 @@
+#!/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 Utils
+import VolumeUtils
+
+def main():
+ if len(sys.argv) <= 2:
+ sys.stderr.write("usage: %s VOLUME_NAME USER1 USER2 ...\n" % os.path.basename(sys.argv[0]))
+ sys.exit(-1)
+
+ volumeName = sys.argv[1]
+ userList = sys.argv[2:]
+
+ if not VolumeUtils.writeVolumeCifsConfiguration(volumeName, userList):
+ sys.exit(1)
+ if Utils.runCommand("service smb reload") != 0:
+ Utils.log("Failed to reload smb service")
+ sys.exit(2)
+ sys.exit(0)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/src/com.gluster.storage.management.server.scripts/src/rrd_net.pl b/src/com.gluster.storage.management.server.scripts/src/rrd_net.pl
index e151f557..03f4f492 100755
--- a/src/com.gluster.storage.management.server.scripts/src/rrd_net.pl
+++ b/src/com.gluster.storage.management.server.scripts/src/rrd_net.pl
@@ -6,6 +6,7 @@ my $rrdlog = '/var/lib/rrd';
my $graphs = '/var/lib/rrd';
updatenetdata();
+#updatenetgraph('hour');
#updatenetgraph('day');
#updatenetgraph('week');
#updatenetgraph('month');
@@ -17,7 +18,7 @@ sub updatenetgraph {
foreach $rrdfile (<$rrdlog/network-*.rrd>) {
RRDs::graph ("$graphs/network-$device-$period.png",
"--start", "-1$period", "-aPNG", "-i", "-z",
- "--alt-y-grid", "-w 300", "-h 50", "-l 0", "-u 100", "-r",
+ "--alt-y-grid", "-w 800", "-h 400", "-l 0", "-u 10000000", "-r",
"--color", "SHADEA#FFFFFF",
"--color", "SHADEB#FFFFFF",
"--color", "BACK#FFFFFF",
@@ -25,12 +26,9 @@ sub updatenetgraph {
"DEF:received=$rrdfile:received:AVERAGE",
"DEF:transmitted=$rrdfile:transmitted:AVERAGE",
- "CDEF:total=received,transmitted,+,+",
- "CDEF:receivedpct=100,received,total,/,*",
- "CDEF:transmittedpct=100,transmitted,total,/,*",
+ "LINE2:received#FF0000:received load\\j",
+ "LINE1:transmitted#0000FF:transmitted load\\j");
- "AREA:receivedpct#0000FF:received load\\j",
- "STACK:transmittedpct#FF0000:transmitted load\\j");
$ERROR = RRDs::error;
print "Error in RRD::graph for network $device: $ERROR\n" if $ERROR;
}
@@ -44,11 +42,14 @@ sub updatenetdata {
/:.+/ or next; # if input line contains ':' else continue
next if /^lo:\s/; # continue if input line starts with 'lo:'
- @tokens = split /\s+/;
- @name = split(/:/, $tokens[0]);
- $device = $name[0];
+ @tokens1 = split /:/;
+ @tokens2 = split(/\s+/, $tokens1[1]);
- #print "$device, $tokens[1], $tokens[9]\n";
+ $device = $tokens1[0];
+ $received = $tokens2[0];
+ $transmitted = $tokens2[8];
+
+ #print "$device, $received, $transmitted \n";
if ( ! -e "$rrdlog/network-$device.rrd") {
RRDs::create ("$rrdlog/network-$device.rrd", "--step=300",
@@ -65,7 +66,7 @@ sub updatenetdata {
RRDs::update ("$rrdlog/network-$device.rrd",
"-t", "received:transmitted",
- "N:$tokens[1]:$tokens[9]");
+ "N:$received:$transmitted");
$ERROR = RRDs::error;
print "Error in RRD::update for net: $ERROR\n" if $ERROR;
}
diff --git a/src/com.gluster.storage.management.server.scripts/src/setup_cifs_config.py b/src/com.gluster.storage.management.server.scripts/src/setup_cifs_config.py
new file mode 100755
index 00000000..2cc35acc
--- /dev/null
+++ b/src/com.gluster.storage.management.server.scripts/src/setup_cifs_config.py
@@ -0,0 +1,81 @@
+#!/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 Globals
+import Utils
+
+def main():
+ try:
+ os.mkdir(Globals.GLUSTER_BASE_DIR)
+ os.mkdir(Globals.VOLUME_CONF_DIR)
+ os.mkdir(Globals.CIFS_EXPORT_DIR)
+ os.mkdir(Globals.REEXPORT_DIR)
+ except OSError, e:
+ Utils.log("failed to create directory: %s" % str(e))
+ sys.exit(1)
+ try:
+ fp = open(Globals.VOLUME_SMBCONF_FILE, "w")
+ fp.close()
+ except IOError, e:
+ Utils.log("Failed to create file %s: %s" % (Globals.VOLUME_SMBCONF_FILE, str(e)))
+ sys.exit(2)
+ try:
+ os.rename(Globals.SAMBA_CONF_FILE, "%s.orig" % Globals.SAMBA_CONF_FILE)
+ except IOError, e:
+ Utils.log("Ignoring rename %s to %s: %s" % (Globals.SAMBA_CONF_FILE, "%s.orig" % Globals.SAMBA_CONF_FILE, str(e)))
+ try:
+ fp = open(Globals.SAMBA_CONF_FILE, "w")
+ fp.write("##\n")
+ fp.write("## THIS FILE SHOULD NOT BE MODIFIED. IF YOU WANT TO MODIFY SAMBA\n")
+ fp.write("## CONFIGURATIONS, USE /etc/samba/real.smb.conf FILE\n")
+ fp.write("##\n")
+ fp.write("include = %s\n\n" % Globals.REAL_SAMBA_CONF_FILE)
+ fp.write("## CAUTION: DO NOT REMOVE BELOW LINE. REMOVAL OF THE LINE DISABLES\n")
+ fp.write("## CIFS REEXPORT OF GLUSTER VOLUMES\n")
+ fp.write("include = %s\n" % Globals.VOLUME_SMBCONF_FILE)
+ fp.close()
+ except IOError, e:
+ Utils.log("Failed to create samba configuration file %s: %s" % (Globals.SAMBA_CONF_FILE, str(e)))
+ sys.exit(3)
+ try:
+ fp = open(Globals.REAL_SAMBA_CONF_FILE, "w")
+ fp.write("[global]\n")
+ fp.write("## CAUTION: DO NOT REMOVE BELOW INCLUDE LINE. REMOVAL OF THE LINE\n")
+ fp.write("## DISABLES SERVER/CIFS HIGH AVAILABILITY\n")
+ #fp.write("include = %s\n" % Globals.CTDB_SAMBA_CONF_FILE)
+ fp.write("##\n")
+ fp.write("socket options = TCP_NODELAY IPTOS_LOWDELAY SO_SNDBUF=131072 SO_RCVBUF=131072\n")
+ fp.write("read raw = yes\n")
+ fp.write("server string = %h\n")
+ fp.write("write raw = yes\n")
+ fp.write("oplocks = yes\n")
+ fp.write("max xmit = 131072\n")
+ fp.write("dead time = 15\n")
+ fp.write("getwd cache = yes\n")
+ fp.write("#read size = 131072\n")
+ fp.write("use sendfile=yes\n")
+ fp.write("block size = 131072\n")
+ fp.write("printcap name = /etc/printcap\n")
+ fp.write("load printers = no\n")
+ fp.close()
+ except IOError, e:
+ Utils.log("Failed to create samba configuration file %s: %s" % (Globals.REAL_SAMBA_CONF_FILE, str(e)))
+ sys.exit(4)
+
+
+ if Utils.runCommand("setsebool -P samba_share_fusefs on") != 0:
+ Utils.log("failed to set SELinux samba_share_fusefs")
+ sys.exit(5)
+
+ if Utils.runCommand("service smb restart") != 0:
+ Utils.log("failed to restart smb service")
+ sys.exit(6)
+ sys.exit(0)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/src/com.gluster.storage.management.server.scripts/src/start_volume_cifs.py b/src/com.gluster.storage.management.server.scripts/src/start_volume_cifs.py
new file mode 100755
index 00000000..239216c3
--- /dev/null
+++ b/src/com.gluster.storage.management.server.scripts/src/start_volume_cifs.py
@@ -0,0 +1,41 @@
+#!/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 Globals
+import Utils
+import VolumeUtils
+
+def main():
+ if len(sys.argv) != 2:
+ sys.stderr.write("usage: %s VOLUME_NAME\n" % os.path.basename(sys.argv[0]))
+ sys.exit(-1)
+
+ volumeName = sys.argv[1]
+
+ volumeMountDirName = "%s/%s" % (Globals.REEXPORT_DIR, volumeName)
+ cifsDirName = "%s/%s" % (Globals.CIFS_EXPORT_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))
+ sys.exit(1)
+ if Utils.runCommand("ln -fTs %s %s" % (volumeMountDirName, cifsDirName)) != 0:
+ Utils.log("Failed to create reexport link %s" % cifsDirName)
+ sys.exit(2)
+ if Utils.runCommand("chcon -t samba_share_t %s -h" % cifsDirName) != 0:
+ Utils.log("Failed to change security context for the link %s" % cifsDirName)
+ sys.exit(2)
+ if not VolumeUtils.includeVolume(volumeName):
+ Utils.log("Failed to include volume for CIFS reexport")
+ sys.exit(3)
+ if Utils.runCommand("service smb reload") != 0:
+ Utils.log("Failed to reload smb service")
+ sys.exit(4)
+ sys.exit(0)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/src/com.gluster.storage.management.server.scripts/src/stop_volume_cifs.py b/src/com.gluster.storage.management.server.scripts/src/stop_volume_cifs.py
new file mode 100755
index 00000000..99ac4750
--- /dev/null
+++ b/src/com.gluster.storage.management.server.scripts/src/stop_volume_cifs.py
@@ -0,0 +1,38 @@
+#!/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 Globals
+import Utils
+import VolumeUtils
+
+def main():
+ if len(sys.argv) != 2:
+ sys.stderr.write("usage: %s VOLUME_NAME\n" % os.path.basename(sys.argv[0]))
+ sys.exit(-1)
+
+ volumeName = sys.argv[1]
+
+ volumeMountDirName = "%s/%s" % (Globals.REEXPORT_DIR, volumeName)
+ cifsDirName = "%s/%s" % (Globals.CIFS_EXPORT_DIR, volumeName)
+
+ if not Utils.removeFile(cifsDirName):
+ Utils.log("Failed to remove reexport link %s" % cifsDirName)
+ sys.exit(1)
+ if not VolumeUtils.excludeVolume(volumeName):
+ Utils.log("Failed to exclude volume for CIFS reexport")
+ sys.exit(2)
+ if Utils.runCommand("service smb reload") != 0:
+ Utils.log("Failed to reload smb service")
+ sys.exit(3)
+ if Utils.runCommand("umount %s" % (volumeMountDirName)) != 0:
+ Utils.log("Failed to unmount volume %s" % (volumeName))
+ sys.exit(4)
+ sys.exit(0)
+
+
+if __name__ == "__main__":
+ main()