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) }