def abort(self, *msgs): """ Display errors (optional) and abort execution. """ utility.error('Fatal error in "%s" command.' % self.verb.name, *msgs) self.help() utility.abort()
def pause(runner): # Check the STATUS column. runner.call_proc() detects and aborts on errors. status = runner.call_proc('@Pause', [], []).table(0).tuple(0).column_integer(0) if status == 0: utility.info('The cluster is paused.') else: utility.error('The cluster has failed to pause with status: %d' % status)
def help(self, *args, **kwargs): """ Display help for command. """ # The only valid keyword argument is 'all' for now. context = '%s.help()' % self.__class__.__name__ all = utility.kwargs_get_boolean(kwargs, 'all', default=False) if all: for verb_name in self.verbspace.verb_names: verb_spec = self.verbspace.verbs[verb_name].cli_spec if not verb_spec.baseverb and not verb_spec.hideverb: sys.stdout.write('\n===== Verb: %s =====\n\n' % verb_name) self._print_verb_help(verb_name) for verb_name in self.verbspace.verb_names: verb_spec = self.verbspace.verbs[verb_name].cli_spec if verb_spec.baseverb and not verb_spec.hideverb: sys.stdout.write('\n===== Common Verb: %s =====\n\n' % verb_name) self._print_verb_help(verb_name) else: if args: for name in args: for verb_name in self.verbspace.verb_names: if verb_name == name.lower(): sys.stdout.write('\n') self._print_verb_help(verb_name) break else: utility.error('Verb "%s" was not found.' % name) self.usage() else: self.usage()
def help(self, *args, **kwargs): """ Display help for command. """ # The only valid keyword argument is 'all' for now. context = '%s.help()' % self.__class__.__name__ all = utility.kwargs_get_boolean(kwargs, 'all', default = False) if all: for verb_name in self.verbspace.verb_names: verb_spec = self.verbspace.verbs[verb_name].cli_spec if not verb_spec.baseverb and not verb_spec.hideverb: sys.stdout.write('\n===== Verb: %s =====\n\n' % verb_name) self._print_verb_help(verb_name) for verb_name in self.verbspace.verb_names: verb_spec = self.verbspace.verbs[verb_name].cli_spec if verb_spec.baseverb and not verb_spec.hideverb: sys.stdout.write('\n===== Common Verb: %s =====\n\n' % verb_name) self._print_verb_help(verb_name) else: if args: for name in args: for verb_name in self.verbspace.verb_names: if verb_name == name.lower(): sys.stdout.write('\n') self._print_verb_help(verb_name) break else: utility.error('Verb "%s" was not found.' % name) self.usage() else: self.usage()
def _abort(self, show_help, *msgs): if self.verb: utility.error('Fatal error in "%s" command.' % self.verb.name, *msgs) if show_help: self.verb_usage() else: utility.error(*msgs) if show_help: self.help() sys.exit(1)
def go(self, runner): mod_name = runner.opts.modifier.lower() for mod in self.modifiers: if mod.name == mod_name: mod.function(runner) break else: utility.error('Invalid "%s" modifier "%s". Valid modifiers are listed below:' % (self.name, mod_name), [mod.name for mod in self.modifiers]) runner.help(self.name)
def error(self, *msgs): """ Display ERROR level messages. """ utility.error(*msgs)
# All other arguments are treated as scalars. # Pass through argument class get() for validation, conversion, etc.. try: value = arg.get(args[iarg]) except ArgumentException, e: exceptions.append(e) iarg += 1 if value is not None or arg.min_count == 0: setattr(verb_opts, arg.name, value) # Run the gauntlet of error disclosure. Abort and display usage as appropriate. had_errors = 0 show_usage = False if exceptions: msg = 'Argument value %s:' % utility.pluralize( 'error', len(exceptions)) utility.error(msg, [str(e) for e in exceptions]) had_errors += 1 if iarg < len(args): self._abort('Extra arguments were provided:', args[iarg:]) had_errors += 1 show_usage = True if missing: fmt = '%%-%ds %%s' % max([len(o) for (o, h) in missing]) msg = 'Missing required %s:' % utility.pluralize( 'argument', len(missing)) utility.error(msg, [fmt % (o.upper(), h) for (o, h) in missing]) had_errors += 1 show_usage = True if had_errors > 0: if show_usage: self._abort()
else: # All other arguments are treated as scalars. # Pass through argument class get() for validation, conversion, etc.. try: value = arg.get(args[iarg]) except ArgumentException, e: exceptions.append(e) iarg += 1 if value is not None: setattr(verb_opts, arg.name, value) # Run the gauntlet of error disclosure. Abort and display usage as appropriate. had_errors = 0 show_usage = False if exceptions: msg = 'Argument value %s:' % utility.pluralize('error', len(exceptions)) utility.error(msg, [e.message for e in exceptions]) had_errors += 1 if iarg < len(args): self._abort('Extra arguments were provided:', args[iarg:]) had_errors += 1 show_usage = True if missing: fmt = '%%-%ds %%s' % max([len(o) for (o, h) in missing]) msg = 'Missing required %s:' % utility.pluralize('argument', len(missing)) utility.error(msg, [fmt % (o.upper(), h) for (o, h) in missing]) had_errors += 1 show_usage = True if had_errors > 0: if show_usage: self._abort() sys.exit(1)
def _abort(self, *msgs): utility.error(*msgs) sys.stdout.write('\n') self.print_help() sys.stdout.write('\n') sys.exit(1)
def go(self, verb, runner): if self.check_environment_config: incompatible_options = checkconfig.test_hard_requirements() for k,v in incompatible_options.items(): state = v[0] if state == 'PASS' : pass elif state == "WARN": utility.warning(v[1]) elif state == 'FAIL' : if k in checkconfig.skippableRequirements.keys() and runner.opts.skip_requirements and checkconfig.skippableRequirements[k] in runner.opts.skip_requirements: utility.warning(v[1]) else: utility.abort(v[1]) else: utility.error(v[1]) final_args = None if self.subcommand in ('create', 'recover'): if runner.opts.replica: final_args = [self.subcommand, 'replica'] if self.supports_live: if runner.opts.block: final_args = [self.subcommand] else: final_args = ['live', self.subcommand] elif final_args == None: final_args = [self.subcommand] if self.safemode_available: if runner.opts.safemode: final_args.extend(['safemode']) if self.needs_catalog: catalog = runner.opts.catalog if not catalog: catalog = runner.config.get('volt.catalog') if not catalog is None: final_args.extend(['catalog', catalog]) if runner.opts.deployment: final_args.extend(['deployment', runner.opts.deployment]) if runner.opts.placementgroup: final_args.extend(['placementgroup', runner.opts.placementgroup]) if runner.opts.host: final_args.extend(['host', runner.opts.host]) else: utility.abort('host is required.') if runner.opts.clientport: final_args.extend(['port', runner.opts.clientport]) if runner.opts.adminport: final_args.extend(['adminport', runner.opts.adminport]) if runner.opts.httpport: final_args.extend(['httpport', runner.opts.httpport]) if runner.opts.license: final_args.extend(['license', runner.opts.license]) if runner.opts.internalinterface: final_args.extend(['internalinterface', runner.opts.internalinterface]) if runner.opts.internalport: final_args.extend(['internalport', runner.opts.internalport]) if runner.opts.replicationport: final_args.extend(['replicationport', runner.opts.replicationport]) if runner.opts.zkport: final_args.extend(['zkport', runner.opts.zkport]) if runner.opts.externalinterface: final_args.extend(['externalinterface', runner.opts.externalinterface]) if runner.opts.publicinterface: final_args.extend(['publicinterface', runner.opts.publicinterface]) if self.subcommand in ('create'): if runner.opts.new: final_args.extend(['new']) if runner.args: final_args.extend(runner.args) kwargs = {} if self.supports_daemon and runner.opts.daemon: # Provide a default description if not specified. daemon_description = self.daemon_description if daemon_description is None: daemon_description = "VoltDB server" # Initialize all the daemon-related keyword arguments. runner.setup_daemon_kwargs(kwargs, name=self.daemon_name, description=daemon_description, output=self.daemon_output) else: # Replace the Python process. kwargs['exec'] = True self.run_java(verb, runner, *final_args, **kwargs)
def go(self, verb, runner): if self.check_environment_config: incompatible_options = checkconfig.test_hard_requirements() for k,v in list(incompatible_options.items()): state = v[0] if state == 'PASS' : pass elif state == "WARN": utility.warning(v[1]) elif state == 'FAIL' : if k in list(checkconfig.skippableRequirements.keys()) and runner.opts.skip_requirements and checkconfig.skippableRequirements[k] in runner.opts.skip_requirements: utility.warning(v[1]) else: utility.abort(v[1]) else: utility.error(v[1]) final_args = [self.subcommand] if self.safemode_available and runner.opts.safemode: final_args.extend(['safemode']) if runner.opts.placementgroup: final_args.extend(['placementgroup', runner.opts.placementgroup]) if runner.opts.clientport: final_args.extend(['port', runner.opts.clientport]) if runner.opts.adminport: final_args.extend(['adminport', runner.opts.adminport]) if runner.opts.httpport: final_args.extend(['httpport', runner.opts.httpport]) if runner.opts.statusport: final_args.extend(['statusport', runner.opts.statusport]) if runner.opts.license: final_args.extend(['license', runner.opts.license]) if runner.opts.internalinterface: final_args.extend(['internalinterface', runner.opts.internalinterface]) if runner.opts.internalport: final_args.extend(['internalport', runner.opts.internalport]) if runner.opts.replicationport: final_args.extend(['replicationport', runner.opts.replicationport]) if runner.opts.zkport: final_args.extend(['zkport', runner.opts.zkport]) if runner.opts.externalinterface: final_args.extend(['externalinterface', runner.opts.externalinterface]) if runner.opts.publicinterface: final_args.extend(['publicinterface', runner.opts.publicinterface]) if runner.opts.drpublic: final_args.extend(['drpublic', runner.opts.drpublic]) if runner.opts.topicsport: final_args.extend(('topicsHostPort', runner.opts.topicsport)) if runner.opts.topicspublic: final_args.extend(('topicspublic', runner.opts.topicspublic)) if self.supports_paused and runner.opts.paused: final_args.extend(['paused']) if runner.args: final_args.extend(runner.args) kwargs = {} if self.supports_daemon and runner.opts.daemon: # Provide a default description if not specified. daemon_description = self.daemon_description if daemon_description is None: daemon_description = "VoltDB server" # Initialize all the daemon-related keyword arguments. runner.setup_daemon_kwargs(kwargs, name=self.daemon_name, description=daemon_description, output=self.daemon_output) else: # Replace the Python process. kwargs['exec'] = True self.run_java(verb, runner, *final_args, **kwargs)
def process_verb_arguments(self, verb, verb_args, verb_opts): """ Validate the verb arguments. Check that required arguments are present and populate verb_opts attributes with scalar values or lists (for trailing arguments with max_count > 1). """ # Add fixed arguments passed in through the decorator to the verb object. args = copy.copy(verb_args) + verb.command_arguments # Set attributes for required arguments. missing = [] exceptions = [] iarg = 0 nargs = verb.get_argument_count() for arg in verb.iter_arguments(): # It's missing if we've exhausted all the arguments before # exhausting all the argument specs, unless it's the last argument # spec and it's optional. if iarg > len(args) or (iarg == len(args) and arg.min_count > 0): if not arg.optional: missing.append((arg.name, arg.help)) else: setattr(verb_opts, arg.name, None) iarg += 1 else: value = None # The last argument can have repeated arguments. If more than # one are allowed the values are put into a list. if iarg == nargs - 1 and arg.max_count > 1: if len(args) - iarg < arg.min_count: utility.abort( 'A minimum of %d %s arguments are required.' % (arg.min_count, arg.name.upper())) if len(args) - iarg > arg.max_count: utility.abort( 'A maximum of %d %s arguments are allowed.' % (arg.max_count, arg.name.upper())) # Pass through argument class get() for validation, conversion, etc.. # Skip bad values and report on them at the end. value = [] for v in args[iarg:]: try: value.append(arg.get(v)) except ArgumentException as e: exceptions.append(e) iarg = len(args) elif len(args) > 0: # All other arguments are treated as scalars. # Pass through argument class get() for validation, conversion, etc.. try: value = arg.get(args[iarg]) except ArgumentException as e: exceptions.append(e) iarg += 1 if value is not None or arg.min_count == 0: setattr(verb_opts, arg.name, value) # Run the gauntlet of error disclosure. Abort and display usage as appropriate. had_errors = 0 show_usage = False if exceptions: msg = 'Argument value %s:' % utility.pluralize( 'error', len(exceptions)) utility.error(msg, [str(e) for e in exceptions]) had_errors += 1 if iarg < len(args): self._abort('Extra arguments were provided:', args[iarg:]) had_errors += 1 show_usage = True if missing: fmt = '%%-%ds %%s' % max([len(o) for (o, h) in missing]) msg = 'Missing required %s:' % utility.pluralize( 'argument', len(missing)) utility.error(msg, [fmt % (o.upper(), h) for (o, h) in missing]) had_errors += 1 show_usage = True if had_errors > 0: if show_usage: self._abort() sys.exit(1)
# All other arguments are treated as scalars. # Pass through argument class get() for validation, conversion, etc.. try: value = arg.get(args[iarg]) except ArgumentException, e: exceptions.append(e) iarg += 1 if value is not None: setattr(verb_opts, arg.name, value) # Run the gauntlet of error disclosure. Abort and display usage as appropriate. had_errors = 0 show_usage = False if exceptions: msg = 'Argument value %s:' % utility.pluralize( 'error', len(exceptions)) utility.error(msg, [e.message for e in exceptions]) had_errors += 1 if iarg < len(args): self._abort('Extra arguments were provided:', args[iarg:]) had_errors += 1 show_usage = True if missing: fmt = '%%-%ds %%s' % max([len(o) for (o, h) in missing]) msg = 'Missing required %s:' % utility.pluralize( 'argument', len(missing)) utility.error(msg, [fmt % (o.upper(), h) for (o, h) in missing]) had_errors += 1 show_usage = True if had_errors > 0: if show_usage: self._abort()
elif len(args) > 0: # All other arguments are treated as scalars. # Pass through argument class get() for validation, conversion, etc.. try: value = arg.get(args[iarg]) except ArgumentException, e: exceptions.append(e) iarg += 1 if value is not None or arg.min_count == 0: setattr(verb_opts, arg.name, value) # Run the gauntlet of error disclosure. Abort and display usage as appropriate. had_errors = 0 show_usage = False if exceptions: msg = 'Argument value %s:' % utility.pluralize('error', len(exceptions)) utility.error(msg, [str(e) for e in exceptions]) had_errors += 1 if iarg < len(args): self._abort('Extra arguments were provided:', args[iarg:]) had_errors += 1 show_usage = True if missing: fmt = '%%-%ds %%s' % max([len(o) for (o, h) in missing]) msg = 'Missing required %s:' % utility.pluralize('argument', len(missing)) utility.error(msg, [fmt % (o.upper(), h) for (o, h) in missing]) had_errors += 1 show_usage = True if had_errors > 0: if show_usage: self._abort() sys.exit(1)
def _abort(self, *msgs): utility.error(*msgs) sys.stdout.write('\n') self.print_help() sys.exit(1)
def go(self, verb, runner): if self.check_environment_config: incompatible_options = checkconfig.test_hard_requirements() for k, v in incompatible_options.items(): state = v[0] if state == 'PASS': pass elif state == "WARN": utility.warning(v[1]) elif state == 'FAIL': if k in checkconfig.skippableRequirements.keys( ) and runner.opts.skip_requirements and checkconfig.skippableRequirements[ k] in runner.opts.skip_requirements: utility.warning(v[1]) else: utility.abort(v[1]) else: utility.error(v[1]) final_args = None if self.subcommand in ('create', 'recover', 'probe'): if runner.opts.replica: final_args = [self.subcommand, 'replica'] if self.supports_live: if runner.opts.block: final_args = [self.subcommand] else: final_args = ['live', self.subcommand] elif final_args == None: final_args = [self.subcommand] if self.safemode_available: if runner.opts.safemode: final_args.extend(['safemode']) if self.needs_catalog: catalog = runner.opts.catalog if not catalog: catalog = runner.config.get('volt.catalog') if not catalog is None: final_args.extend(['catalog', catalog]) if self.is_legacy_verb and runner.opts.deployment: final_args.extend(['deployment', runner.opts.deployment]) if runner.opts.placementgroup: final_args.extend(['placementgroup', runner.opts.placementgroup]) if self.is_legacy_verb and runner.opts.host: final_args.extend(['host', runner.opts.host]) elif not self.subcommand in ('initialize', 'probe'): utility.abort('host is required.') if runner.opts.clientport: final_args.extend(['port', runner.opts.clientport]) if runner.opts.adminport: final_args.extend(['adminport', runner.opts.adminport]) if runner.opts.httpport: final_args.extend(['httpport', runner.opts.httpport]) if runner.opts.statusport: final_args.extend(['statusport', runner.opts.statusport]) if runner.opts.license: final_args.extend(['license', runner.opts.license]) if runner.opts.internalinterface: final_args.extend( ['internalinterface', runner.opts.internalinterface]) if runner.opts.internalport: final_args.extend(['internalport', runner.opts.internalport]) if runner.opts.replicationport: final_args.extend(['replicationport', runner.opts.replicationport]) if runner.opts.zkport: final_args.extend(['zkport', runner.opts.zkport]) if runner.opts.externalinterface: final_args.extend( ['externalinterface', runner.opts.externalinterface]) if runner.opts.publicinterface: final_args.extend(['publicinterface', runner.opts.publicinterface]) if runner.opts.drpublic: final_args.extend(['drpublic', runner.opts.drpublic]) if runner.opts.topicsport: final_args.extend(('topicsHostPort', runner.opts.topicsport)) if self.subcommand in ('create', 'initialize'): if runner.opts.force: final_args.extend(['force']) if self.subcommand in ('create', 'probe', 'recover'): if runner.opts.paused: final_args.extend(['paused']) if runner.args: final_args.extend(runner.args) kwargs = {} if self.supports_daemon and runner.opts.daemon: # Provide a default description if not specified. daemon_description = self.daemon_description if daemon_description is None: daemon_description = "VoltDB server" # Initialize all the daemon-related keyword arguments. runner.setup_daemon_kwargs(kwargs, name=self.daemon_name, description=daemon_description, output=self.daemon_output) else: # Replace the Python process. kwargs['exec'] = True self.run_java(verb, runner, *final_args, **kwargs)
def go(self, verb, runner): if self.check_environment_config: incompatible_options = checkconfig.test_hard_requirements() for k, v in incompatible_options.items(): state = v[0] if state == "PASS": pass elif state == "WARN": utility.warning(v[1]) elif state == "FAIL": if ( k in checkconfig.skippableRequirements.keys() and runner.opts.skip_requirements and checkconfig.skippableRequirements[k] in runner.opts.skip_requirements ): utility.warning(v[1]) else: utility.abort(v[1]) else: utility.error(v[1]) final_args = None if self.subcommand in ("create", "recover"): if runner.opts.replica: final_args = [self.subcommand, "replica"] if self.supports_live: if runner.opts.block: final_args = [self.subcommand] else: final_args = ["live", self.subcommand] elif final_args == None: final_args = [self.subcommand] if self.safemode_available: if runner.opts.safemode: final_args.extend(["safemode"]) if self.needs_catalog: catalog = runner.opts.catalog if not catalog: catalog = runner.config.get("volt.catalog") if not catalog is None: final_args.extend(["catalog", catalog]) if runner.opts.deployment: final_args.extend(["deployment", runner.opts.deployment]) if runner.opts.placementgroup: final_args.extend(["placementgroup", runner.opts.placementgroup]) if runner.opts.host: final_args.extend(["host", runner.opts.host]) else: utility.abort("host is required.") if runner.opts.clientport: final_args.extend(["port", runner.opts.clientport]) if runner.opts.adminport: final_args.extend(["adminport", runner.opts.adminport]) if runner.opts.httpport: final_args.extend(["httpport", runner.opts.httpport]) if runner.opts.license: final_args.extend(["license", runner.opts.license]) if runner.opts.internalinterface: final_args.extend(["internalinterface", runner.opts.internalinterface]) if runner.opts.internalport: final_args.extend(["internalport", runner.opts.internalport]) if runner.opts.replicationport: final_args.extend(["replicationport", runner.opts.replicationport]) if runner.opts.zkport: final_args.extend(["zkport", runner.opts.zkport]) if runner.opts.externalinterface: final_args.extend(["externalinterface", runner.opts.externalinterface]) if runner.opts.publicinterface: final_args.extend(["publicinterface", runner.opts.publicinterface]) if runner.args: final_args.extend(runner.args) kwargs = {} if self.supports_daemon and runner.opts.daemon: # Provide a default description if not specified. daemon_description = self.daemon_description if daemon_description is None: daemon_description = "VoltDB server" # Initialize all the daemon-related keyword arguments. runner.setup_daemon_kwargs( kwargs, name=self.daemon_name, description=daemon_description, output=self.daemon_output ) else: # Replace the Python process. kwargs["exec"] = True self.run_java(verb, runner, *final_args, **kwargs)