github.com/terraform-linters/tflint-ruleset-azurerm@v0.26.0/rules/apispec/azurerm_firewall_application_rule_collection_invalid_priority.go (about)

     1  // This file generated by `tools/apispec-rule-gen/main.go`. DO NOT EDIT
     2  
     3  package apispec
     4  
     5  import (
     6  
     7  	"github.com/terraform-linters/tflint-plugin-sdk/hclext"
     8  	"github.com/terraform-linters/tflint-plugin-sdk/tflint"
     9  	"github.com/terraform-linters/tflint-ruleset-azurerm/project"
    10  )
    11  
    12  // AzurermFirewallApplicationRuleCollectionInvalidPriorityRule checks the pattern is valid
    13  type AzurermFirewallApplicationRuleCollectionInvalidPriorityRule struct {
    14  	tflint.DefaultRule
    15  
    16  	resourceType  string
    17  	attributeName string
    18  	max           int
    19  	min           int
    20  }
    21  
    22  // NewAzurermFirewallApplicationRuleCollectionInvalidPriorityRule returns new rule with default attributes
    23  func NewAzurermFirewallApplicationRuleCollectionInvalidPriorityRule() *AzurermFirewallApplicationRuleCollectionInvalidPriorityRule {
    24  	return &AzurermFirewallApplicationRuleCollectionInvalidPriorityRule{
    25  		resourceType:  "azurerm_firewall_application_rule_collection",
    26  		attributeName: "priority",
    27  		max:           65000,
    28  		min:           100,
    29  	}
    30  }
    31  
    32  // Name returns the rule name
    33  func (r *AzurermFirewallApplicationRuleCollectionInvalidPriorityRule) Name() string {
    34  	return "azurerm_firewall_application_rule_collection_invalid_priority"
    35  }
    36  
    37  // Enabled returns whether the rule is enabled by default
    38  func (r *AzurermFirewallApplicationRuleCollectionInvalidPriorityRule) Enabled() bool {
    39  	return true
    40  }
    41  
    42  // Severity returns the rule severity
    43  func (r *AzurermFirewallApplicationRuleCollectionInvalidPriorityRule) Severity() tflint.Severity {
    44  	return tflint.ERROR
    45  }
    46  
    47  // Link returns the rule reference link
    48  func (r *AzurermFirewallApplicationRuleCollectionInvalidPriorityRule) Link() string {
    49  	return project.ReferenceLink(r.Name())
    50  }
    51  
    52  // Check checks the pattern is valid
    53  func (r *AzurermFirewallApplicationRuleCollectionInvalidPriorityRule) Check(runner tflint.Runner) error {
    54  	resources, err := runner.GetResourceContent(r.resourceType, &hclext.BodySchema{
    55  		Attributes: []hclext.AttributeSchema{
    56  			{Name: r.attributeName},
    57  		},
    58  	}, nil)
    59  	if err != nil {
    60  		return err
    61  	}
    62  
    63  	for _, resource := range resources.Blocks {
    64  		attribute, exists := resource.Body.Attributes[r.attributeName]
    65  		if !exists {
    66  			continue
    67  		}
    68  		err := runner.EvaluateExpr(attribute.Expr, func (val int) error {
    69  			if val > r.max {
    70  				runner.EmitIssue(
    71  					r,
    72  					"priority must be 65000 or less",
    73  					attribute.Expr.Range(),
    74  				)
    75  			}
    76  			if val < r.min {
    77  				runner.EmitIssue(
    78  					r,
    79  					"priority must be 100 or higher",
    80  					attribute.Expr.Range(),
    81  				)
    82  			}
    83  			return nil
    84  		}, nil)
    85  		if err != nil {
    86  			return err
    87  		}
    88  	}
    89  
    90  	return nil
    91  }