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 {
151151 requiredProviders := hclext.Attributes {}
152152 for _ , terraform := range body .Blocks {
153153 for _ , requiredProvidersBlock := range terraform .Body .Blocks {
154- requiredProviders = requiredProvidersBlock .Body .Attributes
154+ for name , attr := range requiredProvidersBlock .Body .Attributes {
155+ requiredProviders [name ] = attr
156+ }
155157 }
156158 }
157159
Original file line number Diff line number Diff line change @@ -570,6 +570,108 @@ output "foo" {
570570 },
571571 },
572572 },
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+ },
573675 }
574676
575677 rule := NewTerraformRequiredProvidersRule ()
Original file line number Diff line number Diff line change @@ -83,6 +83,7 @@ func (r *TerraformUnusedRequiredProvidersRule) Check(rr tflint.Runner) error {
8383
8484 for _ , block := range content .Blocks {
8585 var attrDiags hcl.Diagnostics
86+ // FIXME: required providers should be merged
8687 requiredProviders , attrDiags = block .Body .JustAttributes ()
8788 diags = diags .Extend (attrDiags )
8889 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 {
9898 for _ , terraform := range body .Blocks {
9999 for _ , requiredVersion := range terraform .Body .Attributes {
100100 err := runner .EvaluateExpr (requiredVersion .Expr , func (v string ) error {
101+ // FIXME: Should constraints defined in multiple blocks be merged?
101102 constraints , err := version .NewConstraint (v )
102103 if err != nil {
103104 return err
You can’t perform that action at this time.
0 commit comments