예제 #1
0
    def multi_server(self):
        print("Multi Server mode")
        print("Press Ctrl-C to quit")

        while True:
            server_list = mc.list_servers(self.base_directory)
            logging.debug(server_list)

            for i in server_list:
                server_logger(server_name=i, owner=self.owner, base_directory=self.base_directory).check_server()
            self.sleep()
예제 #2
0
    def interactive(self):
        servers_to_monitor = []
        print("Interactive Mode")

        while True:
            self.list_servers()
            print("\n\nCurrently Monitoring: {0}\n".format(', '.join(servers_to_monitor)))
            print("Type name of server to monitor. Enter (d/done) when finished.")
            server_name = raw_input(">")

            if server_name.lower() in ['done', 'd', ''] and servers_to_monitor:
                break  # Only exits if we have work to do
            elif server_name in mc.list_servers(self.base_directory):  # Checks if name is valid
                servers_to_monitor.append(server_name)

        logging.info("Starting monitor")

        while True:
            for i in servers_to_monitor:
                server_logger(server_name=i, owner=self.owner, base_directory=self.base_directory).check_server()
            self.sleep()
예제 #3
0
             getattr(mc, args.cmd)(i, owner, args.base_directory)
             print ' done'
         except Exception as ex:
             print ex.message
 elif args.cmd == 'restore':
     from procfs_reader import path_owner
     for i in mc.list_servers_restore_at_boot(args.base_directory):
         try:
             owner = path_owner(os.path.join(args.base_directory, mc.DEFAULT_PATHS['backup'], i))
             print 'starting %s for %s...' % (args.cmd, i),
             mc(i, owner, args.base_directory).restore()
             print ' done'
         except Exception as ex:
             print ex.message
 elif args.cmd in available_properties:
     for i in sorted(mc.list_servers(args.base_directory)):
         prop_ = getattr(mc(i, None, args.base_directory), args.cmd)
         print '%s: %s' % (i, prop_) 
 elif args.cmd in available_methods:
     retval = getattr(mc, args.cmd)(*arguments)
     if retval:
         if isinstance(retval, types.GeneratorType):
             pp.pprint(list(retval))
         else:
             pp.pprint(retval)
     else:
         print '{%s} completed without error.' % args.cmd
 else:
     raise NotImplementedError
     
     
예제 #4
0
파일: mounts.py 프로젝트: wuvvy/mineos
 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
