rules/terraform_module_provider_declaration.go (61 lines of code) (raw):

package rules import ( "github.com/hashicorp/go-multierror" "github.com/hashicorp/hcl/v2" "github.com/hashicorp/hcl/v2/hclsyntax" "github.com/terraform-linters/tflint-plugin-sdk/logger" "github.com/terraform-linters/tflint-plugin-sdk/tflint" ) var _ tflint.Rule = &TerraformModuleProviderDeclarationRule{} // TerraformModuleProviderDeclarationRule checks whether local variables are sorted in alphabetic order type TerraformModuleProviderDeclarationRule struct { tflint.DefaultRule } // NewTerraformModuleProviderDeclarationRule returns a new rule func NewTerraformModuleProviderDeclarationRule() *TerraformModuleProviderDeclarationRule { return &TerraformModuleProviderDeclarationRule{} } func (r *TerraformModuleProviderDeclarationRule) Enabled() bool { return false } func (r *TerraformModuleProviderDeclarationRule) Check(runner tflint.Runner) error { return ForFiles(runner, r.CheckFile) } // Name returns the rule name func (r *TerraformModuleProviderDeclarationRule) Name() string { return "terraform_module_provider_declaration" } // Severity returns the rule severity func (r *TerraformModuleProviderDeclarationRule) Severity() tflint.Severity { return tflint.WARNING } func (r *TerraformModuleProviderDeclarationRule) CheckFile(runner tflint.Runner, file *hcl.File) error { body, ok := file.Body.(*hclsyntax.Body) if !ok { logger.Debug("skip terraform_module_provider_declaration since it's not hcl file") return nil } blocks := body.Blocks var err error for _, block := range blocks { switch block.Type { case "provider": isProviderErrorUsage := false if len(block.Body.Attributes) != 1 { isProviderErrorUsage = true } else if _, isAliasDeclared := block.Body.Attributes["alias"]; !isAliasDeclared { isProviderErrorUsage = true } if len(block.Body.Blocks) > 0 { isProviderErrorUsage = true } if isProviderErrorUsage { subErr := runner.EmitIssue( r, "Provider block in terraform module is expected to have and only have `alias` declared", block.DefRange(), ) if subErr != nil { err = multierror.Append(err, subErr) } } } } return err }