diff options
Diffstat (limited to 'vendor/github.com/hashicorp/terraform/config/module/get.go')
-rw-r--r-- | vendor/github.com/hashicorp/terraform/config/module/get.go | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/vendor/github.com/hashicorp/terraform/config/module/get.go b/vendor/github.com/hashicorp/terraform/config/module/get.go new file mode 100644 index 0000000..96b4a63 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform/config/module/get.go | |||
@@ -0,0 +1,71 @@ | |||
1 | package module | ||
2 | |||
3 | import ( | ||
4 | "io/ioutil" | ||
5 | "os" | ||
6 | |||
7 | "github.com/hashicorp/go-getter" | ||
8 | ) | ||
9 | |||
10 | // GetMode is an enum that describes how modules are loaded. | ||
11 | // | ||
12 | // GetModeLoad says that modules will not be downloaded or updated, they will | ||
13 | // only be loaded from the storage. | ||
14 | // | ||
15 | // GetModeGet says that modules can be initially downloaded if they don't | ||
16 | // exist, but otherwise to just load from the current version in storage. | ||
17 | // | ||
18 | // GetModeUpdate says that modules should be checked for updates and | ||
19 | // downloaded prior to loading. If there are no updates, we load the version | ||
20 | // from disk, otherwise we download first and then load. | ||
21 | type GetMode byte | ||
22 | |||
23 | const ( | ||
24 | GetModeNone GetMode = iota | ||
25 | GetModeGet | ||
26 | GetModeUpdate | ||
27 | ) | ||
28 | |||
29 | // GetCopy is the same as Get except that it downloads a copy of the | ||
30 | // module represented by source. | ||
31 | // | ||
32 | // This copy will omit and dot-prefixed files (such as .git/, .hg/) and | ||
33 | // can't be updated on its own. | ||
34 | func GetCopy(dst, src string) error { | ||
35 | // Create the temporary directory to do the real Get to | ||
36 | tmpDir, err := ioutil.TempDir("", "tf") | ||
37 | if err != nil { | ||
38 | return err | ||
39 | } | ||
40 | // FIXME: This isn't completely safe. Creating and removing our temp path | ||
41 | // exposes where to race to inject files. | ||
42 | if err := os.RemoveAll(tmpDir); err != nil { | ||
43 | return err | ||
44 | } | ||
45 | defer os.RemoveAll(tmpDir) | ||
46 | |||
47 | // Get to that temporary dir | ||
48 | if err := getter.Get(tmpDir, src); err != nil { | ||
49 | return err | ||
50 | } | ||
51 | |||
52 | // Make sure the destination exists | ||
53 | if err := os.MkdirAll(dst, 0755); err != nil { | ||
54 | return err | ||
55 | } | ||
56 | |||
57 | // Copy to the final location | ||
58 | return copyDir(dst, tmpDir) | ||
59 | } | ||
60 | |||
61 | func getStorage(s getter.Storage, key string, src string, mode GetMode) (string, bool, error) { | ||
62 | // Get the module with the level specified if we were told to. | ||
63 | if mode > GetModeNone { | ||
64 | if err := s.Get(key, src, mode == GetModeUpdate); err != nil { | ||
65 | return "", false, err | ||
66 | } | ||
67 | } | ||
68 | |||
69 | // Get the directory where the module is. | ||
70 | return s.Dir(key) | ||
71 | } | ||