cfn-lint icon indicating copy to clipboard operation
cfn-lint copied to clipboard

ignore_templates is not working from .cfnlintrc file

Open KarthickEmis opened this issue 6 years ago • 4 comments

*cfn-lint version: 0.21.0

Description of issue.

  • ignore_templates is not working from .cfnlintrc file. Used .cfnlintrc file to ignore templates , but it is not working . It throws below error
AWS CloudFormation Linter................................................Failed
hookid: cfn-python-lint

usage: cfn-lint [-h] [-t TEMPLATE [TEMPLATE ...]] [-b]
                [--ignore-templates IGNORE_TEMPLATES [IGNORE_TEMPLATES ...]]
                [-d] [-f {quiet,parseable,json}] [-l]
                [-r REGIONS [REGIONS ...]]
                [-a APPEND_RULES [APPEND_RULES ...]]
                [-i IGNORE_CHECKS [IGNORE_CHECKS ...]]
                [-c INCLUDE_CHECKS [INCLUDE_CHECKS ...]] [-e]
                [-x CONFIGURE_RULES [CONFIGURE_RULES ...]] [-o OVERRIDE_SPEC]
                [-v] [-u]
                [TEMPLATE [TEMPLATE ...]]

CloudFormation Linter

optional arguments:
  -h, --help            show this help message and exit

Standard:
  TEMPLATE              The CloudFormation template to be linted
  -t TEMPLATE [TEMPLATE ...], --template TEMPLATE [TEMPLATE ...]
                        The CloudFormation template to be linted
  -b, --ignore-bad-template
                        Ignore failures with Bad template
  --ignore-templates IGNORE_TEMPLATES [IGNORE_TEMPLATES ...]
                        Ignore templates
  -f {quiet,parseable,json}, --format {quiet,parseable,json}
                        Output Format
  -l, --list-rules      list all the rules
  -r REGIONS [REGIONS ...], --regions REGIONS [REGIONS ...]
                        list the regions to validate against.
  -i IGNORE_CHECKS [IGNORE_CHECKS ...], --ignore-checks IGNORE_CHECKS [IGNORE_CHECKS ...]
                        only check rules whose id do not match these values
  -c INCLUDE_CHECKS [INCLUDE_CHECKS ...], --include-checks INCLUDE_CHECKS [INCLUDE_CHECKS ...]
                        include rules whose id match these values
  -e, --include-experimental
                        Include experimental rules
  -x CONFIGURE_RULES [CONFIGURE_RULES ...], --configure-rule CONFIGURE_RULES [CONFIGURE_RULES ...]
                        Provide configuration for a rule. Format
                        RuleId:key=value. Example: E3012:strict=false
  -v, --version         Version of cfn-lint

Advanced / Debugging:
  -d, --debug           Enable debug logging
  -a APPEND_RULES [APPEND_RULES ...], --append-rules APPEND_RULES [APPEND_RULES ...]
                        specify one or more rules directories using one or
                        more --append-rules arguments.
  -o OVERRIDE_SPEC, --override-spec OVERRIDE_SPEC
                        A CloudFormation Spec override file that allows
                        customization
  -u, --update-specs    Update the CloudFormation Specs

KarthickEmis avatar Jun 27 '19 07:06 KarthickEmis

Can you share your .cfnlintrc? Here is ours, which works:

templates:
  - templates/**/*.yaml
  - templates/*.yaml
append_rules:
  - append_rules
ignore_templates:
  - templates/app/env/*/app_env.yaml
  - templates/app/env/*/rpc_env.yaml

cmmeyer avatar Jun 27 '19 14:06 cmmeyer

Below is the .cfnlintrc file from my repo

templates:
  - Solutions/SNSFlow/*Flow.yaml
append_rules:
  - append_rules
ignore_templates:
  - Solutions/SNSFlow/buildspec.yaml
  - Solutions/SNSFlow/test.yaml
  - Solutions/SNSFlow/parameters-test.json
  - Solutions/SNSFlow/pipeline/test-parameters.json

Below is the .pre-commit-config.yaml file from my repo

# .pre-commit-config.yaml
repos:
-   repo: https://github.com/awslabs/cfn-python-lint
    rev: v0.16.0 # The version of cfn-lint to use
    hooks:
    -   id: cfn-python-lint 
        files: Solutions/.*\.(json|yml|yaml)$ 
        args: [--append-rules=./cfnrules/, --override-spec=./spec.json]

Below is the link of my repo for your reference https://github.com/karthickcse05/cfnlint-testing.git

Note:

  • I added Solutions/SNSFlow/buildspec.yaml in ignore_templates section , it is working as expected . But when i add the below lines
  • Solutions/SNSFlow/parameters-test.json
    • Solutions/SNSFlow/pipeline/test-parameters.json , it is not working and throwing the above error with no details.
  • If i remove the above two lines , lint is executing(considering) the json file also.

karthickcse05 avatar Jun 28 '19 05:06 karthickcse05

@chuckmeyer thoughts on this?

I think the issue here is that pre-commit must exist cfn-lint with each filename that has changed that meets the pattern. However, if .cfnlintrc says to ignore Solutions/SNSFlow/parameters-test.json it gets filtered out from the and basically makes the file list empty. I believe that is why we throw a usage error. I'm not sure what the correct type of failure (or success) is here.

@KarthickEmis I wonder if in the short term you should add the exclude patterns to the pre commit hook so that it gets filtered out before .cfnlintrc is even used.

kddejong avatar Jul 10 '19 01:07 kddejong

I have a thought here. I think we should change. .pre-commit-hooks.yaml to have pass_filenames: false

Then we update the .pre-commit-config.yaml to be

repos:
-   repo: https://github.com/aws-cloudformation/cfn-python-lint
    rev: v0.42.0
    hooks:
    -   id: cfn-python-lint
        args:
        - --config-file
        - .cfnlintrc

or

repos:
-   repo: https://github.com/aws-cloudformation/cfn-python-lint
    rev: v0.42.0
    hooks:
    -   id: cfn-python-lint
        args:
        - --templates
        - **.*yaml

@PatMyron

kddejong avatar Nov 25 '20 21:11 kddejong

We are updating our guidance here based on the PR above. pass_filenames: false will prevent pre-commit from passing all the filenames into cfn-lint. Since you are specifying the templates section in your .cfnlintrc file the result should be the equivalent of running cfn-lint from the root project folder.

repos:
-   repo: https://github.com/aws-cloudformation/cfn-lint
    rev: v0.69.1 # The version of cfn-lint to use
    hooks:
    -   id: cfn-python-lint 
        pass_filenames: false
        args: [--append-rules=./cfnrules/, --override-spec=./spec.json]

kddejong avatar Oct 26 '22 17:10 kddejong