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()
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()
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
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
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
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
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
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])