%PDF- %PDF-
Direktori : /lib/python2.7/site-packages/salt/modules/ |
Current File : //lib/python2.7/site-packages/salt/modules/moosefs.py |
# -*- coding: utf-8 -*- ''' Module for gathering and managing information about MooseFS ''' from __future__ import absolute_import, print_function, unicode_literals # Import salt libs import salt.utils.path def __virtual__(): ''' Only load if the mfs commands are installed ''' if salt.utils.path.which('mfsgetgoal'): return 'moosefs' return (False, 'The moosefs execution module cannot be loaded: the mfsgetgoal binary is not in the path.') def dirinfo(path, opts=None): ''' Return information on a directory located on the Moose CLI Example: .. code-block:: bash salt '*' moosefs.dirinfo /path/to/dir/ [-[n][h|H]] ''' cmd = 'mfsdirinfo' ret = {} if opts: cmd += ' -' + opts cmd += ' ' + path out = __salt__['cmd.run_all'](cmd, python_shell=False) output = out['stdout'].splitlines() for line in output: if not line: continue comps = line.split(':') ret[comps[0].strip()] = comps[1].strip() return ret def fileinfo(path): ''' Return information on a file located on the Moose CLI Example: .. code-block:: bash salt '*' moosefs.fileinfo /path/to/dir/ ''' cmd = 'mfsfileinfo ' + path ret = {} chunknum = '' out = __salt__['cmd.run_all'](cmd, python_shell=False) output = out['stdout'].splitlines() for line in output: if not line: continue if '/' in line: comps = line.split('/') chunknum = comps[0].strip().split(':') meta = comps[1].strip().split(' ') chunk = chunknum[0].replace('chunk ', '') loc = chunknum[1].strip() id_ = meta[0].replace('(id:', '') ver = meta[1].replace(')', '').replace('ver:', '') ret[chunknum[0]] = { 'chunk': chunk, 'loc': loc, 'id': id_, 'ver': ver, } if 'copy' in line: copyinfo = line.strip().split(':') ret[chunknum[0]][copyinfo[0]] = { 'copy': copyinfo[0].replace('copy ', ''), 'ip': copyinfo[1].strip(), 'port': copyinfo[2], } return ret def mounts(): ''' Return a list of current MooseFS mounts CLI Example: .. code-block:: bash salt '*' moosefs.mounts ''' cmd = 'mount' ret = {} out = __salt__['cmd.run_all'](cmd) output = out['stdout'].splitlines() for line in output: if not line: continue if 'fuse.mfs' in line: comps = line.split(' ') info1 = comps[0].split(':') info2 = info1[1].split('/') ret[comps[2]] = { 'remote': { 'master': info1[0], 'port': info2[0], 'subfolder': '/' + info2[1], }, 'local': comps[2], 'options': (comps[5].replace('(', '').replace(')', '') .split(',')), } return ret def getgoal(path, opts=None): ''' Return goal(s) for a file or directory CLI Example: .. code-block:: bash salt '*' moosefs.getgoal /path/to/file [-[n][h|H]] salt '*' moosefs.getgoal /path/to/dir/ [-[n][h|H][r]] ''' cmd = 'mfsgetgoal' ret = {} if opts: cmd += ' -' + opts else: opts = '' cmd += ' ' + path out = __salt__['cmd.run_all'](cmd, python_shell=False) output = out['stdout'].splitlines() if 'r' not in opts: goal = output[0].split(': ') ret = { 'goal': goal[1], } else: for line in output: if not line: continue if path in line: continue comps = line.split() keytext = comps[0] + ' with goal' if keytext not in ret: ret[keytext] = {} ret[keytext][comps[3]] = comps[5] return ret