mirror of https://github.com/hashicorp/terraform
These new functions allow command implementations to get hold of the providercache objects and installation source object derived from the current CLI configuration.f-provider-source-local-discovery
parent
e4d7a71d91
commit
754b7ebb65
@ -0,0 +1,63 @@
|
||||
package command
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
|
||||
"github.com/hashicorp/terraform/internal/getproviders"
|
||||
"github.com/hashicorp/terraform/internal/providercache"
|
||||
)
|
||||
|
||||
// providerLocalCacheDir returns an object representing the
|
||||
// configuration-specific local cache directory. This is the
|
||||
// only location consulted for provider plugin packages for Terraform
|
||||
// operations other than provider installation.
|
||||
//
|
||||
// Only the provider installer (in "terraform init") is permitted to make
|
||||
// modifications to this cache directory. All other commands must treat it
|
||||
// as read-only.
|
||||
func (m *Meta) providerLocalCacheDir() *providercache.Dir {
|
||||
dir := filepath.Join(m.DataDir(), "plugins")
|
||||
if dir == "" {
|
||||
return nil // cache disabled
|
||||
}
|
||||
return providercache.NewDir(dir)
|
||||
}
|
||||
|
||||
// providerGlobalCacheDir returns an object representing the shared global
|
||||
// provider cache directory, used as a read-through cache when installing
|
||||
// new provider plugin packages.
|
||||
//
|
||||
// This function may return nil, in which case there is no global cache
|
||||
// configured and new packages should be downloaded directly into individual
|
||||
// configuration-specific cache directories.
|
||||
func (m *Meta) providerGlobalCacheDir() *providercache.Dir {
|
||||
dir := m.PluginCacheDir
|
||||
if dir == "" {
|
||||
return nil // cache disabled
|
||||
}
|
||||
return providercache.NewDir(dir)
|
||||
}
|
||||
|
||||
// providerInstallSource returns an object that knows how to consult one or
|
||||
// more external sources to determine the availability of and package
|
||||
// locations for versions of Terraform providers that are available for
|
||||
// automatic installation.
|
||||
//
|
||||
// This returns the standard provider install source that consults a number
|
||||
// of directories selected either automatically or via the CLI configuration.
|
||||
// Users may choose to override this during a "terraform init" command by
|
||||
// specifying one or more -plugin-dir options, in which case the installation
|
||||
// process will construct its own source consulting only those directories
|
||||
// and use that instead.
|
||||
func (m *Meta) providerInstallSource() getproviders.Source {
|
||||
// A provider source should always be provided in normal use, but our
|
||||
// unit tests might not always populate Meta fully and so we'll be robust
|
||||
// by returning a non-nil source that just always answers that no plugins
|
||||
// are available.
|
||||
if m.ProviderSource == nil {
|
||||
// A multi-source with no underlying sources is effectively an
|
||||
// always-empty source.
|
||||
return getproviders.MultiSource(nil)
|
||||
}
|
||||
return m.ProviderSource
|
||||
}
|
||||
Loading…
Reference in new issue