terraform/registry/regsrc/terraform_provider.go

61 lines
1.4 KiB
Go

package regsrc
import (
"fmt"
"runtime"
"strings"
"github.com/hashicorp/terraform-svchost"
)
var (
// DefaultProviderNamespace represents the namespace for canonical
// HashiCorp-controlled providers.
DefaultProviderNamespace = "-"
)
// 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.
func NewTerraformProvider(name, os, arch string) *TerraformProvider {
if os == "" {
os = runtime.GOOS
}
if arch == "" {
arch = runtime.GOARCH
}
// separate namespace if included
namespace := DefaultProviderNamespace
if names := strings.SplitN(name, "/", 2); len(names) == 2 {
namespace, name = names[0], names[1]
}
p := &TerraformProvider{
RawHost: PublicRegistryHost,
RawNamespace: namespace,
RawName: name,
OS: os,
Arch: arch,
}
return p
}
// 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)
}