Skip to content

Commit 47389ce

Browse files
authored
Update Magic Modules (#332)
1 parent 62ecee1 commit 47389ce

File tree

33 files changed

+2001
-1781
lines changed

33 files changed

+2001
-1781
lines changed

rules/api/google_disabled_api.go

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ func (r *GoogleDisabledAPIRule) Check(rr tflint.Runner) error {
6565
ctx := context.TODO()
6666
err := runner.Client.ServiceUsage.Services.List(runner.ParentProject()).Filter("state:ENABLED").Pages(ctx, func(resp *serviceusage.ListServicesResponse) error {
6767
for _, service := range resp.Services {
68-
r.enabledAPIs[service.Config.Title] = service
68+
r.enabledAPIs[service.Config.Name] = service
6969
}
7070
return nil
7171
})
@@ -74,33 +74,31 @@ func (r *GoogleDisabledAPIRule) Check(rr tflint.Runner) error {
7474
}
7575
}
7676

77-
for resource, product := range magicmodules.Products {
78-
if len(product.APIsRequired) == 0 {
79-
continue
80-
}
77+
resources, err := runner.GetModuleContent(&hclext.BodySchema{
78+
Blocks: []hclext.BlockSchema{
79+
{Type: "resource", LabelNames: []string{"type", "name"}},
80+
},
81+
}, nil)
82+
if err != nil {
83+
return err
84+
}
8185

82-
resources, err := runner.GetResourceContent(resource, &hclext.BodySchema{}, nil)
83-
if err != nil {
84-
return err
86+
for _, resource := range resources.Blocks {
87+
url, exists := magicmodules.APIDefinition[resource.Labels[0]]
88+
if !exists {
89+
continue
8590
}
8691

87-
for _, resource := range resources.Blocks {
88-
for _, ref := range product.APIsRequired {
89-
if _, ok := r.enabledAPIs[ref.Name]; !ok {
90-
err := runner.EmitIssue(
91-
r,
92-
fmt.Sprintf("%s has not been used in %s before or it is disabled.", ref.Name, runner.Project),
93-
resource.DefRange,
94-
)
95-
if err != nil {
96-
return err
97-
}
98-
}
92+
if _, ok := r.enabledAPIs[url]; !ok {
93+
err := runner.EmitIssue(
94+
r,
95+
fmt.Sprintf("%s has not been used in %s before or it is disabled.", url, runner.Project),
96+
resource.DefRange,
97+
)
98+
if err != nil {
99+
return err
99100
}
100101
}
101-
if err != nil {
102-
return err
103-
}
104102
}
105103

106104
return nil

rules/api/google_disabled_api_test.go

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ terraform {}`,
2323
Expected: helper.Issues{},
2424
},
2525
{
26-
Name: "Compute Engine API is not enabled",
26+
Name: "compute.googleapis.com is not enabled",
2727
Content: `
2828
resource "google_compute_network" "vpc_network" {
2929
name = "terraform-network"
@@ -33,7 +33,7 @@ resource "google_compute_network" "vpc_network" {
3333
Expected: helper.Issues{
3434
{
3535
Rule: NewGoogleDisabledAPIRule(),
36-
Message: "Compute Engine API has not been used in foo-bar-baz before or it is disabled.",
36+
Message: "compute.googleapis.com has not been used in foo-bar-baz before or it is disabled.",
3737
Range: hcl.Range{
3838
Filename: "resource.tf",
3939
Start: hcl.Pos{Line: 2, Column: 1},
@@ -43,14 +43,22 @@ resource "google_compute_network" "vpc_network" {
4343
},
4444
},
4545
{
46-
Name: "Compute Engine API is enabled",
46+
Name: "compute.googleapis.com is enabled",
4747
Content: `
4848
resource "google_compute_network" "vpc_network" {
4949
name = "terraform-network"
5050
auto_create_subnetworks = "true"
5151
}`,
5252
Response: map[string]*serviceusage.GoogleApiServiceusageV1Service{
53-
"Compute Engine API": {},
53+
"compute.googleapis.com": {
54+
Config: &serviceusage.GoogleApiServiceusageV1ServiceConfig{
55+
Title: "Compute Engine API",
56+
Name: "compute.googleapis.com",
57+
},
58+
Name: "projects/123456789/services/compute.googleapis.com",
59+
Parent: "projects/123456789",
60+
State: "ENABLED",
61+
},
5462
},
5563
Expected: helper.Issues{},
5664
},
@@ -59,14 +67,16 @@ resource "google_compute_network" "vpc_network" {
5967
rule := NewGoogleDisabledAPIRule()
6068

6169
for _, tc := range cases {
62-
runner := NewTestRunner(t, map[string]string{"resource.tf": tc.Content})
70+
t.Run(tc.Name, func(t *testing.T) {
71+
runner := NewTestRunner(t, map[string]string{"resource.tf": tc.Content})
6372

64-
rule.prepared = true
65-
rule.enabledAPIs = tc.Response
73+
rule.prepared = true
74+
rule.enabledAPIs = tc.Response
6675

67-
if err := rule.Check(runner); err != nil {
68-
t.Fatalf("Unexpected error occurred: %s", err)
69-
}
70-
helper.AssertIssues(t, tc.Expected, runner.Runner.(*helper.Runner).Issues)
76+
if err := rule.Check(runner); err != nil {
77+
t.Fatalf("Unexpected error occurred: %s", err)
78+
}
79+
helper.AssertIssues(t, tc.Expected, runner.Runner.(*helper.Runner).Issues)
80+
})
7181
}
7282
}

rules/magicmodules/api_definition.go

Lines changed: 364 additions & 0 deletions
Large diffs are not rendered by default.

rules/magicmodules/google_big_query_routine_invalid_determinism_level.go renamed to rules/magicmodules/google_bigquery_routine_invalid_determinism_level.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,44 +20,44 @@ import (
2020
"github.com/terraform-linters/tflint-plugin-sdk/tflint"
2121
)
2222

23-
// GoogleBigQueryRoutineInvalidDeterminismLevelRule checks the pattern is valid
24-
type GoogleBigQueryRoutineInvalidDeterminismLevelRule struct {
23+
// GoogleBigqueryRoutineInvalidDeterminismLevelRule checks the pattern is valid
24+
type GoogleBigqueryRoutineInvalidDeterminismLevelRule struct {
2525
tflint.DefaultRule
2626

2727
resourceType string
2828
attributeName string
2929
}
3030

31-
// NewGoogleBigQueryRoutineInvalidDeterminismLevelRule returns new rule with default attributes
32-
func NewGoogleBigQueryRoutineInvalidDeterminismLevelRule() *GoogleBigQueryRoutineInvalidDeterminismLevelRule {
33-
return &GoogleBigQueryRoutineInvalidDeterminismLevelRule{
34-
resourceType: "google_big_query_routine",
31+
// NewGoogleBigqueryRoutineInvalidDeterminismLevelRule returns new rule with default attributes
32+
func NewGoogleBigqueryRoutineInvalidDeterminismLevelRule() *GoogleBigqueryRoutineInvalidDeterminismLevelRule {
33+
return &GoogleBigqueryRoutineInvalidDeterminismLevelRule{
34+
resourceType: "google_bigquery_routine",
3535
attributeName: "determinism_level",
3636
}
3737
}
3838

3939
// Name returns the rule name
40-
func (r *GoogleBigQueryRoutineInvalidDeterminismLevelRule) Name() string {
41-
return "google_big_query_routine_invalid_determinism_level"
40+
func (r *GoogleBigqueryRoutineInvalidDeterminismLevelRule) Name() string {
41+
return "google_bigquery_routine_invalid_determinism_level"
4242
}
4343

4444
// Enabled returns whether the rule is enabled by default
45-
func (r *GoogleBigQueryRoutineInvalidDeterminismLevelRule) Enabled() bool {
45+
func (r *GoogleBigqueryRoutineInvalidDeterminismLevelRule) Enabled() bool {
4646
return true
4747
}
4848

4949
// Severity returns the rule severity
50-
func (r *GoogleBigQueryRoutineInvalidDeterminismLevelRule) Severity() tflint.Severity {
50+
func (r *GoogleBigqueryRoutineInvalidDeterminismLevelRule) Severity() tflint.Severity {
5151
return tflint.ERROR
5252
}
5353

5454
// Link returns the rule reference link
55-
func (r *GoogleBigQueryRoutineInvalidDeterminismLevelRule) Link() string {
55+
func (r *GoogleBigqueryRoutineInvalidDeterminismLevelRule) Link() string {
5656
return ""
5757
}
5858

5959
// Check checks the pattern is valid
60-
func (r *GoogleBigQueryRoutineInvalidDeterminismLevelRule) Check(runner tflint.Runner) error {
60+
func (r *GoogleBigqueryRoutineInvalidDeterminismLevelRule) Check(runner tflint.Runner) error {
6161
resources, err := runner.GetResourceContent(r.resourceType, &hclext.BodySchema{
6262
Attributes: []hclext.AttributeSchema{{Name: r.attributeName}},
6363
}, nil)

rules/magicmodules/google_big_query_routine_invalid_language.go renamed to rules/magicmodules/google_bigquery_routine_invalid_language.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,44 +20,44 @@ import (
2020
"github.com/terraform-linters/tflint-plugin-sdk/tflint"
2121
)
2222

23-
// GoogleBigQueryRoutineInvalidLanguageRule checks the pattern is valid
24-
type GoogleBigQueryRoutineInvalidLanguageRule struct {
23+
// GoogleBigqueryRoutineInvalidLanguageRule checks the pattern is valid
24+
type GoogleBigqueryRoutineInvalidLanguageRule struct {
2525
tflint.DefaultRule
2626

2727
resourceType string
2828
attributeName string
2929
}
3030

31-
// NewGoogleBigQueryRoutineInvalidLanguageRule returns new rule with default attributes
32-
func NewGoogleBigQueryRoutineInvalidLanguageRule() *GoogleBigQueryRoutineInvalidLanguageRule {
33-
return &GoogleBigQueryRoutineInvalidLanguageRule{
34-
resourceType: "google_big_query_routine",
31+
// NewGoogleBigqueryRoutineInvalidLanguageRule returns new rule with default attributes
32+
func NewGoogleBigqueryRoutineInvalidLanguageRule() *GoogleBigqueryRoutineInvalidLanguageRule {
33+
return &GoogleBigqueryRoutineInvalidLanguageRule{
34+
resourceType: "google_bigquery_routine",
3535
attributeName: "language",
3636
}
3737
}
3838

3939
// Name returns the rule name
40-
func (r *GoogleBigQueryRoutineInvalidLanguageRule) Name() string {
41-
return "google_big_query_routine_invalid_language"
40+
func (r *GoogleBigqueryRoutineInvalidLanguageRule) Name() string {
41+
return "google_bigquery_routine_invalid_language"
4242
}
4343

4444
// Enabled returns whether the rule is enabled by default
45-
func (r *GoogleBigQueryRoutineInvalidLanguageRule) Enabled() bool {
45+
func (r *GoogleBigqueryRoutineInvalidLanguageRule) Enabled() bool {
4646
return true
4747
}
4848

4949
// Severity returns the rule severity
50-
func (r *GoogleBigQueryRoutineInvalidLanguageRule) Severity() tflint.Severity {
50+
func (r *GoogleBigqueryRoutineInvalidLanguageRule) Severity() tflint.Severity {
5151
return tflint.ERROR
5252
}
5353

5454
// Link returns the rule reference link
55-
func (r *GoogleBigQueryRoutineInvalidLanguageRule) Link() string {
55+
func (r *GoogleBigqueryRoutineInvalidLanguageRule) Link() string {
5656
return ""
5757
}
5858

5959
// Check checks the pattern is valid
60-
func (r *GoogleBigQueryRoutineInvalidLanguageRule) Check(runner tflint.Runner) error {
60+
func (r *GoogleBigqueryRoutineInvalidLanguageRule) Check(runner tflint.Runner) error {
6161
resources, err := runner.GetResourceContent(r.resourceType, &hclext.BodySchema{
6262
Attributes: []hclext.AttributeSchema{{Name: r.attributeName}},
6363
}, nil)
@@ -72,7 +72,7 @@ func (r *GoogleBigQueryRoutineInvalidLanguageRule) Check(runner tflint.Runner) e
7272
}
7373

7474
err := runner.EvaluateExpr(attribute.Expr, func(val string) error {
75-
validateFunc := validation.StringInSlice([]string{"SQL", "JAVASCRIPT", ""}, false)
75+
validateFunc := validation.StringInSlice([]string{"SQL", "JAVASCRIPT", "PYTHON", "JAVA", "SCALA", ""}, false)
7676

7777
_, errors := validateFunc(val, r.attributeName)
7878
for _, err := range errors {

rules/magicmodules/google_big_query_routine_invalid_routine_type.go renamed to rules/magicmodules/google_bigquery_routine_invalid_routine_type.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,44 +20,44 @@ import (
2020
"github.com/terraform-linters/tflint-plugin-sdk/tflint"
2121
)
2222

23-
// GoogleBigQueryRoutineInvalidRoutineTypeRule checks the pattern is valid
24-
type GoogleBigQueryRoutineInvalidRoutineTypeRule struct {
23+
// GoogleBigqueryRoutineInvalidRoutineTypeRule checks the pattern is valid
24+
type GoogleBigqueryRoutineInvalidRoutineTypeRule struct {
2525
tflint.DefaultRule
2626

2727
resourceType string
2828
attributeName string
2929
}
3030

31-
// NewGoogleBigQueryRoutineInvalidRoutineTypeRule returns new rule with default attributes
32-
func NewGoogleBigQueryRoutineInvalidRoutineTypeRule() *GoogleBigQueryRoutineInvalidRoutineTypeRule {
33-
return &GoogleBigQueryRoutineInvalidRoutineTypeRule{
34-
resourceType: "google_big_query_routine",
31+
// NewGoogleBigqueryRoutineInvalidRoutineTypeRule returns new rule with default attributes
32+
func NewGoogleBigqueryRoutineInvalidRoutineTypeRule() *GoogleBigqueryRoutineInvalidRoutineTypeRule {
33+
return &GoogleBigqueryRoutineInvalidRoutineTypeRule{
34+
resourceType: "google_bigquery_routine",
3535
attributeName: "routine_type",
3636
}
3737
}
3838

3939
// Name returns the rule name
40-
func (r *GoogleBigQueryRoutineInvalidRoutineTypeRule) Name() string {
41-
return "google_big_query_routine_invalid_routine_type"
40+
func (r *GoogleBigqueryRoutineInvalidRoutineTypeRule) Name() string {
41+
return "google_bigquery_routine_invalid_routine_type"
4242
}
4343

4444
// Enabled returns whether the rule is enabled by default
45-
func (r *GoogleBigQueryRoutineInvalidRoutineTypeRule) Enabled() bool {
45+
func (r *GoogleBigqueryRoutineInvalidRoutineTypeRule) Enabled() bool {
4646
return true
4747
}
4848

4949
// Severity returns the rule severity
50-
func (r *GoogleBigQueryRoutineInvalidRoutineTypeRule) Severity() tflint.Severity {
50+
func (r *GoogleBigqueryRoutineInvalidRoutineTypeRule) Severity() tflint.Severity {
5151
return tflint.ERROR
5252
}
5353

5454
// Link returns the rule reference link
55-
func (r *GoogleBigQueryRoutineInvalidRoutineTypeRule) Link() string {
55+
func (r *GoogleBigqueryRoutineInvalidRoutineTypeRule) Link() string {
5656
return ""
5757
}
5858

5959
// Check checks the pattern is valid
60-
func (r *GoogleBigQueryRoutineInvalidRoutineTypeRule) Check(runner tflint.Runner) error {
60+
func (r *GoogleBigqueryRoutineInvalidRoutineTypeRule) Check(runner tflint.Runner) error {
6161
resources, err := runner.GetResourceContent(r.resourceType, &hclext.BodySchema{
6262
Attributes: []hclext.AttributeSchema{{Name: r.attributeName}},
6363
}, nil)

0 commit comments

Comments
 (0)