awslabs / serverless-rules

Compilation of rules to validate infrastructure-as-code templates against recommended practices for serverless applications.
https://awslabs.github.io/serverless-rules/
MIT No Attribution
403 stars 25 forks source link

Plugin is not compatible with newer versions of TFLint #149

Open dougireton opened 2 years ago

dougireton commented 2 years ago

What were you trying to accomplish?

Running tflint with the serverless-rules installed

Expected Behavior

TFLint works with this plugin

Current Behavior

Failed to initialize plugins; Incompatible API version with plugin "aws-serverless". Plugin version: 9, TFLint versions: [10]

Possible Solution

Steps to Reproduce (for bugs)

  1. Install newest version of tflint 0.35.0
  2. Add plugin "aws-serverless" to your .tflint.hcl file.
  3. Run tflint in a Terraform repo

Environment

MacOS

TFLint version 0.35.0

.tflint.hcl file

config {
  module = true
}

plugin "aws" {
  enabled = true
  version = "0.13.2"
  source  = "github.com/terraform-linters/tflint-ruleset-aws"
}

plugin "aws-serverless" {
  enabled = true
  version = "0.3.2"
  source = "github.com/awslabs/serverless-rules"
}
❯ tflint --loglevel=debug
17:17:02 config.go:110: [INFO] Load config: .tflint.hcl
17:17:02 config.go:365: [DEBUG] Config loaded
17:17:02 config.go:366: [DEBUG]   Module: true
17:17:02 config.go:367: [DEBUG]   Force: false
17:17:02 config.go:368: [DEBUG]   IgnoreModules: map[string]bool{}
17:17:02 config.go:369: [DEBUG]   Varfiles: []string{}
17:17:02 config.go:370: [DEBUG]   Variables: []string{}
17:17:02 config.go:371: [DEBUG]   DisabledByDefault: false
17:17:02 config.go:372: [DEBUG]   PluginDir:
17:17:02 config.go:373: [DEBUG]   Rules: map[string]*tflint.RuleConfig{}
17:17:02 config.go:374: [DEBUG]   Plugins: map[string]*tflint.PluginConfig{"aws":(*tflint.PluginConfig)(0xc000181500), "aws-serverless":(*tflint.PluginConfig)(0xc000181580)}
17:17:02 option.go:49: [DEBUG] CLI Options
17:17:02 option.go:50: [DEBUG]   Module: false
17:17:02 option.go:51: [DEBUG]   Force: false
17:17:02 option.go:52: [DEBUG]   IgnoreModules: map[string]bool{}
17:17:02 option.go:53: [DEBUG]   EnableRules: []string(nil)
17:17:02 option.go:54: [DEBUG]   DisableRules: []string(nil)
17:17:02 option.go:55: [DEBUG]   Only: []string(nil)
17:17:02 option.go:56: [DEBUG]   EnablePlugins: []string(nil)
17:17:02 option.go:57: [DEBUG]   Varfiles: []string{}
17:17:02 option.go:58: [DEBUG]   Variables: []string{}
17:17:02 loader.go:57: [INFO] Initialize new loader
17:17:02 loader.go:68: [INFO] Module manifest file found. Initializing...
17:17:02 loader.go:291: [DEBUG] Parsing the module manifest file: {"Modules":[{"Key":"","Source":"","Dir":"."},{"Key":"vpn_instance","Source":"registry.terraform.io/terraform-aws-modules/ec2-instance/aws","Version":"3.5.0","Dir":".terraform/modules/vpn_instance"}]}
17:17:02 loader.go:82: [INFO] Load configurations under .
17:17:02 loader.go:97: [INFO] Module inspection is enabled. Building a root module with children...
17:17:02 loader.go:273: [DEBUG] Trying to load the module: key=module.vpn_instance, version=3.5.0, dir=.terraform/modules/vpn_instance
17:17:02 loader.go:170: [INFO] Load values files
17:17:02 runner.go:58: [INFO] Initialize new runner for root
17:17:02 terraform.go:79: [INFO] environment file found: network-infrastructure-staging
17:17:02 runner.go:223: [DEBUG] `vpc_security_group_ids` has been marked as unknown
17:17:02 runner.go:223: [DEBUG] `ami` has been marked as unknown
17:17:02 runner.go:223: [DEBUG] `subnet_id` has been marked as unknown
17:17:02 runner.go:223: [DEBUG] `iam_instance_profile` has been marked as unknown
17:17:02 runner.go:223: [DEBUG] `user_data` has been marked as unknown
17:17:02 runner.go:223: [DEBUG] `volume_tags` has been marked as unknown
17:17:02 runner.go:58: [INFO] Initialize new runner for module.vpn_instance
17:17:02 terraform.go:79: [INFO] environment file found: network-infrastructure-staging
17:17:02 runner_eval.go:40: [INFO] unevaluable expression found in .terraform/modules/vpn_instance/main.tf:8. TFLint ignores unevaluable expressions.
17:17:02 runner_eval.go:40: [INFO] unevaluable expression found in .terraform/modules/vpn_instance/main.tf:141. TFLint ignores unevaluable expressions.
17:17:02 discovery.go:79: [DEBUG] Find plugin path: /Users/doug/.tflint.d/plugins/github.com/terraform-linters/tflint-ruleset-aws/0.13.2/tflint-ruleset-aws
17:17:02 discovery.go:43: [INFO] Plugin `aws` found
17:17:02 discovery.go:79: [DEBUG] Find plugin path: /Users/doug/.tflint.d/plugins/github.com/awslabs/serverless-rules/0.3.2/tflint-ruleset-aws-serverless
17:17:02 discovery.go:43: [INFO] Plugin `aws-serverless` found

Failed to initialize plugins; Incompatible API version with plugin "aws-serverless". Plugin version: 9, TFLint versions: [10]
nmoutschen commented 2 years ago

Hey Doug!

Thanks a lot for creating this issue!

Just to give you an update, TFLint made some major changes to their plugin APIs, which will require some significant rewrite for all of the rules on this project, so it might take a few weeks to rewrite those using the new API version.

jameshalsall commented 1 year ago

Any progress update on this?