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  }