diff options
author | Nathan Dench <ndenc2@gmail.com> | 2019-05-24 15:16:44 +1000 |
---|---|---|
committer | Nathan Dench <ndenc2@gmail.com> | 2019-05-24 15:16:44 +1000 |
commit | 107c1cdb09c575aa2f61d97f48d8587eb6bada4c (patch) | |
tree | ca7d008643efc555c388baeaf1d986e0b6b3e28c /vendor/github.com/hashicorp/terraform/registry/client.go | |
parent | 844b5a68d8af4791755b8f0ad293cc99f5959183 (diff) | |
download | terraform-provider-statuscake-107c1cdb09c575aa2f61d97f48d8587eb6bada4c.tar.gz terraform-provider-statuscake-107c1cdb09c575aa2f61d97f48d8587eb6bada4c.tar.zst terraform-provider-statuscake-107c1cdb09c575aa2f61d97f48d8587eb6bada4c.zip |
Upgrade to 0.12
Diffstat (limited to 'vendor/github.com/hashicorp/terraform/registry/client.go')
-rw-r--r-- | vendor/github.com/hashicorp/terraform/registry/client.go | 140 |
1 files changed, 128 insertions, 12 deletions
diff --git a/vendor/github.com/hashicorp/terraform/registry/client.go b/vendor/github.com/hashicorp/terraform/registry/client.go index a18e6b8..93424d1 100644 --- a/vendor/github.com/hashicorp/terraform/registry/client.go +++ b/vendor/github.com/hashicorp/terraform/registry/client.go | |||
@@ -20,10 +20,11 @@ import ( | |||
20 | ) | 20 | ) |
21 | 21 | ||
22 | const ( | 22 | const ( |
23 | xTerraformGet = "X-Terraform-Get" | 23 | xTerraformGet = "X-Terraform-Get" |
24 | xTerraformVersion = "X-Terraform-Version" | 24 | xTerraformVersion = "X-Terraform-Version" |
25 | requestTimeout = 10 * time.Second | 25 | requestTimeout = 10 * time.Second |
26 | serviceID = "modules.v1" | 26 | modulesServiceID = "modules.v1" |
27 | providersServiceID = "providers.v1" | ||
27 | ) | 28 | ) |
28 | 29 | ||
29 | var tfVersion = version.String() | 30 | var tfVersion = version.String() |
@@ -58,10 +59,10 @@ func NewClient(services *disco.Disco, client *http.Client) *Client { | |||
58 | } | 59 | } |
59 | 60 | ||
60 | // Discover queries the host, and returns the url for the registry. | 61 | // Discover queries the host, and returns the url for the registry. |
61 | func (c *Client) Discover(host svchost.Hostname) (*url.URL, error) { | 62 | func (c *Client) Discover(host svchost.Hostname, serviceID string) (*url.URL, error) { |
62 | service, err := c.services.DiscoverServiceURL(host, serviceID) | 63 | service, err := c.services.DiscoverServiceURL(host, serviceID) |
63 | if err != nil { | 64 | if err != nil { |
64 | return nil, err | 65 | return nil, &ServiceUnreachableError{err} |
65 | } | 66 | } |
66 | if !strings.HasSuffix(service.Path, "/") { | 67 | if !strings.HasSuffix(service.Path, "/") { |
67 | service.Path += "/" | 68 | service.Path += "/" |
@@ -69,14 +70,14 @@ func (c *Client) Discover(host svchost.Hostname) (*url.URL, error) { | |||
69 | return service, nil | 70 | return service, nil |
70 | } | 71 | } |
71 | 72 | ||
72 | // Versions queries the registry for a module, and returns the available versions. | 73 | // ModuleVersions queries the registry for a module, and returns the available versions. |
73 | func (c *Client) Versions(module *regsrc.Module) (*response.ModuleVersions, error) { | 74 | func (c *Client) ModuleVersions(module *regsrc.Module) (*response.ModuleVersions, error) { |
74 | host, err := module.SvcHost() | 75 | host, err := module.SvcHost() |
75 | if err != nil { | 76 | if err != nil { |
76 | return nil, err | 77 | return nil, err |
77 | } | 78 | } |
78 | 79 | ||
79 | service, err := c.Discover(host) | 80 | service, err := c.Discover(host, modulesServiceID) |
80 | if err != nil { | 81 | if err != nil { |
81 | return nil, err | 82 | return nil, err |
82 | } | 83 | } |
@@ -141,15 +142,15 @@ func (c *Client) addRequestCreds(host svchost.Hostname, req *http.Request) { | |||
141 | } | 142 | } |
142 | } | 143 | } |
143 | 144 | ||
144 | // Location find the download location for a specific version module. | 145 | // ModuleLocation find the download location for a specific version module. |
145 | // This returns a string, because the final location may contain special go-getter syntax. | 146 | // This returns a string, because the final location may contain special go-getter syntax. |
146 | func (c *Client) Location(module *regsrc.Module, version string) (string, error) { | 147 | func (c *Client) ModuleLocation(module *regsrc.Module, version string) (string, error) { |
147 | host, err := module.SvcHost() | 148 | host, err := module.SvcHost() |
148 | if err != nil { | 149 | if err != nil { |
149 | return "", err | 150 | return "", err |
150 | } | 151 | } |
151 | 152 | ||
152 | service, err := c.Discover(host) | 153 | service, err := c.Discover(host, modulesServiceID) |
153 | if err != nil { | 154 | if err != nil { |
154 | return "", err | 155 | return "", err |
155 | } | 156 | } |
@@ -225,3 +226,118 @@ func (c *Client) Location(module *regsrc.Module, version string) (string, error) | |||
225 | 226 | ||
226 | return location, nil | 227 | return location, nil |
227 | } | 228 | } |
229 | |||
230 | // TerraformProviderVersions queries the registry for a provider, and returns the available versions. | ||
231 | func (c *Client) TerraformProviderVersions(provider *regsrc.TerraformProvider) (*response.TerraformProviderVersions, error) { | ||
232 | host, err := provider.SvcHost() | ||
233 | if err != nil { | ||
234 | return nil, err | ||
235 | } | ||
236 | |||
237 | service, err := c.Discover(host, providersServiceID) | ||
238 | if err != nil { | ||
239 | return nil, err | ||
240 | } | ||
241 | |||
242 | p, err := url.Parse(path.Join(provider.TerraformProvider(), "versions")) | ||
243 | if err != nil { | ||
244 | return nil, err | ||
245 | } | ||
246 | |||
247 | service = service.ResolveReference(p) | ||
248 | |||
249 | log.Printf("[DEBUG] fetching provider versions from %q", service) | ||
250 | |||
251 | req, err := http.NewRequest("GET", service.String(), nil) | ||
252 | if err != nil { | ||
253 | return nil, err | ||
254 | } | ||
255 | |||
256 | c.addRequestCreds(host, req) | ||
257 | req.Header.Set(xTerraformVersion, tfVersion) | ||
258 | |||
259 | resp, err := c.client.Do(req) | ||
260 | if err != nil { | ||
261 | return nil, err | ||
262 | } | ||
263 | defer resp.Body.Close() | ||
264 | |||
265 | switch resp.StatusCode { | ||
266 | case http.StatusOK: | ||
267 | // OK | ||
268 | case http.StatusNotFound: | ||
269 | return nil, &errProviderNotFound{addr: provider} | ||
270 | default: | ||
271 | return nil, fmt.Errorf("error looking up provider versions: %s", resp.Status) | ||
272 | } | ||
273 | |||
274 | var versions response.TerraformProviderVersions | ||
275 | |||
276 | dec := json.NewDecoder(resp.Body) | ||
277 | if err := dec.Decode(&versions); err != nil { | ||
278 | return nil, err | ||
279 | } | ||
280 | |||
281 | return &versions, nil | ||
282 | } | ||
283 | |||
284 | // TerraformProviderLocation queries the registry for a provider download metadata | ||
285 | func (c *Client) TerraformProviderLocation(provider *regsrc.TerraformProvider, version string) (*response.TerraformProviderPlatformLocation, error) { | ||
286 | host, err := provider.SvcHost() | ||
287 | if err != nil { | ||
288 | return nil, err | ||
289 | } | ||
290 | |||
291 | service, err := c.Discover(host, providersServiceID) | ||
292 | if err != nil { | ||
293 | return nil, err | ||
294 | } | ||
295 | |||
296 | p, err := url.Parse(path.Join( | ||
297 | provider.TerraformProvider(), | ||
298 | version, | ||
299 | "download", | ||
300 | provider.OS, | ||
301 | provider.Arch, | ||
302 | )) | ||
303 | if err != nil { | ||
304 | return nil, err | ||
305 | } | ||
306 | |||
307 | service = service.ResolveReference(p) | ||
308 | |||
309 | log.Printf("[DEBUG] fetching provider location from %q", service) | ||
310 | |||
311 | req, err := http.NewRequest("GET", service.String(), nil) | ||
312 | if err != nil { | ||
313 | return nil, err | ||
314 | } | ||
315 | |||
316 | c.addRequestCreds(host, req) | ||
317 | req.Header.Set(xTerraformVersion, tfVersion) | ||
318 | |||
319 | resp, err := c.client.Do(req) | ||
320 | if err != nil { | ||
321 | return nil, err | ||
322 | } | ||
323 | defer resp.Body.Close() | ||
324 | |||
325 | var loc response.TerraformProviderPlatformLocation | ||
326 | |||
327 | dec := json.NewDecoder(resp.Body) | ||
328 | if err := dec.Decode(&loc); err != nil { | ||
329 | return nil, err | ||
330 | } | ||
331 | |||
332 | switch resp.StatusCode { | ||
333 | case http.StatusOK, http.StatusNoContent: | ||
334 | // OK | ||
335 | case http.StatusNotFound: | ||
336 | return nil, fmt.Errorf("provider %q version %q not found", provider.TerraformProvider(), version) | ||
337 | default: | ||
338 | // anything else is an error: | ||
339 | return nil, fmt.Errorf("error getting download location for %q: %s", provider.TerraformProvider(), resp.Status) | ||
340 | } | ||
341 | |||
342 | return &loc, nil | ||
343 | } | ||