in src/cfnlint/config.py [0:0]
def create_parser(self):
"""Do first round of parsing parameters to set options"""
class ArgumentParser(argparse.ArgumentParser):
""" Override Argument Parser so we can control the exit code"""
def error(self, message):
self.print_help(sys.stderr)
self.exit(32, '%s: error: %s\n' % (self.prog, message))
class ExtendAction(argparse.Action):
"""Support argument types that are lists and can be specified multiple times."""
def __call__(self, parser, namespace, values, option_string=None):
items = getattr(namespace, self.dest)
items = [] if items is None else items
for value in values:
if isinstance(value, list):
items.extend(value)
else:
items.append(value)
setattr(namespace, self.dest, items)
usage = (
'\nBasic: cfn-lint test.yaml\n'
'Ignore a rule: cfn-lint -i E3012 -- test.yaml\n'
'Configure a rule: cfn-lint -x E3012:strict=false -t test.yaml\n'
'Lint all yaml files in a folder: cfn-lint dir/**/*.yaml'
)
parser = ArgumentParser(
description='CloudFormation Linter',
usage=usage)
parser.register('action', 'extend', ExtendAction)
standard = parser.add_argument_group('Standard')
advanced = parser.add_argument_group('Advanced / Debugging')
# Allow the template to be passes as an optional or a positional argument
standard.add_argument(
'templates', metavar='TEMPLATE', nargs='*', help='The CloudFormation template to be linted')
standard.add_argument(
'-t', '--template', metavar='TEMPLATE', dest='template_alt',
help='The CloudFormation template to be linted', nargs='+', default=[], action='extend')
standard.add_argument(
'-b', '--ignore-bad-template', help='Ignore failures with Bad template',
action='store_true'
)
standard.add_argument(
'--ignore-templates', dest='ignore_templates',
help='Ignore templates', nargs='+', default=[], action='extend'
)
advanced.add_argument(
'-D', '--debug', help='Enable debug logging', action='store_true'
)
advanced.add_argument(
'-I', '--info', help='Enable information logging', action='store_true'
)
standard.add_argument(
'-f', '--format', help='Output Format', choices=['quiet', 'parseable', 'json', 'junit', 'pretty', 'sarif']
)
standard.add_argument(
'-l', '--list-rules', dest='listrules', default=False,
action='store_true', help='list all the rules'
)
standard.add_argument(
'-r', '--regions', dest='regions', nargs='+', default=[],
type=comma_separated_arg, action='extend',
help='list the regions to validate against.'
)
advanced.add_argument(
'-a', '--append-rules', dest='append_rules', nargs='+', default=[],
type=comma_separated_arg, action='extend',
help='specify one or more rules directories using '
'one or more --append-rules arguments. '
)
standard.add_argument(
'-i', '--ignore-checks', dest='ignore_checks', nargs='+', default=[],
type=comma_separated_arg, action='extend',
help='only check rules whose id do not match these values'
)
standard.add_argument(
'-c', '--include-checks', dest='include_checks', nargs='+', default=[],
type=comma_separated_arg, action='extend',
help='include rules whose id match these values'
)
standard.add_argument(
'-m', '--mandatory-checks', dest='mandatory_checks', nargs='+', default=[],
type=comma_separated_arg, action='extend',
help='always check rules whose id match these values, regardless of template exclusions'
)
standard.add_argument(
'-e', '--include-experimental', help='Include experimental rules', action='store_true'
)
standard.add_argument(
'-x', '--configure-rule', dest='configure_rules', nargs='+', default={},
action=RuleConfigurationAction,
help='Provide configuration for a rule. Format RuleId:key=value. Example: E3012:strict=false'
)
standard.add_argument('--config-file', dest='config_file',
help='Specify the cfnlintrc file to use')
standard.add_argument(
'-z', '--custom-rules', dest='custom_rules',
help='Allows specification of a custom rule file.'
)
advanced.add_argument(
'-o', '--override-spec', dest='override_spec',
help='A CloudFormation Spec override file that allows customization'
)
advanced.add_argument(
'-g', '--build-graph', help='Creates a file in the same directory as the template that models the template\'s resources in DOT format', action='store_true'
)
advanced.add_argument(
'-s', '--registry-schemas', help='one or more directories of CloudFormation Registry Schemas', action='extend', type=comma_separated_arg, nargs='+'
)
standard.add_argument(
'-v', '--version', help='Version of cfn-lint', action='version',
version='%(prog)s {version}'.format(version=__version__)
)
advanced.add_argument(
'-u', '--update-specs', help='Update the CloudFormation Specs',
action='store_true'
)
advanced.add_argument(
'--update-documentation', help=argparse.SUPPRESS,
action='store_true'
)
advanced.add_argument(
'--update-iam-policies', help=argparse.SUPPRESS,
action='store_true'
)
standard.add_argument(
'--output-file', type=str, default=None,
help='Writes the output to the specified file, ideal for producing reports'
)
standard.add_argument(
'--merge-configs', default=False, action='store_true',
help='Merges lists between configuration layers'
)
return parser