prune ResourceProviderFullName and its callers
This commit is contained in:
parent
b143c04216
commit
c2bc88fc23
|
@ -252,35 +252,6 @@ func (r *Resource) Id() string {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ProviderFullName returns the full name of the provider for this resource,
|
|
||||||
// which may either be specified explicitly using the "provider" meta-argument
|
|
||||||
// or implied by the prefix on the resource type name.
|
|
||||||
func (r *Resource) ProviderFullName() string {
|
|
||||||
return ResourceProviderFullName(r.Type, r.Provider)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ResourceProviderFullName returns the full (dependable) name of the
|
|
||||||
// provider for a hypothetical resource with the given resource type and
|
|
||||||
// explicit provider string. If the explicit provider string is empty then
|
|
||||||
// the provider name is inferred from the resource type name.
|
|
||||||
func ResourceProviderFullName(resourceType, explicitProvider string) string {
|
|
||||||
if explicitProvider != "" {
|
|
||||||
// check for an explicit provider name, or return the original
|
|
||||||
parts := strings.SplitAfter(explicitProvider, "provider.")
|
|
||||||
return parts[len(parts)-1]
|
|
||||||
}
|
|
||||||
|
|
||||||
idx := strings.IndexRune(resourceType, '_')
|
|
||||||
if idx == -1 {
|
|
||||||
// If no underscores, the resource name is assumed to be
|
|
||||||
// also the provider name, e.g. if the provider exposes
|
|
||||||
// only a single resource of each type.
|
|
||||||
return resourceType
|
|
||||||
}
|
|
||||||
|
|
||||||
return resourceType[:idx]
|
|
||||||
}
|
|
||||||
|
|
||||||
// Validate does some basic semantic checking of the configuration.
|
// Validate does some basic semantic checking of the configuration.
|
||||||
func (c *Config) Validate() tfdiags.Diagnostics {
|
func (c *Config) Validate() tfdiags.Diagnostics {
|
||||||
if c == nil {
|
if c == nil {
|
||||||
|
|
|
@ -795,56 +795,6 @@ func TestConfigProviderVersion(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestResourceProviderFullName(t *testing.T) {
|
|
||||||
type testCase struct {
|
|
||||||
ResourceName string
|
|
||||||
Alias string
|
|
||||||
Expected string
|
|
||||||
}
|
|
||||||
|
|
||||||
tests := []testCase{
|
|
||||||
{
|
|
||||||
// If no alias is provided, the first underscore-separated segment
|
|
||||||
// is assumed to be the provider name.
|
|
||||||
ResourceName: "aws_thing",
|
|
||||||
Alias: "",
|
|
||||||
Expected: "aws",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
// If we have more than one underscore then it's the first one that we'll use.
|
|
||||||
ResourceName: "aws_thingy_thing",
|
|
||||||
Alias: "",
|
|
||||||
Expected: "aws",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
// A provider can export a resource whose name is just the bare provider name,
|
|
||||||
// e.g. because the provider only has one resource and so any additional
|
|
||||||
// parts would be redundant.
|
|
||||||
ResourceName: "external",
|
|
||||||
Alias: "",
|
|
||||||
Expected: "external",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
// Alias always overrides the default extraction of the name
|
|
||||||
ResourceName: "aws_thing",
|
|
||||||
Alias: "tls.baz",
|
|
||||||
Expected: "tls.baz",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, test := range tests {
|
|
||||||
got := ResourceProviderFullName(test.ResourceName, test.Alias)
|
|
||||||
if got != test.Expected {
|
|
||||||
t.Errorf(
|
|
||||||
"(%q, %q) produced %q; want %q",
|
|
||||||
test.ResourceName, test.Alias,
|
|
||||||
got,
|
|
||||||
test.Expected,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestConfigModuleProviders(t *testing.T) {
|
func TestConfigModuleProviders(t *testing.T) {
|
||||||
c := testConfig(t, "module-providers")
|
c := testConfig(t, "module-providers")
|
||||||
|
|
||||||
|
|
|
@ -13,48 +13,6 @@ type ProviderVersionConstraint struct {
|
||||||
// ProviderVersionConstraint, as produced by Config.RequiredProviders.
|
// ProviderVersionConstraint, as produced by Config.RequiredProviders.
|
||||||
type ProviderVersionConstraints map[string]ProviderVersionConstraint
|
type ProviderVersionConstraints map[string]ProviderVersionConstraint
|
||||||
|
|
||||||
// RequiredProviders returns the ProviderVersionConstraints for this
|
|
||||||
// module.
|
|
||||||
//
|
|
||||||
// This includes both providers that are explicitly requested by provider
|
|
||||||
// blocks and those that are used implicitly by instantiating one of their
|
|
||||||
// resource types. In the latter case, the returned semver Range will
|
|
||||||
// accept any version of the provider.
|
|
||||||
func (c *Config) RequiredProviders() ProviderVersionConstraints {
|
|
||||||
ret := make(ProviderVersionConstraints, len(c.ProviderConfigs))
|
|
||||||
|
|
||||||
configs := c.ProviderConfigsByFullName()
|
|
||||||
|
|
||||||
// In order to find the *implied* dependencies (those without explicit
|
|
||||||
// "provider" blocks) we need to walk over all of the resources and
|
|
||||||
// cross-reference with the provider configs.
|
|
||||||
for _, rc := range c.Resources {
|
|
||||||
providerName := rc.ProviderFullName()
|
|
||||||
var providerType string
|
|
||||||
|
|
||||||
// Default to (effectively) no constraint whatsoever, but we might
|
|
||||||
// override if there's an explicit constraint in config.
|
|
||||||
constraint := ">=0.0.0"
|
|
||||||
|
|
||||||
config, ok := configs[providerName]
|
|
||||||
if ok {
|
|
||||||
if config.Version != "" {
|
|
||||||
constraint = config.Version
|
|
||||||
}
|
|
||||||
providerType = config.Name
|
|
||||||
} else {
|
|
||||||
providerType = providerName
|
|
||||||
}
|
|
||||||
|
|
||||||
ret[providerName] = ProviderVersionConstraint{
|
|
||||||
ProviderType: providerType,
|
|
||||||
Constraint: constraint,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret
|
|
||||||
}
|
|
||||||
|
|
||||||
// RequiredRanges returns a semver.Range for each distinct provider type in
|
// RequiredRanges returns a semver.Range for each distinct provider type in
|
||||||
// the constraint map. If the same provider type appears more than once
|
// the constraint map. If the same provider type appears more than once
|
||||||
// (e.g. because aliases are in use) then their respective constraints are
|
// (e.g. because aliases are in use) then their respective constraints are
|
||||||
|
|
|
@ -2,8 +2,6 @@ package terraform
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"sort"
|
"sort"
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/config"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Semaphore is a wrapper around a channel to provide
|
// Semaphore is a wrapper around a channel to provide
|
||||||
|
@ -48,10 +46,6 @@ func (s Semaphore) Release() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func resourceProvider(resourceType, explicitProvider string) string {
|
|
||||||
return config.ResourceProviderFullName(resourceType, explicitProvider)
|
|
||||||
}
|
|
||||||
|
|
||||||
// strSliceContains checks if a given string is contained in a slice
|
// strSliceContains checks if a given string is contained in a slice
|
||||||
// When anybody asks why Go needs generics, here you go.
|
// When anybody asks why Go needs generics, here you go.
|
||||||
func strSliceContains(haystack []string, needle string) bool {
|
func strSliceContains(haystack []string, needle string) bool {
|
||||||
|
|
Loading…
Reference in New Issue