def main(): script = Script() script.add_argument('--config', default=DEFAULT_CONFIG_PATH, help='Virtual machine directory') c = script.add_subcommand(ListCommand('list', 'List VMs')) c = script.add_subcommand(StartCommand('start', 'Start VM')) c.add_argument('patterns', nargs='*', help='VM name patterns') c = script.add_subcommand(StopCommand('stop', 'Stop VM')) c.add_argument('patterns', nargs='*', help='VM name patterns') c = script.add_subcommand(AutoResumeCommand('resume', 'Autoresume headless VMs')) c.add_argument('patterns', nargs='*', help='VM name patterns') c = script.add_subcommand(SuspendCommand('suspend', 'Suspend VM')) c.add_argument('--autoresume', action='store_true', help='Set autoresume flag') c.add_argument('patterns', nargs='*', help='VM name patterns') c = script.add_subcommand(StatusCommand('status', 'Show status of VMs')) c.add_argument('patterns', nargs='*', help='VM name patterns') c = script.add_subcommand(DetailsCommand('details', 'Show VM details')) c.add_argument('patterns', nargs='*', help='VM name patterns') script.parse_args()
def main(): script = Script() script.add_argument('--config', default=DEFAULT_CONFIG_PATH, help='Virtual machine directory') script.add_subcommand(ListCommand()) script.add_subcommand(StatusCommand()) script.add_subcommand(StartCommand()) script.add_subcommand(StopCommand()) script.add_subcommand(ResumeCommand()) script.add_subcommand(SuspendCommand()) script.add_subcommand(DetailsCommand()) script.parse_args()
def parse_args(self, *args, **kwargs): args = Script.parse_args(self, *args, **kwargs) if args.version: self.show_version() self.exit(0) if args.inventory is None: self.exit(1, 'Could not detect default inventory path') if 'pattern' in args and not Inventory(args.inventory).list_hosts( args.pattern): self.exit(1, 'No hosts matched') if args.ask_pass: args.remote_pass = getpass.getpass('Enter remote user password: '******'Enter sudo password: '******'sudo %s ' % args.sudo_user elif args.su: self.mode = 'su %s ' % args.su_user return args
def parse_args(self, *args, **kwargs): args = Script.parse_args(self, *args, **kwargs) if args.inventory is None: self.exit(1, 'Could not detect default inventory path') if 'pattern' in args and not Inventory(args.inventory).list_hosts(args.pattern): self.exit(1, 'No hosts matched') if args.ask_pass: args.remote_pass = getpass.getpass('Enter remote user password: '******'Enter sudo password: '******'sudo %s ' % args.sudo_user elif args.su: self.mode = 'su %s ' % args.su_user return args
def main(): script = Script() script.add_argument('-f', '--log-file', default=DEFAULT_LOGFILE, help='Log file') script.add_argument('-c', '--configuration-file', default=DEFAULT_CONFIGURATION_PATH, help='Log file') script.add_argument('-h', '--redis-host', help='Redis host') script.add_argument('-r', '--redis-auth', help='Redis auth') args = script.parse_args() try: configuration = DaemonConfiguration( args.configuration_file, args.log_file, args.redis_host, args.redis_auth, ) except Exception as e: script.exit(1, e) try: Daemon(**configuration).run() except MusicPlayerError as e: script.exit(1, e)
def parse_args(self, *args, **kwargs): args = Script.parse_args(self, *args, **kwargs) if args.version: self.show_version() self.exit(0) if args.inventory is None: self.exit(1, 'Could not detect default inventory path') if 'pattern' in args and not Inventory(args.inventory).list_hosts(args.pattern): self.exit(1, 'No hosts matched') if args.ask_pass: args.remote_pass = getpass.getpass('Enter remote user password: '******'Enter become password: '******'become %s ' % args.become_user elif args.su: self.mode = 'su %s ' % args.su_user if args.vault_password_file: args.vault_pass = utils.read_vault_file(args.vault_password_file) else: args.vault_pass = False return args
def parse_args(self): args = Script.parse_args(self) self.address = args.host self.port = args.port self.timeout = args.timeout self.retries = args.retries self.index_cache_path = args.cache_path if args.snmpv3 and args.username and args.authPass: self.auth = SNMPv3Auth(args.username,args.authPass,args.privPass,args.authProtocol,args.privProtocol) elif args.snmpv2c and args.community: self.auth = SNMPv2cAuth(args.community) elif args.snmpv1 and args.community: self.auth = SNMPv1Auth(args.community) else: raise ScriptError('No SNMP authentication method provided') return args
def parse_args(self): args = Script.parse_args(self) self.address = args.host self.port = args.port self.timeout = args.timeout self.retries = args.retries self.index_cache_path = args.cache_path if args.snmpv3 and args.username and args.authPass: self.auth = SNMPv3Auth(args.username, args.authPass, args.privPass, args.authProtocol, args.privProtocol) elif args.snmpv2c and args.community: self.auth = SNMPv2cAuth(args.community) elif args.snmpv1 and args.community: self.auth = SNMPv1Auth(args.community) else: raise ScriptError("No SNMP authentication method provided") return args
class NagiosPlugin(object): """Nagios plugin base class Implementation of nagios plugin in python See examples directory in source code for usage """ def __init__(self, description=None): object.__setattr__(self, 'state_code', NAGIOS_INITIAL_STATE) self.message = 'UNINITIALIZED' self.parser = Script(description=description) def __repr__(self): return '{0} {1}'.format(self.state_message, self.message) def __setattr__(self, attr, value): if attr == 'state': self.set_state(value) object.__setattr__(self, attr, value) @property def state_message(self): return NAGIOS_STATES[self.state_code] def set_state(self, value): """Set nagios plugin state Sets internal state to provided value, which can be integer from 0 to 3 or one of strings 'OK', 'WARNING', 'CRITICAL', 'UNKNOWN' Silently refuses to lower plugin state to less critical error. UNKNOWN state can always be overwritten. """ try: value = int(value) if value not in NAGIOS_STATES.keys(): raise ValueError except ValueError: pass if value in NAGIOS_STATES.keys(): state_code = int(value) else: for k,v in NAGIOS_STATES.items(): if value == v: state_code = k break if state_code not in NAGIOS_STATES.keys(): raise AttributeError('Attempt to set invalid plugin state {0}'.format(value)) # Silently ignore lowering of error state for a plugin if self.state_code != NAGIOS_INITIAL_STATE and self.state_code > state_code: self.parser.log.debug('Refuse lowering state from {0} to {1}'.format(self.state_code, state_code)) return object.__setattr__(self, 'state_code', state_code) def add_argument(self, *args, **kwargs): """Add CLI argument Add CLI argument. Uses argparse.ArgumentParser.add_argument syntax """ self.parser.add_argument(*args, **kwargs) def parse_args(self, *args, **kwargs): """Parse arguments Parse self.parser arguments. Called automatically from self.run() """ self.args = self.parser.parse_args(*args, **kwargs) return self.args def error(self, message, code=2): """Exit with error Exit with error code (must be valid nagios state code) Writes error message to stdout """ try: code = int(code) if code not in NAGIOS_STATES.keys(): raise ValueError except ValueError: raise AttributeError('Invalid error code {0}'.format(code)) sys.stdout.write('Error running plugin: {0}\n'.format(message)) sys.exit(code) def exit(self): """Return nagios message and exit Print self.state_message + self.message to stdout for nagios and exit with self.state_code code """ sys.stdout.write('{0} {1}\n'.format(self.state_message, self.message)) sys.exit(self.state_code) def run(self): """Run the plugin Run the plugin: - Parse arguments - Set message to empty - run self.check_plugin_status() callback - run self.exit() If check_plugin_status raises NagiosPluginError, state is set to critical and error message is appended to message before exit """ args = self.parse_args() self.message = '' try: self.check_plugin_status() except NagiosPluginError, emsg: self.state = 'CRITICAL' self.message += '{0}'.format(emsg) self.exit()
def main(): script = Script(description='Update music player library metadata') script.add_argument('-c', '--codec', help='Music library default codec') script.add_argument('-l', '--music-path', help='Music library path') script.add_argument('-p', '--position', type=int, help='Start from given position in library') script.add_argument('-m', '--metadata', action='store_true', help='Update metadata') args = script.parse_args() client = Client() script.log.info('Loading music player library playlist') if args.position: try: client.library.jump(args.position) except ValueError: script.exit( 1, 'Invalid position: {0} ({1:d} entries)'.format( (args.position, len(client.library)))) try: tree = MusicTree(tree_path=args.music_path) tree.load() tree_paths = tree.realpaths except Exception as e: script.exit(1, e) processed = 0 progress_interval = PROGRESS_INTERVAL progress_start = time.time() start = time.time() app_files = {} script.log.info('Checking library files against music player database') for entry in client.library: processed += 1 if processed % progress_interval == 0: progress_time = float(time.time() - progress_start) progress_rate = int(progress_interval / progress_time) script.log.info('Index {0:d} ({1:d} entries per second)'.format( processed, progress_rate)) progress_start = time.time() try: if entry.path is None: try: client.library.delete(entry) except MusicPlayerError as e: print(e) continue except TypeError as e: print('Error processing entry {0}: {1}'.format(entry, e)) continue try: path = normalized(os.path.realpath(entry.path)) except AttributeError: script.log.info('Removing invalid entry (no path defined)') try: client.library.delete(entry) except MusicPlayerError as e: print(e) continue if path not in tree_paths: if not os.path.isfile(path): script.log.info('Removing non-existing: "}0}"'.format(path)) try: client.library.delete(entry) except MusicPlayerError as e: print(e) else: script.log.info('File outside tree: {0}'.format(path)) elif path not in app_files: app_files[path] = entry if args.metadata: mtime = os.stat(path).st_mtime if int(entry.modification_date.strftime('%s')) >= mtime: continue song = Track(entry.path) if entry.syncTags(song): client.library.__next = entry.index else: script.log.info('Removing duplicate: {0}'.format(entry.path)) try: client.library.delete(entry) except MusicPlayerError as e: print(e) loadtime = float(time.time() - start) script.log.info('Checked {0:d} files in {1:4.2f} seconds'.format( processed, loadtime)) start = time.time() processed = 0 script.log.info('Checking music player database against tree files') if args.position is None: for path in sorted(tree_paths.keys()): if path not in app_files: script.log.info('Adding: {0}'.format(path)) try: client.library.add(path) except ValueError as e: print(e) processed += 1 if processed % 1000 == 0: script.log.debug('Processed: {0:d} entries'.format(processed)) loadtime = float(time.time() - start) script.log.info('Checked {0:d} files in {1:2.2f} seconds'.format( processed, loadtime))
class NagiosPlugin(object): """Nagios plugin base class Implementation of nagios plugin in python See examples directory in source code for usage """ def __init__(self, description=None): object.__setattr__(self, 'state_code', NAGIOS_INITIAL_STATE) self.message = 'UNINITIALIZED' self.parser = Script(description=description) def __repr__(self): return '{0} {1}'.format(self.state_message, self.message) def __setattr__(self, attr, value): if attr == 'state': self.set_state(value) object.__setattr__(self, attr, value) @property def state_message(self): return NAGIOS_STATES[self.state_code] def set_state(self, value): """Set nagios plugin state Sets internal state to provided value, which can be integer from 0 to 3 or one of strings 'OK', 'WARNING', 'CRITICAL', 'UNKNOWN' Silently refuses to lower plugin state to less critical error. UNKNOWN state can always be overwritten. """ try: value = int(value) if value not in NAGIOS_STATES.keys(): raise ValueError except ValueError: pass if value in NAGIOS_STATES.keys(): state_code = int(value) else: for k, v in NAGIOS_STATES.items(): if value == v: state_code = k break if state_code not in NAGIOS_STATES.keys(): raise AttributeError( 'Attempt to set invalid plugin state {0}'.format(value)) # Silently ignore lowering of error state for a plugin if self.state_code != NAGIOS_INITIAL_STATE and self.state_code > state_code: self.parser.log.debug( 'Refuse lowering state from {0} to {1}'.format( self.state_code, state_code)) return object.__setattr__(self, 'state_code', state_code) def add_argument(self, *args, **kwargs): """Add CLI argument Add CLI argument. Uses argparse.ArgumentParser.add_argument syntax """ self.parser.add_argument(*args, **kwargs) def parse_args(self, *args, **kwargs): """Parse arguments Parse self.parser arguments. Called automatically from self.run() """ self.args = self.parser.parse_args(*args, **kwargs) return self.args def error(self, message, code=2): """Exit with error Exit with error code (must be valid nagios state code) Writes error message to stdout """ try: code = int(code) if code not in NAGIOS_STATES.keys(): raise ValueError except ValueError: raise AttributeError('Invalid error code {0}'.format(code)) sys.stdout.write('Error running plugin: {0}\n'.format(message)) sys.exit(code) def exit(self): """Return nagios message and exit Print self.state_message + self.message to stdout for nagios and exit with self.state_code code """ sys.stdout.write('{0} {1}\n'.format(self.state_message, self.message)) sys.exit(self.state_code) def run(self): """Run the plugin Run the plugin: - Parse arguments - Set message to empty - run self.check_plugin_status() callback - run self.exit() If check_plugin_status raises NagiosPluginError, state is set to critical and error message is appended to message before exit """ args = self.parse_args() self.message = '' try: self.check_plugin_status() except NagiosPluginError, emsg: self.state = 'CRITICAL' self.message += '{0}'.format(emsg) self.exit()