2018-07-27 20:59:03 +02:00
|
|
|
package regsrc
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"runtime"
|
|
|
|
|
|
|
|
"github.com/hashicorp/terraform/svchost"
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
// DefaultProviderNamespace represents the namespace for canonical
|
|
|
|
// HashiCorp-controlled providers.
|
|
|
|
// REVIEWERS: Naming things is hard.
|
|
|
|
// * HashiCorpProviderNameSpace?
|
|
|
|
// * OfficialP...?
|
|
|
|
// * CanonicalP...?
|
|
|
|
DefaultProviderNamespace = "terraform-providers"
|
|
|
|
)
|
|
|
|
|
|
|
|
// TerraformProvider describes a Terraform Registry Provider source.
|
|
|
|
type TerraformProvider struct {
|
|
|
|
RawHost *FriendlyHost
|
|
|
|
RawNamespace string
|
|
|
|
RawName string
|
|
|
|
OS string
|
|
|
|
Arch string
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewTerraformProvider constructs a new provider source.
|
2018-08-02 17:45:55 +02:00
|
|
|
func NewTerraformProvider(name, os, arch string) *TerraformProvider {
|
2018-07-27 20:59:03 +02:00
|
|
|
if os == "" {
|
|
|
|
os = runtime.GOOS
|
|
|
|
}
|
|
|
|
if arch == "" {
|
|
|
|
arch = runtime.GOARCH
|
|
|
|
}
|
|
|
|
|
|
|
|
p := &TerraformProvider{
|
|
|
|
RawHost: PublicRegistryHost,
|
|
|
|
RawNamespace: DefaultProviderNamespace,
|
|
|
|
RawName: name,
|
|
|
|
OS: os,
|
|
|
|
Arch: arch,
|
|
|
|
}
|
|
|
|
|
2018-08-02 17:45:55 +02:00
|
|
|
return p
|
2018-07-27 20:59:03 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// Provider returns just the registry ID of the provider
|
|
|
|
func (p *TerraformProvider) TerraformProvider() string {
|
|
|
|
return fmt.Sprintf("%s/%s", p.RawNamespace, p.RawName)
|
|
|
|
}
|
|
|
|
|
|
|
|
// SvcHost returns the svchost.Hostname for this provider. The
|
|
|
|
// default PublicRegistryHost is returned.
|
|
|
|
func (p *TerraformProvider) SvcHost() (svchost.Hostname, error) {
|
|
|
|
return svchost.ForComparison(PublicRegistryHost.Raw)
|
|
|
|
}
|