#!/usr/bin/python ## ## Mount manager ## ## Copyright 2007, Red Hat, Inc ## John Eckersberg ## ## 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 "inventory": self.inventory, } 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 def inventory(self): cmd = sub_process.Popen(["/bin/mount"], stdout=sub_process.PIPE, shell=False) output = cmd.communicate()[0] lines = output.split("\n") results = [] for line in lines: if line.find(" on ") == -1: continue (resource,rest) = line.split(" on ") (mountpoint,mtype) = rest.split(" type ") (realtype, params) = mtype.split(None) params = params.replace("(","") params = params.replace(")","") paramlist = params.split(",") results.append([resource,mountpoint,realtype,paramlist]) return results methods = MountModule() register_rpc = methods.register_rpc