diff options
Diffstat (limited to 'vendor/github.com/hashicorp/terraform/plugin/discovery/get_cache.go')
-rw-r--r-- | vendor/github.com/hashicorp/terraform/plugin/discovery/get_cache.go | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/vendor/github.com/hashicorp/terraform/plugin/discovery/get_cache.go b/vendor/github.com/hashicorp/terraform/plugin/discovery/get_cache.go new file mode 100644 index 0000000..1a10042 --- /dev/null +++ b/vendor/github.com/hashicorp/terraform/plugin/discovery/get_cache.go | |||
@@ -0,0 +1,48 @@ | |||
1 | package discovery | ||
2 | |||
3 | // PluginCache is an interface implemented by objects that are able to maintain | ||
4 | // a cache of plugins. | ||
5 | type PluginCache interface { | ||
6 | // CachedPluginPath returns a path where the requested plugin is already | ||
7 | // cached, or an empty string if the requested plugin is not yet cached. | ||
8 | CachedPluginPath(kind string, name string, version Version) string | ||
9 | |||
10 | // InstallDir returns the directory that new plugins should be installed into | ||
11 | // in order to populate the cache. This directory should be used as the | ||
12 | // first argument to getter.Get when downloading plugins with go-getter. | ||
13 | // | ||
14 | // After installing into this directory, use CachedPluginPath to obtain the | ||
15 | // path where the plugin was installed. | ||
16 | InstallDir() string | ||
17 | } | ||
18 | |||
19 | // NewLocalPluginCache returns a PluginCache that caches plugins in a | ||
20 | // given local directory. | ||
21 | func NewLocalPluginCache(dir string) PluginCache { | ||
22 | return &pluginCache{ | ||
23 | Dir: dir, | ||
24 | } | ||
25 | } | ||
26 | |||
27 | type pluginCache struct { | ||
28 | Dir string | ||
29 | } | ||
30 | |||
31 | func (c *pluginCache) CachedPluginPath(kind string, name string, version Version) string { | ||
32 | allPlugins := FindPlugins(kind, []string{c.Dir}) | ||
33 | plugins := allPlugins.WithName(name).WithVersion(version) | ||
34 | |||
35 | if plugins.Count() == 0 { | ||
36 | // nothing cached | ||
37 | return "" | ||
38 | } | ||
39 | |||
40 | // There should generally be only one plugin here; if there's more than | ||
41 | // one match for some reason then we'll just choose one arbitrarily. | ||
42 | plugin := plugins.Newest() | ||
43 | return plugin.Path | ||
44 | } | ||
45 | |||
46 | func (c *pluginCache) InstallDir() string { | ||
47 | return c.Dir | ||
48 | } | ||