File tree Expand file tree Collapse file tree 4 files changed +107
-1
lines changed Expand file tree Collapse file tree 4 files changed +107
-1
lines changed Original file line number Diff line number Diff line change @@ -151,7 +151,9 @@ func (r *TerraformRequiredProvidersRule) Check(rr tflint.Runner) error {
151
151
requiredProviders := hclext.Attributes {}
152
152
for _ , terraform := range body .Blocks {
153
153
for _ , requiredProvidersBlock := range terraform .Body .Blocks {
154
- requiredProviders = requiredProvidersBlock .Body .Attributes
154
+ for name , attr := range requiredProvidersBlock .Body .Attributes {
155
+ requiredProviders [name ] = attr
156
+ }
155
157
}
156
158
}
157
159
Original file line number Diff line number Diff line change @@ -570,6 +570,108 @@ output "foo" {
570
570
},
571
571
},
572
572
},
573
+ {
574
+ Name : "multiple required providers" ,
575
+ Content : `
576
+ terraform {
577
+ required_providers {
578
+ template = "~> 2"
579
+ }
580
+
581
+ required_providers {
582
+ aws = "~> 5.0"
583
+ }
584
+ }
585
+
586
+ provider "template" {}
587
+ provider "aws" {}
588
+ provider "google" {}
589
+
590
+ terraform {
591
+ required_providers {
592
+ google = "~> 6.0"
593
+ }
594
+ }
595
+ ` ,
596
+ Expected : helper.Issues {
597
+ // FIXME: ignore order of issues
598
+ {
599
+ Rule : NewTerraformRequiredProvidersRule (),
600
+ Message : "Legacy version constraint for provider \" template\" in `required_providers`" ,
601
+ Range : hcl.Range {
602
+ Filename : "module.tf" ,
603
+ Start : hcl.Pos {
604
+ Line : 4 ,
605
+ Column : 16 ,
606
+ },
607
+ End : hcl.Pos {
608
+ Line : 4 ,
609
+ Column : 22 ,
610
+ },
611
+ },
612
+ },
613
+ {
614
+ Rule : NewTerraformRequiredProvidersRule (),
615
+ Message : "Legacy version constraint for provider \" aws\" in `required_providers`" ,
616
+ Range : hcl.Range {
617
+ Filename : "module.tf" ,
618
+ Start : hcl.Pos {
619
+ Line : 8 ,
620
+ Column : 11 ,
621
+ },
622
+ End : hcl.Pos {
623
+ Line : 8 ,
624
+ Column : 19 ,
625
+ },
626
+ },
627
+ },
628
+ {
629
+ Rule : NewTerraformRequiredProvidersRule (),
630
+ Message : "Legacy version constraint for provider \" google\" in `required_providers`" ,
631
+ Range : hcl.Range {
632
+ Filename : "module.tf" ,
633
+ Start : hcl.Pos {
634
+ Line : 18 ,
635
+ Column : 14 ,
636
+ },
637
+ End : hcl.Pos {
638
+ Line : 18 ,
639
+ Column : 22 ,
640
+ },
641
+ },
642
+ },
643
+ },
644
+ Fixed : `
645
+ terraform {
646
+ required_providers {
647
+ template = {
648
+ source = "hashicorp/template"
649
+ version = "~> 2"
650
+ }
651
+ }
652
+
653
+ required_providers {
654
+ aws = {
655
+ source = "hashicorp/aws"
656
+ version = "~> 5.0"
657
+ }
658
+ }
659
+ }
660
+
661
+ provider "template" {}
662
+ provider "aws" {}
663
+ provider "google" {}
664
+
665
+ terraform {
666
+ required_providers {
667
+ google = {
668
+ source = "hashicorp/google"
669
+ version = "~> 6.0"
670
+ }
671
+ }
672
+ }
673
+ ` ,
674
+ },
573
675
}
574
676
575
677
rule := NewTerraformRequiredProvidersRule ()
Original file line number Diff line number Diff line change @@ -83,6 +83,7 @@ func (r *TerraformUnusedRequiredProvidersRule) Check(rr tflint.Runner) error {
83
83
84
84
for _ , block := range content .Blocks {
85
85
var attrDiags hcl.Diagnostics
86
+ // FIXME: required providers should be merged
86
87
requiredProviders , attrDiags = block .Body .JustAttributes ()
87
88
diags = diags .Extend (attrDiags )
88
89
if diags .HasErrors () {
Original file line number Diff line number Diff line change @@ -98,6 +98,7 @@ func (r *TerraformWorkspaceRemoteRule) Check(runner tflint.Runner) error {
98
98
for _ , terraform := range body .Blocks {
99
99
for _ , requiredVersion := range terraform .Body .Attributes {
100
100
err := runner .EvaluateExpr (requiredVersion .Expr , func (v string ) error {
101
+ // FIXME: Should constraints defined in multiple blocks be merged?
101
102
constraints , err := version .NewConstraint (v )
102
103
if err != nil {
103
104
return err
You can’t perform that action at this time.
0 commit comments