Example #1
0
    def change_group(self, **raw_args):
        args = {k: str(v) for k, v in raw_args.iteritems()}
        server_name = args.pop('server_name')
        group = args.pop('group')
        retval = None

        response = {'result': None, 'cmd': 'chgrp', 'payload': None}

        try:
            if self.login == mc.has_server_rights(self.login, server_name, self.base_directory) or \
               self.login == 'root':
                instance = mc(server_name, None, self.base_directory)
                instance.chgrp(group)
            else:
                raise OSError(
                    'Group assignment to %s failed. Only the owner make change groups.'
                    % group)
        except (RuntimeError, KeyError, OSError) as ex:
            response['result'] = 'error'
            retval = ex.message
        except CalledProcessError as ex:
            response['result'] = 'error'
            retval = ex.output
        except RuntimeWarning as ex:
            response['result'] = 'warning'
            retval = ex.message
        else:
            response['result'] = 'success'
            retval = "Server '%s' group ownership granted to '%s'" % (
                server_name, group)

        response['payload'] = to_jsonable_type(retval)
        return response
Example #2
0
    def delete_server(self, **raw_args):
        args = {k: str(v) for k, v in raw_args.iteritems()}
        server_name = args.pop('server_name')
        retval = None

        response = {'result': None, 'cmd': 'delete_server', 'payload': None}

        try:
            if mc.has_server_rights(self.login, server_name,
                                    self.base_directory):
                instance = mc(server_name, None, self.base_directory)
                instance.delete_server()
            else:
                raise OSError(
                    'Server deletion failed. Only the server owner or root may delete servers.'
                )
        except (RuntimeError, KeyError, OSError) as ex:
            response['result'] = 'error'
            retval = ex.message
        except CalledProcessError as ex:
            response['result'] = 'error'
            retval = ex.output
        except RuntimeWarning as ex:
            response['result'] = 'warning'
            retval = ex.message
        else:
            response['result'] = 'success'
            retval = "Server '%s' deleted" % server_name

        response['payload'] = to_jsonable_type(retval)
        return response
Example #3
0
    def delete_server(self, **raw_args):
        args = {k:str(v) for k,v in raw_args.iteritems()}
        server_name = args.pop('server_name')
        retval = None

        response = {
            'result': None,
            'cmd': 'delete_server',
            'payload': None
            }

        try:
            if mc.has_server_rights(self.login, server_name, self.base_directory):
                instance = mc(server_name, None, self.base_directory)
                instance.delete_server()
            else:
                raise OSError('Server deletion failed. Only the server owner or root may delete servers.')
        except (RuntimeError, KeyError, OSError) as ex:
            response['result'] = 'error'
            retval = ex.message
        except CalledProcessError as ex:
            response['result'] = 'error'
            retval = ex.output
        except RuntimeWarning as ex:
            response['result'] = 'warning'
            retval = ex.message
        else:
            response['result'] = 'success'
            retval = "Server '%s' deleted" % server_name

        response['payload'] = to_jsonable_type(retval)
        return response     
Example #4
0
    def change_group(self, **raw_args):
        args = {k:str(v) for k,v in raw_args.iteritems()}
        server_name = args.pop('server_name')
        group = args.pop('group')
        retval = None

        response = {
            'result': None,
            'cmd': 'chgrp',
            'payload': None
            }

        try:
            if self.login == mc.has_server_rights(self.login, server_name, self.base_directory) or \
               self.login == 'root':
                instance = mc(server_name, None, self.base_directory)
                instance.chgrp(group)
            else:
                raise OSError('Group assignment to %s failed. Only the owner make change groups.' % group)
        except (RuntimeError, KeyError, OSError) as ex:
            response['result'] = 'error'
            retval = ex.message
        except CalledProcessError as ex:
            response['result'] = 'error'
            retval = ex.output
        except RuntimeWarning as ex:
            response['result'] = 'warning'
            retval = ex.message
        else:
            response['result'] = 'success'
            retval = "Server '%s' group ownership granted to '%s'" % (server_name, group)

        response['payload'] = to_jsonable_type(retval)
        return response 
Example #5
0
    def server(self, **raw_args):
        args = {k:str(v) for k,v in raw_args.iteritems()}
        command = args.pop('cmd')
        server_name = args.pop('server_name')
        retval = None

        response = {
            'result': None,
            'cmd': command,
            'payload': None
            }

        owner = mc.has_server_rights(self.login, server_name, self.base_directory)

        try:
            if server_name is None:
                raise KeyError('Required value missing: server_name')
            elif not owner:
                raise OSError('User %s does not have permissions on %s' % (self.login, server_name))
            
            instance = mc(server_name, owner, self.base_directory)

            if command in self.METHODS:
                retval = getattr(instance, command)(**args)
            elif command in self.PROPERTIES:
                if args:
                    setattr(instance, command, args.values()[0])
                    retval = args.values()[0]
                else:
                    retval = getattr(instance, command)
            else:
                instance._command_stuff(command)
                retval = '"%s" successfully sent to server.' % command
        except (RuntimeError, KeyError, NotImplementedError) as ex:
            response['result'] = 'error'
            retval = ex.message
        except CalledProcessError as ex:
            response['result'] = 'error'
            retval = ex.output
        except RuntimeWarning as ex:
            response['result'] = 'warning'
            retval = ex.message
        else:
            response['result'] = 'success'

        response['payload'] = to_jsonable_type(retval)
        return response
