github.com/wata727/tflint@v0.12.2-0.20191013070026-96dd0d36f385/rules/awsrules/aws_spot_fleet_request_invalid_excess_capacity_termination_policy.go (about)

     1  package awsrules
     2  
     3  import (
     4  	"log"
     5  
     6  	hcl "github.com/hashicorp/hcl/v2"
     7  	"github.com/wata727/tflint/tflint"
     8  )
     9  
    10  // AwsSpotFleetRequestInvalidExcessCapacityTerminationPolicyRule checks the pattern is valid
    11  type AwsSpotFleetRequestInvalidExcessCapacityTerminationPolicyRule struct {
    12  	resourceType  string
    13  	attributeName string
    14  	enum          []string
    15  }
    16  
    17  // NewAwsSpotFleetRequestInvalidExcessCapacityTerminationPolicyRule returns new rule with default attributes
    18  func NewAwsSpotFleetRequestInvalidExcessCapacityTerminationPolicyRule() *AwsSpotFleetRequestInvalidExcessCapacityTerminationPolicyRule {
    19  	return &AwsSpotFleetRequestInvalidExcessCapacityTerminationPolicyRule{
    20  		resourceType:  "aws_spot_fleet_request",
    21  		attributeName: "excess_capacity_termination_policy",
    22  		enum: []string{
    23  			"Default",
    24  			"NoTermination",
    25  		},
    26  	}
    27  }
    28  
    29  // Name returns the rule name
    30  func (r *AwsSpotFleetRequestInvalidExcessCapacityTerminationPolicyRule) Name() string {
    31  	return "aws_spot_fleet_request_invalid_excess_capacity_termination_policy"
    32  }
    33  
    34  // Enabled returns whether the rule is enabled by default
    35  func (r *AwsSpotFleetRequestInvalidExcessCapacityTerminationPolicyRule) Enabled() bool {
    36  	return true
    37  }
    38  
    39  // Severity returns the rule severity
    40  func (r *AwsSpotFleetRequestInvalidExcessCapacityTerminationPolicyRule) Severity() string {
    41  	return tflint.ERROR
    42  }
    43  
    44  // Link returns the rule reference link
    45  func (r *AwsSpotFleetRequestInvalidExcessCapacityTerminationPolicyRule) Link() string {
    46  	return ""
    47  }
    48  
    49  // Check checks the pattern is valid
    50  func (r *AwsSpotFleetRequestInvalidExcessCapacityTerminationPolicyRule) Check(runner *tflint.Runner) error {
    51  	log.Printf("[TRACE] Check `%s` rule for `%s` runner", r.Name(), runner.TFConfigPath())
    52  
    53  	return runner.WalkResourceAttributes(r.resourceType, r.attributeName, func(attribute *hcl.Attribute) error {
    54  		var val string
    55  		err := runner.EvaluateExpr(attribute.Expr, &val)
    56  
    57  		return runner.EnsureNoError(err, func() error {
    58  			found := false
    59  			for _, item := range r.enum {
    60  				if item == val {
    61  					found = true
    62  				}
    63  			}
    64  			if !found {
    65  				runner.EmitIssue(
    66  					r,
    67  					`excess_capacity_termination_policy is not a valid value`,
    68  					attribute.Expr.Range(),
    69  				)
    70  			}
    71  			return nil
    72  		})
    73  	})
    74  }