2019-12-20 02:24:14 +01: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-09 01:24:41 +01:00
|
|
|
Filename string
|
|
|
|
Location PackageLocation
|
|
|
|
SHA256Sum [sha256.Size]byte
|
2019-12-20 02:24:14 +01:00
|
|
|
|
|
|
|
// TODO: Extra metadata for signature verification
|
|
|
|
}
|
2020-01-09 01:24:41 +01:00
|
|
|
|
|
|
|
// PackageLocation represents a location where a provider distribution package
|
2020-01-10 02:54:16 +01:00
|
|
|
// can be obtained. A value of this type contains one of the following
|
|
|
|
// concrete types: PackageLocalArchive, PackageLocalDir, or PackageHTTPURL.
|
2020-01-09 01:24:41 +01:00
|
|
|
type PackageLocation interface {
|
|
|
|
packageLocation()
|
|
|
|
}
|
|
|
|
|
2020-01-10 02:54:16 +01:00
|
|
|
// PackageLocalArchive is the location of a provider distribution archive file
|
|
|
|
// 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 PackageLocalArchive string
|
2020-01-09 01:24:41 +01:00
|
|
|
|
2020-01-10 02:54:16 +01:00
|
|
|
func (p PackageLocalArchive) packageLocation() {}
|
|
|
|
|
|
|
|
// PackageLocalDir is the location of a directory containing an unpacked
|
|
|
|
// provider distribution archive 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 PackageLocalDir string
|
|
|
|
|
|
|
|
func (p PackageLocalDir) packageLocation() {}
|
2020-01-09 01:24:41 +01:00
|
|
|
|
|
|
|
// 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() {}
|