rules/terraform_tf.go (53 lines of code) (raw):
package rules
import (
"github.com/hashicorp/hcl/v2"
"github.com/hashicorp/hcl/v2/hclsyntax"
"github.com/terraform-linters/tflint-plugin-sdk/tflint"
"strings"
)
var _ tflint.Rule = new(TerraformDotTfRule)
type TerraformDotTfRule struct {
tflint.DefaultRule
}
func NewTerraformDotTfRule() *TerraformDotTfRule {
return new(TerraformDotTfRule)
}
func (t *TerraformDotTfRule) Name() string {
return "tfnfr26"
}
func (t *TerraformDotTfRule) Link() string {
return "https://azure.github.io/Azure-Verified-Modules/specs/terraform/#id-tfnfr26---category-code-style---providers-must-be-declared-in-the-required_providers-block-in-terraformtf-and-must-have-a-constraint-on-minimum-and-maximum-major-version"
}
func (t *TerraformDotTfRule) Enabled() bool {
return false
}
func (t *TerraformDotTfRule) Severity() tflint.Severity {
return tflint.ERROR
}
func (t *TerraformDotTfRule) Check(r tflint.Runner) error {
tFile, err := r.GetFile("terraform.tf")
if err != nil {
if strings.Contains(err.Error(), "file not found") {
return r.EmitIssue(t, "All avm Terraform modules must contain `terraform.tf` file", hcl.Range{})
}
return err
}
if tFile == nil {
return r.EmitIssue(t, "All avm Terraform modules must contain `terraform.tf` file", hcl.Range{})
}
body, ok := tFile.Body.(*hclsyntax.Body)
if !ok {
return nil
}
terraformBlockFound := false
for _, b := range body.Blocks {
if b.Type != "terraform" {
return r.EmitIssue(t, "`terraform.tf` file must contain `terraform` block only", body.Range())
}
terraformBlockFound = true
}
if !terraformBlockFound {
return r.EmitIssue(t, "`terraform.tf` file must contain `terraform` block only", body.Range())
}
return nil
}