-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 First post for me! You'll probably be hearing more from me as I'm starting to use func to automate a lot of my daily tasks. Only more code can come of that :) - -- John Eckersberg Production Operations Red Hat, Inc. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (GNU/Linux) Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org iD8DBQFHZpvKO5VSO/Qqm+gRAjnYAKCHau1pP6VYB72tiVDloEhKMyJjSgCguJ7W IaXC3dlNS2HV5fk3vOnaGzY= =cDdw -----END PGP SIGNATURE-----
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@xxxxxxxxxx> +## +## 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