예제 #5
0
파일: mounts.py 프로젝트: wuvvy/mineos
    def host(self, **raw_args):
        args = {k: str(v) for k, v in raw_args.iteritems()}
        command = args.pop('cmd')
        retval = None

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

        try:
            if command == 'define_profile':
                mc.has_ownership(
                    self.login,
                    os.path.join(self.base_directory,
                                 mc.DEFAULT_PATHS['profiles'],
                                 'profile.config'))

                from json import loads
                from urllib import unquote

                definition_unicode = loads(args['profile_dict'])
                definition = {
                    str(k): str(v)
                    for k, v in definition_unicode.iteritems()
                }

                try:
                    definition['url'] = unquote(definition['url'])
                except KeyError:
                    pass

                if definition['name'] in mc.list_profiles(
                        self.base_directory).keys():
                    raise KeyError('Profiles may not be modified once created')

                instance = mc('throwaway', None, self.base_directory)
                retval = instance.define_profile(definition)
            elif command == 'update_profile':
                mc.has_ownership(
                    self.login,
                    os.path.join(self.base_directory,
                                 mc.DEFAULT_PATHS['profiles'],
                                 'profile.config'))

                instance = mc('throwaway', None, self.base_directory)
                retval = instance.update_profile(**args)
            elif command == 'remove_profile':
                for i in mc.list_servers(self.base_directory):
                    if mc(i, None,
                          self.base_directory).profile == args['profile']:
                        raise KeyError(
                            'May not remove profiles in use by 1 or more servers'
                        )

                instance = mc('throwaway', None, self.base_directory)
                retval = instance.remove_profile(**args)
            elif command == 'stock_profile':
                from stock_profiles import STOCK_PROFILES

                profile = iter([
                    i for i in STOCK_PROFILES if i['name'] == args['profile']
                ]).next()
                mc('throwaway', None,
                   self.base_directory).define_profile(profile)
                retval = '%s profile created' % profile['name']
            elif command == 'modify_profile':
                mc('throwaway', None,
                   self.base_directory).modify_profile(args['option'],
                                                       args['value'],
                                                       args['section'])
                retval = '%s profile updated' % args['section']
            elif command in self.METHODS:
                import inspect
                try:
                    if 'base_directory' in inspect.getargspec(
                            getattr(mc, command)).args:
                        retval = getattr(mc, command)(
                            base_directory=init_args['base_directory'], **args)
                    else:
                        retval = getattr(mc, command)(**args)
                except TypeError as ex:
                    raise RuntimeError(ex.message)
            else:
                raise RuntimeWarning(
                    'Command not found: should this be to a server?')
        except (RuntimeError, KeyError, OSError, 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
예제 #6
0
파일: mounts.py 프로젝트: Partypapa/mineos
 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
예제 #7
0
파일: mounts.py 프로젝트: Partypapa/mineos
    def host(self, **raw_args):
        args = {k:str(v) for k,v in raw_args.iteritems()}
        command = args.pop('cmd')
        retval = None

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

        try:
            if command == 'define_profile':
                mc.has_ownership(self.login, os.path.join(self.base_directory,
                                                          mc.DEFAULT_PATHS['profiles'],
                                                          'profile.config'))

                from json import loads
                from urllib import unquote

                definition_unicode = loads(args['profile_dict'])
                definition = {str(k):str(v) for k,v in definition_unicode.iteritems()}

                try:
                    definition['url'] = unquote(definition['url'])
                except KeyError:
                    pass

                if definition['name'] in mc.list_profiles(self.base_directory).keys():
                    raise KeyError('Profiles may not be modified once created')

                instance = mc('throwaway', None, self.base_directory)
                retval = instance.define_profile(definition)                
            elif command == 'update_profile':
                mc.has_ownership(self.login, os.path.join(self.base_directory,
                                                           mc.DEFAULT_PATHS['profiles'],
                                                           'profile.config'))
                 
                instance = mc('throwaway', None, self.base_directory)
                retval = instance.update_profile(**args)
            elif command == 'remove_profile':
                for i in mc.list_servers(self.base_directory):
                    if mc(i, None, self.base_directory).profile == args['profile']:
                        raise KeyError('May not remove profiles in use by 1 or more servers')
                
                instance = mc('throwaway', None, self.base_directory)
                retval = instance.remove_profile(**args)
            elif command == 'stock_profile':
                from stock_profiles import STOCK_PROFILES
                
                profile = iter([i for i in STOCK_PROFILES if i['name'] == args['profile']]).next()
                mc('throwaway', None, self.base_directory).define_profile(profile)
                retval = '%s profile created' % profile['name']
            elif command == 'modify_profile':
                mc('throwaway', None, self.base_directory).modify_profile(args['option'],args['value'],args['section'])
                retval = '%s profile updated' % args['section']
            elif command in self.METHODS:
                import inspect
                try:
                    if 'base_directory' in inspect.getargspec(getattr(mc, command)).args:
                        retval = getattr(mc, command)(base_directory=init_args['base_directory'],
                                                      **args)
                    else:
                        retval = getattr(mc, command)(**args)
                except TypeError as ex:
                    raise RuntimeError(ex.message)
            else:
                raise RuntimeWarning('Command not found: should this be to a server?')
        except (RuntimeError, KeyError, OSError, 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
예제 #8
0
                    getattr(mc, args.cmd)(i, owner, args.base_directory)
                    print(' done')
                except Exception as ex:
                    print(ex)
        elif args.cmd == 'restore':
            for i in mc.list_servers_restore_at_boot(args.base_directory):
                try:
                    owner = path_owner(
                        os.path.join(args.base_directory,
                                     mc.DEFAULT_PATHS['backup'], i))
                    print('starting %s for %s...' % (args.cmd, i), end=' ')
                    mc(i, owner, args.base_directory).restore()
                    print(' done')
                except Exception as ex:
                    print(ex)
        elif args.cmd in available_properties:
            for i in sorted(mc.list_servers(args.base_directory)):
                prop_ = getattr(mc(i, None, args.base_directory), args.cmd)
                print('%s: %s' % (i, prop_))
        elif args.cmd in available_methods:
            retval = getattr(mc, args.cmd)(*arguments)
            if retval:
                if isinstance(retval, types.GeneratorType):
                    pp.pprint(list(retval))
                else:
                    pp.pprint(retval)
            else:
                print('{%s} completed without error.' % args.cmd)
        else:
            raise NotImplementedError
예제 #9
0
 def list_servers(self):
     print("Servers:")
     print("{0}{1}".format("Name".ljust(20), 'State'))
     for i in mc.list_servers(self.base_directory):
         print "{0}{1}".format(i.ljust(20), ['down','up'][mc(i).up])