Skip to content

Commit 4301bec

Browse files
authored
Fix rule template for rule generator (#161)
1 parent b22aac0 commit 4301bec

File tree

2 files changed

+44
-27
lines changed

2 files changed

+44
-27
lines changed

rules/provider.go

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,26 @@ import (
66
"github.com/terraform-linters/tflint-ruleset-google/rules/magicmodules"
77
)
88

9-
var rules = [][]tflint.Rule{
10-
{
11-
NewGoogleComposerEnvironmentInvalidMachineTypeRule(),
12-
NewGoogleComputeInstanceInvalidMachineTypeRule(),
13-
NewGoogleComputeReservationInvalidMachineTypeRule(),
14-
NewGoogleComputeInstanceTemplateInvalidMachineTypeRule(),
15-
NewGoogleContainerClusterInvalidMachineTypeRule(),
16-
NewGoogleContainerNodePoolInvalidMachineTypeRule(),
17-
NewGoogleDataflowJobInvalidMachineTypeRule(),
18-
NewGoogleComputeResourcePolicyInvalidNameRule(),
19-
NewGoogleProjectIamMemberInvalidMemberRule(),
20-
NewGoogleProjectIamAuditConfigInvalidMemberRule(),
21-
NewGoogleProjectIamBindingInvalidMemberRule(),
22-
NewGoogleProjectIamPolicyInvalidMemberRule(),
23-
},
24-
magicmodules.Rules,
25-
api.Rules,
9+
var manualRules = []tflint.Rule{
10+
NewGoogleComposerEnvironmentInvalidMachineTypeRule(),
11+
NewGoogleComputeInstanceInvalidMachineTypeRule(),
12+
NewGoogleComputeReservationInvalidMachineTypeRule(),
13+
NewGoogleComputeInstanceTemplateInvalidMachineTypeRule(),
14+
NewGoogleContainerClusterInvalidMachineTypeRule(),
15+
NewGoogleContainerNodePoolInvalidMachineTypeRule(),
16+
NewGoogleDataflowJobInvalidMachineTypeRule(),
17+
NewGoogleComputeResourcePolicyInvalidNameRule(),
18+
NewGoogleProjectIamMemberInvalidMemberRule(),
19+
NewGoogleProjectIamAuditConfigInvalidMemberRule(),
20+
NewGoogleProjectIamBindingInvalidMemberRule(),
21+
NewGoogleProjectIamPolicyInvalidMemberRule(),
2622
}
2723

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

3127
func init() {
32-
for _, r := range rules {
33-
Rules = append(Rules, r...)
34-
}
28+
Rules = append(Rules, manualRules...)
29+
Rules = append(Rules, magicmodules.Rules...)
30+
Rules = append(Rules, api.Rules...)
3531
}

rules/rule.go.tmpl

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
package rules
22

33
import (
4-
hcl "github.com/hashicorp/hcl/v2"
4+
"github.com/terraform-linters/tflint-plugin-sdk/hclext"
55
"github.com/terraform-linters/tflint-plugin-sdk/tflint"
66
"github.com/terraform-linters/tflint-ruleset-google/project"
77
)
88

99
// TODO: Write the rule's description here
1010
// {{ .RuleNameCC }}Rule checks ...
1111
type {{ .RuleNameCC }}Rule struct {
12+
tflint.DefaultRule
13+
1214
resourceType string
1315
attributeName string
1416
}
@@ -34,7 +36,7 @@ func (r *{{ .RuleNameCC }}Rule) Enabled() bool {
3436
}
3537

3638
// Severity returns the rule severity
37-
func (r *{{ .RuleNameCC }}Rule) Severity() string {
39+
func (r *{{ .RuleNameCC }}Rule) Severity() tflint.Severity {
3840
// TODO: Determine the rule's severiry
3941
return tflint.ERROR
4042
}
@@ -51,19 +53,38 @@ func (r *{{ .RuleNameCC }}Rule) Check(runner tflint.Runner) error {
5153
// TODO: Write the implementation here. See this documentation for what tflint.Runner can do.
5254
// https://pkg.go.dev/github.com/terraform-linters/tflint-plugin-sdk/tflint#Runner
5355

54-
return runner.WalkResourceAttributes(r.resourceType, r.attributeName, func(attribute *hcl.Attribute) error {
56+
resources, err := runner.GetResourceContent(r.resourceType, &hclext.BodySchema{
57+
Attributes: []hclext.AttributeSchema{
58+
{Name: r.attributeName},
59+
},
60+
}, nil)
61+
if err != nil {
62+
return err
63+
}
64+
65+
for _, resource := range resources.Blocks {
66+
attribute, exists := resource.Body.Attributes[r.attributeName]
67+
if !exists {
68+
continue
69+
}
70+
5571
var val string
5672
err := runner.EvaluateExpr(attribute.Expr, &val, nil)
5773

58-
return runner.EnsureNoError(err, func() error {
74+
err = runner.EnsureNoError(err, func() error {
5975
if val == "" {
60-
runner.EmitIssueOnExpr(
76+
runner.EmitIssue(
6177
r,
6278
"TODO",
63-
attribute.Expr,
79+
attribute.Expr.Range(),
6480
)
6581
}
6682
return nil
6783
})
68-
})
84+
if err != nil {
85+
return err
86+
}
87+
}
88+
89+
return nil
6990
}

0 commit comments

Comments
 (0)