diff options
-rw-r--r-- | AUTHORS | 8 | ||||
-rw-r--r-- | func/minion/modules/mount.py | 84 |
2 files changed, 88 insertions, 4 deletions
@@ -1,19 +1,19 @@ -func is written by (alphabetically) ... +func is written and maintained by (alphabetically) ... - James Bowes <jbowes@redhat.com> Michael DeHaan <mdehaan@redhat.com> Adrian Likins <alikins@redhat.com> - Robin Norwood <rnorwood@redhat.com> Seth Vidal <skvidal@redhat.com> ... - (committers: please add yourself) Additional patches and contributions by ... James Anthill <james@mail.and.org> + James Bowes <jbowes@redhat.com> Eli Criffield <elicriffield@gmail.com> + John Eckersberg <jeckersb@redhat.com> Stephen Nelson-Smith <atalanta.systems@googlemail.com> + Robin Norwood <rnorwood@redhat.com> Vito Laurenza <vitolaurenza@gmail.com> ... [ send in patches (or modules!) to get your name here ] diff --git a/func/minion/modules/mount.py b/func/minion/modules/mount.py new file mode 100644 index 0000000..bbaf7c7 --- /dev/null +++ b/func/minion/modules/mount.py @@ -0,0 +1,84 @@ +#!/usr/bin/python + +## +## Mount manager +## +## Copyright 2007, Red Hat, Inc +## John Eckersberg <jeckersb@redhat.com> +## +## This software may be freely redistributed under the terms of the GNU +## general public license. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +## + +import sub_process, os.path +from modules import func_module + + +class MountModule(func_module.FuncModule): + def __init__(self): + self.methods = { + "list": self.list, + "mount": self.mount, + "umount": self.umount + } + func_module.FuncModule.__init__(self) + + def list(self): + cmd = sub_process.Popen(["/bin/cat", "/proc/mounts"], executable="/bin/cat", stdout=sub_process.PIPE, shell=False) + data = cmd.communicate()[0] + + mounts = [] + lines = [l for l in data.split("\n") if l] #why must you append blank crap? + + for line in lines: + curmount = {} + tokens = line.split() + curmount['device'] = tokens[0] + curmount['dir'] = tokens[1] + curmount['type'] = tokens[2] + curmount['options'] = tokens[3] + mounts.append(curmount) + + return mounts + + def mount(self, device, dir, type="auto", options=None, createdir=False): + cmdline = ["/bin/mount", "-t", type] + if options: + cmdline.append("-o") + cmdline.append(options) + cmdline.append(device) + cmdline.append(dir) + cmd = sub_process.Popen(cmdline, executable="/bin/mount", stdout=sub_process.PIPE, shell=False) + if cmd.wait() == 0: + return True + else: + return False + + def umount(self, dir, killall=False, force=False, lazy=False): + # succeed if its not mounted + if not os.path.ismount(dir): + return True + + if killall: + cmd = sub_process.Popen(["/sbin/fuser", "-mk", dir], executable="/sbin/fuser", stdout=sub_process.PIPE, shell=False) + cmd.wait() + + cmdline = ["/bin/umount"] + if force: + cmdline.append("-f") + if lazy: + cmdline.append("-l") + cmdline.append(dir) + + cmd = sub_process.Popen(cmdline, executable="/bin/umount", stdout=sub_process.PIPE, shell=False) + if cmd.wait() == 0: + return True + else: + return False + +methods = MountModule() +register_rpc = methods.register_rpc |