Skip to content

Commit 81679ed

Browse files
authored
terraform_required_providers: emit error when only source is specified
1 parent 83fd42a commit 81679ed

File tree

2 files changed

+64
-11
lines changed

2 files changed

+64
-11
lines changed

rules/terraformrules/terraform_required_providers.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ func (r *TerraformRequiredProvidersRule) Check(runner *tflint.Runner) error {
8080
continue
8181
}
8282

83-
if _, ok := module.ProviderRequirements.RequiredProviders[name]; !ok {
83+
if provider, ok := module.ProviderRequirements.RequiredProviders[name]; !ok || provider.Requirement.Required == nil {
8484
runner.EmitIssue(r, fmt.Sprintf(`Missing version constraint for provider "%s" in "required_providers"`, name), decl)
8585
}
8686
}

rules/terraformrules/terraform_required_providers_test.go

Lines changed: 63 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -87,18 +87,65 @@ data "template_file" "foo" {
8787
},
8888
},
8989
{
90-
Name: "required_providers set",
90+
Name: "required_providers object",
9191
Content: `
9292
terraform {
9393
required_providers {
94-
template = "~> 2"
94+
template = {
95+
source = "hashicorp/template"
96+
version = "~> 2"
97+
}
9598
}
9699
}
97100
98101
provider "template" {}
99102
`,
100103
Expected: tflint.Issues{},
101104
},
105+
{
106+
Name: "required_providers string",
107+
Content: `
108+
terraform {
109+
required_providers {
110+
template = "~> 2"
111+
}
112+
}
113+
114+
provider "template" {}
115+
`,
116+
Expected: tflint.Issues{},
117+
},
118+
{
119+
Name: "required_providers object missing version",
120+
Content: `
121+
terraform {
122+
required_providers {
123+
template = {
124+
source = "hashicorp/template"
125+
}
126+
}
127+
}
128+
129+
provider "template" {}
130+
`,
131+
Expected: tflint.Issues{
132+
{
133+
Rule: NewTerraformRequiredProvidersRule(),
134+
Message: `Missing version constraint for provider "template" in "required_providers"`,
135+
Range: hcl.Range{
136+
Filename: "module.tf",
137+
Start: hcl.Pos{
138+
Line: 10,
139+
Column: 1,
140+
},
141+
End: hcl.Pos{
142+
Line: 10,
143+
Column: 20,
144+
},
145+
},
146+
},
147+
},
148+
},
102149
{
103150
Name: "single provider with alias",
104151
Content: `
@@ -125,11 +172,14 @@ provider "template" {
125172
},
126173
},
127174
{
128-
Name: "version set with alias",
175+
Name: "version set",
129176
Content: `
130177
terraform {
131178
required_providers {
132-
template = "~> 2"
179+
template = {
180+
source = "hashicorp/template"
181+
version = "~> 2"
182+
}
133183
}
134184
}
135185
@@ -144,23 +194,26 @@ provider "template" {
144194
Range: hcl.Range{
145195
Filename: "module.tf",
146196
Start: hcl.Pos{
147-
Line: 8,
197+
Line: 11,
148198
Column: 1,
149199
},
150200
End: hcl.Pos{
151-
Line: 8,
201+
Line: 11,
152202
Column: 20,
153203
},
154204
},
155205
},
156206
},
157207
},
158208
{
159-
Name: "version set",
209+
Name: "version set with alias",
160210
Content: `
161211
terraform {
162212
required_providers {
163-
template = "~> 2"
213+
template = {
214+
source = "hashicorp/template"
215+
version = "~> 2"
216+
}
164217
}
165218
}
166219
@@ -176,11 +229,11 @@ provider "template" {
176229
Range: hcl.Range{
177230
Filename: "module.tf",
178231
Start: hcl.Pos{
179-
Line: 8,
232+
Line: 11,
180233
Column: 1,
181234
},
182235
End: hcl.Pos{
183-
Line: 8,
236+
Line: 11,
184237
Column: 20,
185238
},
186239
},

0 commit comments

Comments
 (0)