docs: def _setup_arg_parser(args_list, watcher_plugin_class, health_plugin_class):
      """
      Configure and return the argument parser for the command line options.
  
      If a watcher and/or health-monitor plugin_class is provided then call the
      add_arguments() callback of the plugin class(es), in order to add plugin
      specific options.
  
      Some parameters are required (vpc and region, for example), but we may be
      able to discover them automatically, later on. Therefore, we allow them to
      remain unset on the command line. We will have to complain about those
      parameters missing later on, if the auto discovery fails.
  
      The args_list (from sys.argv) is passed in, since some plugins have to do
      their own ad-hoc extraction of certain parameters in order to add things
      to the official parameter list.
  
      Return parser and the conf-name of all the arguments that have been added.
  
      """
      parser = argparse.ArgumentParser(
                      description="VPC router: Manage routes in VPC route table")
      # General arguments
      parser.add_argument('--verbose', dest="verbose", action='store_true',
                          help="produces more output")
      parser.add_argument('-l', '--logfile', dest='logfile',
                          default='-',
                          help="full path name for the logfile, "
                               "or '-' for logging to stdout, "
                               "default: '-' (logging to stdout)"),
      parser.add_argument('-r', '--region', dest="region_name",
                          required=False, default=None,
                          help="the AWS region of the VPC")
      parser.add_argument('-v', '--vpc', dest="vpc_id",
                          required=False, default=None,
                          help="the ID of the VPC in which to operate")
      parser.add_argument('--ignore_routes', dest="ignore_routes",
                          required=False, default=None,
                          help="Comma separated list of CIDRs or IPs for "
                               "routes which vpc-router should ignore.")
      parser.add_argument('--route_recheck_interval',
                          dest="route_recheck_interval",
                          required=False, default="30", type=int,
                          help="time between regular checks of VPC route "
                               "tables, default: 30")
      parser.add_argument('-a', '--address', dest="addr",
                          default="localhost",
                          help="address to listen on for HTTP requests, "
                               "default: localhost")
      parser.add_argument('-p', '--port', dest="port",
                          default="33289", type=int,
                          help="port to listen on for HTTP requests, "
                               "default: 33289")
      parser.add_argument('-m', '--mode', dest='mode', required=True,
                          help="name of the watcher plugin")
      parser.add_argument('-H', '--health', dest='health', required=False,
                          default=monitor.MONITOR_DEFAULT_PLUGIN,
                          help="name of the health-check plugin, "
                               "default: %s" % monitor.MONITOR_DEFAULT_PLUGIN)
  
      arglist = ["logfile", "region_name", "vpc_id", "route_recheck_interval",
                 "verbose", "addr", "port", "mode", "health", "ignore_routes"]
  
      # Inform the CurrentState object of the main config parameter names, which
      # should be rendered in an overview.
      CURRENT_STATE.main_param_names = list(arglist)
  
      # Let each watcher and health-monitor plugin add its own arguments.
      for plugin_class in [watcher_plugin_class, health_plugin_class]:
          if plugin_class:
              arglist.extend(plugin_class.add_arguments(parser, args_list))
  
      return parser, arglist