2121package cmd
2222
2323import (
24- "errors"
25- "fmt"
26- "net/http"
2724 "net/url"
2825 "os"
2926 "path"
30- "regexp"
3127 "strings"
3228 "sync"
3329
@@ -86,7 +82,7 @@ func getModule(moduleName string, moduleMeta module, wg *sync.WaitGroup) {
8682 case xt .IsLocalSourceAddr (moduleSource ):
8783 xt .CopyFile (moduleName , moduleSource , directory )
8884 case xt .IsRegistrySourceAddr (moduleSource ):
89- source , version := getRegistrySource (moduleName , moduleSource , moduleVersion )
85+ source , version := xt . GetRegistrySource (moduleName , moduleSource , moduleVersion , nil )
9086 getWithGoGetter (moduleName , source , version , directory )
9187 default :
9288 getWithGoGetter (moduleName , moduleSource , moduleVersion , directory )
@@ -108,54 +104,6 @@ func getModule(moduleName string, moduleMeta module, wg *sync.WaitGroup) {
108104 os .RemoveAll (path .Join (directory , ".git" ))
109105}
110106
111- // Handle modules from Terraform registry
112- var registryBaseURL = "https://registry.terraform.io/v1/modules"
113- var githubDownloadURLRe = regexp .MustCompile (`https://[^/]+/repos/([^/]+)/([^/]+)/tarball/([^/]+)/.*` )
114-
115- func getRegistrySource (name string , source string , version string ) (string , string ) {
116- logVersion := "latest"
117- if len (version ) > 0 {
118- logVersion = version
119- }
120-
121- jww .INFO .Printf ("[%s] Looking up %s version %s in Terraform registry" , name , source , logVersion )
122-
123- src := strings .Split (source , "/" )
124- namespace , name , provider := src [0 ], src [1 ], src [2 ]
125-
126- registryDownloadURL := fmt .Sprintf ("%s/%s/%s/%s/%s/download" ,
127- registryBaseURL ,
128- namespace ,
129- name ,
130- provider ,
131- version )
132-
133- client := & http.Client {}
134- req , err := http .NewRequest ("GET" , registryDownloadURL , nil )
135- xt .CheckIfError (name , err )
136-
137- req .Header .Set ("User-Agent" , "XTerrafile (https://github.com/devopsmakers/xterrafile)" )
138- resp , err := client .Do (req )
139- xt .CheckIfError (name , err )
140- defer resp .Body .Close ()
141-
142- var githubDownloadURL = ""
143- if len (resp .Header ["X-Terraform-Get" ]) > 0 {
144- githubDownloadURL = resp .Header ["X-Terraform-Get" ][0 ]
145- }
146- jww .INFO .Printf ("[%s] %v" , name , registryDownloadURL )
147-
148- if githubDownloadURLRe .MatchString (githubDownloadURL ) {
149- matches := githubDownloadURLRe .FindStringSubmatch (githubDownloadURL )
150- user , repo , version := matches [1 ], matches [2 ], matches [3 ]
151- source = fmt .Sprintf ("github.com/%s/%s.git" , user , repo )
152- return source , version
153- }
154- err = errors .New ("Unable to find module or version download url" )
155- xt .CheckIfError (name , err )
156- return "" , "" // Never reaches here
157- }
158-
159107// Handle modules from other sources to reflect:
160108// https://www.terraform.io/docs/modules/sources.html
161109//
0 commit comments