github.com/jpreese/tflint@v0.19.2-0.20200908152133-b01686250fb6/rules/terraformrules/terraform_required_version.go (about) 1 package terraformrules 2 3 import ( 4 "fmt" 5 "log" 6 7 "github.com/hashicorp/hcl/v2" 8 "github.com/terraform-linters/tflint/tflint" 9 ) 10 11 // TerraformRequiredVersionRule checks whether a terraform version has required_version attribute 12 type TerraformRequiredVersionRule struct{} 13 14 // NewTerraformRequiredVersionRule returns new rule with default attributes 15 func NewTerraformRequiredVersionRule() *TerraformRequiredVersionRule { 16 return &TerraformRequiredVersionRule{} 17 } 18 19 // Name returns the rule name 20 func (r *TerraformRequiredVersionRule) Name() string { 21 return "terraform_required_version" 22 } 23 24 // Enabled returns whether the rule is enabled by default 25 func (r *TerraformRequiredVersionRule) Enabled() bool { 26 return false 27 } 28 29 // Severity returns the rule severity 30 func (r *TerraformRequiredVersionRule) Severity() string { 31 return tflint.WARNING 32 } 33 34 // Link returns the rule reference link 35 func (r *TerraformRequiredVersionRule) Link() string { 36 return tflint.ReferenceLink(r.Name()) 37 } 38 39 // Check Checks whether required_version is set 40 func (r *TerraformRequiredVersionRule) Check(runner *tflint.Runner) error { 41 if !runner.TFConfig.Path.IsRoot() { 42 // This rule does not evaluate child modules. 43 return nil 44 } 45 46 log.Printf("[TRACE] Check `%s` rule for `%s` runner", r.Name(), runner.TFConfigPath()) 47 48 module := runner.TFConfig.Module 49 versionConstraints := module.CoreVersionConstraints 50 if len(versionConstraints) == 0 { 51 runner.EmitIssue( 52 r, 53 fmt.Sprintf("terraform \"required_version\" attribute is required"), 54 hcl.Range{}, 55 ) 56 return nil 57 } 58 59 return nil 60 }