64 lines
2.4 KiB
Go
64 lines
2.4 KiB
Go
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
|
|
}
|