Example #6
0
    def server(self, **raw_args):
        args = {k:str(v) for k,v in raw_args.iteritems()}
        command = args.pop('cmd')
        server_name = args.pop('server_name')
        retval = None

        response = {
            'result': None,
            'cmd': command,
            'payload': None
            }

        owner = mc.has_server_rights(self.login, server_name, self.base_directory)

        try:
            if server_name is None:
                raise KeyError('Required value missing: server_name')
            elif not owner:
                raise OSError('User %s does not have permissions on %s' % (self.login, server_name))
            
            instance = mc(server_name, owner, self.base_directory)

            if command in self.METHODS:
                retval = getattr(instance, command)(**args)
            elif command in self.PROPERTIES:
                if args:
                    setattr(instance, command, args.values()[0])
                    retval = args.values()[0]
                else:
                    retval = getattr(instance, command)
            else:
                instance._command_stuff(command)
                retval = '"%s" successfully sent to server.' % command
        except (RuntimeError, KeyError, NotImplementedError) as ex:
            response['result'] = 'error'
            retval = ex.message
        except CalledProcessError as ex:
            response['result'] = 'error'
            retval = ex.output
        except RuntimeWarning as ex:
            response['result'] = 'warning'
            retval = ex.message
        else:
            response['result'] = 'success'

        response['payload'] = to_jsonable_type(retval)
        return response
                             and not m.startswith('_'))
    available_properties = list(m for m in dir(mc) if not callable(getattr(mc,m)) \
                                and not m.startswith('_'))

    import pprint, types
    pp = pprint.PrettyPrinter(indent=4)

    if args.this:
        args.server_name = os.path.basename(os.getcwd())
        args.base_directory = os.path.dirname(os.path.dirname(os.getcwd()))
    else:
        args.base_directory = args.base_directory or os.path.expanduser("~")
        mc._make_skeleton(args.base_directory)

    if args.server_name:
        owner = mc.has_server_rights(getuser(), args.server_name, args.base_directory)
        if not owner and os.path.isdir(os.path.join(args.base_directory, mc.DEFAULT_PATHS['servers'], args.server_name)):
            raise OSError("User '%s' does not have rights to %s" % (getuser(),
                                                                    os.path.join(args.base_directory,
                                                                                 args.server_name)))
        else:
            instance = mc(args.server_name, owner, args.base_directory)

        if args.cmd in ['screen', 'console']:
            instance._command_direct('screen -r %s' % instance.screen_pid, instance.env['cwd'])
        elif args.cmd in available_methods:
            retval = getattr(instance, args.cmd)(*arguments)
            if retval:
                if isinstance(retval, types.GeneratorType):
                    pp.pprint(list(retval))
                else:
Example #8
0
 def server_list(self):
     for i in mc.list_servers(self.base_directory):
         if mc.has_server_rights(self.login, i, self.base_directory):
             yield i
Example #9
0
 def server_list(self):
     for i in mc.list_servers(self.base_directory):
         if mc.has_server_rights(self.login, i, self.base_directory):
             yield i
Example #10
0
        if callable(getattr(mc, m)) and not m.startswith('_'))
    available_properties = list(
        m for m in dir(mc)
        if not callable(getattr(mc, m)) and not m.startswith('_'))

    pp = pprint.PrettyPrinter(indent=4)

    if args.this:
        args.server_name = os.path.basename(os.getcwd())
        args.base_directory = os.path.dirname(os.path.dirname(os.getcwd()))
    else:
        args.base_directory = args.base_directory or os.path.expanduser("~")
        mc._make_skeleton(args.base_directory)

    if args.server_name:
        owner = mc.has_server_rights(getuser(), args.server_name,
                                     args.base_directory)
        if not owner and os.path.isdir(
                os.path.join(args.base_directory, mc.DEFAULT_PATHS['servers'],
                             args.server_name)):
            raise OSError(
                "User '%s' does not have rights to %s" %
                (getuser(), os.path.join(args.base_directory,
                                         args.server_name)))
        else:
            instance = mc(args.server_name, owner, args.base_directory)

        if args.cmd in ['screen', 'console']:
            instance._command_direct('screen -r %s' % instance.screen_pid,
                                     instance.env['cwd'])
        elif args.cmd in available_methods:
            retval = getattr(instance, args.cmd)(*arguments)