2019-12-19 19:24:14 -06:00
|
|
|
package getproviders
|
|
|
|
|
|
|
|
import (
|
|
|
|
"crypto/sha256"
|
|
|
|
"runtime"
|
|
|
|
|
|
|
|
"github.com/apparentlymart/go-versions/versions"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Version represents a particular single version of a provider.
|
|
|
|
type Version = versions.Version
|
|
|
|
|
|
|
|
// VersionList represents a list of versions. It is a []Version with some
|
|
|
|
// extra methods for convenient filtering.
|
|
|
|
type VersionList = versions.List
|
|
|
|
|
|
|
|
// ParseVersion parses a "semver"-style version string into a Version value,
|
|
|
|
// which is the version syntax we use for provider versions.
|
|
|
|
func ParseVersion(str string) (Version, error) {
|
|
|
|
return versions.ParseVersion(str)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Platform represents a target platform that a provider is or might be
|
|
|
|
// available for.
|
|
|
|
type Platform struct {
|
|
|
|
OS, Arch string
|
|
|
|
}
|
|
|
|
|
|
|
|
func (p Platform) String() string {
|
|
|
|
return p.OS + "_" + p.Arch
|
|
|
|
}
|
|
|
|
|
|
|
|
// CurrentPlatform is the platform where the current program is running.
|
|
|
|
//
|
|
|
|
// If attempting to install providers for use on the same system where the
|
|
|
|
// installation process is running, this is the right platform to use.
|
|
|
|
var CurrentPlatform = Platform{
|
|
|
|
OS: runtime.GOOS,
|
|
|
|
Arch: runtime.GOARCH,
|
|
|
|
}
|
|
|
|
|
|
|
|
// PackageMeta represents the metadata related to a particular downloadable
|
|
|
|
// provider package targeting a single platform.
|
|
|
|
//
|
|
|
|
// Package findproviders does no signature verification or protocol version
|
|
|
|
// compatibility checking of its own. A caller receving a PackageMeta must
|
|
|
|
// verify that it has a correct signature and supports a protocol version
|
|
|
|
// accepted by the current version of Terraform before trying to use the
|
|
|
|
// described package.
|
|
|
|
type PackageMeta struct {
|
|
|
|
ProtocolVersions VersionList
|
|
|
|
TargetPlatform Platform
|
|
|
|
|
2020-01-08 18:24:41 -06:00
|
|
|
Filename string
|
|
|
|
Location PackageLocation
|
|
|
|
SHA256Sum [sha256.Size]byte
|
2019-12-19 19:24:14 -06:00
|
|
|
|
|
|
|
// TODO: Extra metadata for signature verification
|
|
|
|
}
|
2020-01-08 18:24:41 -06:00
|
|
|
|
|
|
|
// PackageLocation represents a location where a provider distribution package
|
|
|
|
// can be obtained. A value of this type contains either a PackageLocalPath or a
|
|
|
|
// PackageHTTPURL value.
|
|
|
|
type PackageLocation interface {
|
|
|
|
packageLocation()
|
|
|
|
}
|
|
|
|
|
|
|
|
// PackageLocalPath is a provider package location in the local filesystem.
|
|
|
|
// Its value is a local filesystem path using the syntax understood by Go's
|
|
|
|
// standard path/filepath package on the operating system where Terraform is
|
|
|
|
// running.
|
|
|
|
type PackageLocalPath string
|
|
|
|
|
|
|
|
func (p PackageLocalPath) packageLocation() {}
|
|
|
|
|
|
|
|
// PackageHTTPURL is a provider package location accessible via HTTP.
|
|
|
|
// Its value is a URL string using either the http: scheme or the https: scheme.
|
|
|
|
type PackageHTTPURL string
|
|
|
|
|
|
|
|
func (p PackageHTTPURL) packageLocation() {}
|