Skip to content

Commit

Permalink
Fix rule template for rule generator (#329)
Browse files Browse the repository at this point in the history
  • Loading branch information
wata727 authored Apr 3, 2022
1 parent e83b070 commit 7523ed6
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 45 deletions.
74 changes: 35 additions & 39 deletions rules/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,49 +6,45 @@ import (
"github.com/terraform-linters/tflint-ruleset-aws/rules/models"
)

var rules = [][]tflint.Rule{
[]tflint.Rule{
NewAwsDBInstanceDefaultParameterGroupRule(),
NewAwsDBInstanceInvalidEngineRule(),
NewAwsDBInstanceInvalidTypeRule(),
NewAwsDBInstancePreviousTypeRule(),
NewAwsDynamoDBTableInvalidStreamViewTypeRule(),
NewAwsElastiCacheClusterDefaultParameterGroupRule(),
NewAwsElastiCacheClusterInvalidTypeRule(),
NewAwsElastiCacheClusterPreviousTypeRule(),
NewAwsIAMPolicyDocumentGovFriendlyArnsRule(),
NewAwsIAMPolicyGovFriendlyArnsRule(),
NewAwsIAMRolePolicyGovFriendlyArnsRule(),
NewAwsInstancePreviousTypeRule(),
NewAwsMqBrokerInvalidEngineTypeRule(),
NewAwsMqConfigurationInvalidEngineTypeRule(),
NewAwsResourceMissingTagsRule(),
NewAwsRouteNotSpecifiedTargetRule(),
NewAwsRouteSpecifiedMultipleTargetsRule(),
NewAwsS3BucketInvalidACLRule(),
NewAwsS3BucketInvalidRegionRule(),
NewAwsS3BucketNameRule(),
NewAwsSpotFleetRequestInvalidExcessCapacityTerminationPolicyRule(),
NewAwsAPIGatewayModelInvalidNameRule(),
NewAwsElastiCacheReplicationGroupDefaultParameterGroupRule(),
NewAwsElastiCacheReplicationGroupInvalidTypeRule(),
NewAwsElastiCacheReplicationGroupPreviousTypeRule(),
NewAwsIAMPolicySidInvalidCharactersRule(),
NewAwsIAMPolicyTooLongPolicyRule(),
NewAwsLambdaFunctionDeprecatedRuntimeRule(),
NewAwsIAMGroupPolicyTooLongRule(),
NewAwsAcmCertificateLifecycleRule(),
NewAwsElasticBeanstalkEnvironmentInvalidNameFormatRule(),
},
models.Rules,
api.Rules,
var manualRules = []tflint.Rule{
NewAwsDBInstanceDefaultParameterGroupRule(),
NewAwsDBInstanceInvalidEngineRule(),
NewAwsDBInstanceInvalidTypeRule(),
NewAwsDBInstancePreviousTypeRule(),
NewAwsDynamoDBTableInvalidStreamViewTypeRule(),
NewAwsElastiCacheClusterDefaultParameterGroupRule(),
NewAwsElastiCacheClusterInvalidTypeRule(),
NewAwsElastiCacheClusterPreviousTypeRule(),
NewAwsIAMPolicyDocumentGovFriendlyArnsRule(),
NewAwsIAMPolicyGovFriendlyArnsRule(),
NewAwsIAMRolePolicyGovFriendlyArnsRule(),
NewAwsInstancePreviousTypeRule(),
NewAwsMqBrokerInvalidEngineTypeRule(),
NewAwsMqConfigurationInvalidEngineTypeRule(),
NewAwsResourceMissingTagsRule(),
NewAwsRouteNotSpecifiedTargetRule(),
NewAwsRouteSpecifiedMultipleTargetsRule(),
NewAwsS3BucketInvalidACLRule(),
NewAwsS3BucketInvalidRegionRule(),
NewAwsS3BucketNameRule(),
NewAwsSpotFleetRequestInvalidExcessCapacityTerminationPolicyRule(),
NewAwsAPIGatewayModelInvalidNameRule(),
NewAwsElastiCacheReplicationGroupDefaultParameterGroupRule(),
NewAwsElastiCacheReplicationGroupInvalidTypeRule(),
NewAwsElastiCacheReplicationGroupPreviousTypeRule(),
NewAwsIAMPolicySidInvalidCharactersRule(),
NewAwsIAMPolicyTooLongPolicyRule(),
NewAwsLambdaFunctionDeprecatedRuntimeRule(),
NewAwsIAMGroupPolicyTooLongRule(),
NewAwsAcmCertificateLifecycleRule(),
NewAwsElasticBeanstalkEnvironmentInvalidNameFormatRule(),
}

// Rules is a list of all rules
var Rules []tflint.Rule

func init() {
for _, r := range rules {
Rules = append(Rules, r...)
}
Rules = append(Rules, manualRules...)
Rules = append(Rules, models.Rules...)
Rules = append(Rules, api.Rules...)
}
33 changes: 27 additions & 6 deletions rules/rule.go.tmpl
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
package rules

import (
hcl "github.com/hashicorp/hcl/v2"
"github.com/terraform-linters/tflint-plugin-sdk/hclext"
"github.com/terraform-linters/tflint-plugin-sdk/tflint"
"github.com/terraform-linters/tflint-ruleset-aws/project"
)

// TODO: Write the rule's description here
// {{ .RuleNameCC }}Rule checks ...
type {{ .RuleNameCC }}Rule struct {
tflint.DefaultRule

resourceType string
attributeName string
}
Expand Down Expand Up @@ -51,19 +53,38 @@ func (r *{{ .RuleNameCC }}Rule) Check(runner tflint.Runner) error {
// TODO: Write the implementation here. See this documentation for what tflint.Runner can do.
// https://pkg.go.dev/github.com/terraform-linters/tflint-plugin-sdk/tflint#Runner

return runner.WalkResourceAttributes(r.resourceType, r.attributeName, func(attribute *hcl.Attribute) error {
resources, err := runner.GetResourceContent(r.resourceType, &hclext.BodySchema{
Attributes: []hclext.AttributeSchema{
{Name: r.attributeName},
},
}, nil)
if err != nil {
return err
}

for _, resource := range resources.Blocks {
attribute, exists := resource.Body.Attributes[r.attributeName]
if !exists {
continue
}

var val string
err := runner.EvaluateExpr(attribute.Expr, &val, nil)

return runner.EnsureNoError(err, func() error {
err = runner.EnsureNoError(err, func() error {
if val == "" {
runner.EmitIssueOnExpr(
runner.EmitIssue(
r,
"TODO",
attribute.Expr,
attribute.Expr.Range(),
)
}
return nil
})
})
if err != nil {
return err
}
}

return nil
}

0 comments on commit 7523ed6

Please sign in to comment.