opentofu/internal/getproviders/types.go
Martin Atkins c8f7223adb internal/getproviders: Source interface for generalization
We intend to support installation both directly from origin registries and
from mirrors in the local filesystem or over the network. This Source
interface will serve as our abstraction over those three options, allowing
calling code to treat them all the same.
2020-01-10 09:41:27 -08:00

81 lines
2.5 KiB
Go

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
Filename string
Location PackageLocation
SHA256Sum [sha256.Size]byte
// TODO: Extra metadata for signature verification
}
// 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() {}