internal/getproviders: apply case normalizations in ParseMultiSourceMatchingPatterns (#24753)
* internal/getproviders: apply case normalizations in ParseMultiSourceMatchingPatterns This is a very minor refactor which takes advantage of addrs.ParseProviderPart case normalization to normalize non-wildcard sources.
This commit is contained in:
parent
1ce3c60693
commit
320fcf4942
|
@ -119,8 +119,9 @@ type MultiSourceSelector struct {
|
||||||
type MultiSourceMatchingPatterns []addrs.Provider
|
type MultiSourceMatchingPatterns []addrs.Provider
|
||||||
|
|
||||||
// ParseMultiSourceMatchingPatterns parses a slice of strings containing the
|
// ParseMultiSourceMatchingPatterns parses a slice of strings containing the
|
||||||
// string form of provider matching patterns and, if all the given strings
|
// string form of provider matching patterns and, if all the given strings are
|
||||||
// are valid, returns the corresponding MultiSourceMatchingPatterns value.
|
// valid, returns the corresponding, normalized, MultiSourceMatchingPatterns
|
||||||
|
// value.
|
||||||
func ParseMultiSourceMatchingPatterns(strs []string) (MultiSourceMatchingPatterns, error) {
|
func ParseMultiSourceMatchingPatterns(strs []string) (MultiSourceMatchingPatterns, error) {
|
||||||
if len(strs) == 0 {
|
if len(strs) == 0 {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
|
@ -151,17 +152,19 @@ func ParseMultiSourceMatchingPatterns(strs []string) (MultiSourceMatchingPattern
|
||||||
parts = parts[1:]
|
parts = parts[1:]
|
||||||
}
|
}
|
||||||
|
|
||||||
if !validProviderNameOrWildcard(parts[1]) {
|
pType, err := normalizeProviderNameOrWildcard(parts[1])
|
||||||
|
if err != nil {
|
||||||
return nil, fmt.Errorf("invalid provider type %q in provider matching pattern %q: must either be the wildcard * or a provider type name", parts[1], str)
|
return nil, fmt.Errorf("invalid provider type %q in provider matching pattern %q: must either be the wildcard * or a provider type name", parts[1], str)
|
||||||
}
|
}
|
||||||
if !validProviderNameOrWildcard(parts[0]) {
|
namespace, err := normalizeProviderNameOrWildcard(parts[0])
|
||||||
|
if err != nil {
|
||||||
return nil, fmt.Errorf("invalid registry namespace %q in provider matching pattern %q: must either be the wildcard * or a literal namespace", parts[1], str)
|
return nil, fmt.Errorf("invalid registry namespace %q in provider matching pattern %q: must either be the wildcard * or a literal namespace", parts[1], str)
|
||||||
}
|
}
|
||||||
|
|
||||||
ret[i] = addrs.Provider{
|
ret[i] = addrs.Provider{
|
||||||
Hostname: host,
|
Hostname: host,
|
||||||
Namespace: parts[0],
|
Namespace: namespace,
|
||||||
Type: parts[1],
|
Type: pType,
|
||||||
}
|
}
|
||||||
|
|
||||||
if ret[i].Hostname == svchost.Hostname(Wildcard) && !(ret[i].Namespace == Wildcard && ret[i].Type == Wildcard) {
|
if ret[i].Hostname == svchost.Hostname(Wildcard) && !(ret[i].Namespace == Wildcard && ret[i].Type == Wildcard) {
|
||||||
|
@ -215,10 +218,9 @@ const Wildcard string = "*"
|
||||||
// by definition.
|
// by definition.
|
||||||
var defaultRegistryHost = addrs.DefaultRegistryHost
|
var defaultRegistryHost = addrs.DefaultRegistryHost
|
||||||
|
|
||||||
func validProviderNameOrWildcard(s string) bool {
|
func normalizeProviderNameOrWildcard(s string) (string, error) {
|
||||||
if s == Wildcard {
|
if s == Wildcard {
|
||||||
return true
|
return s, nil
|
||||||
}
|
}
|
||||||
_, err := addrs.ParseProviderPart(s)
|
return addrs.ParseProviderPart(s)
|
||||||
return err == nil
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -323,6 +323,14 @@ func TestMultiSourceSelector(t *testing.T) {
|
||||||
addrs.NewDefaultProvider("foo"),
|
addrs.NewDefaultProvider("foo"),
|
||||||
true,
|
true,
|
||||||
},
|
},
|
||||||
|
"default provider with non-normalized include constraint that matches it via type wildcard": {
|
||||||
|
MultiSourceSelector{
|
||||||
|
Source: emptySource,
|
||||||
|
Include: mustParseMultiSourceMatchingPatterns("HashiCorp/*"),
|
||||||
|
},
|
||||||
|
addrs.NewDefaultProvider("foo"),
|
||||||
|
true,
|
||||||
|
},
|
||||||
"built-in provider with exact include constraint that does not match it": {
|
"built-in provider with exact include constraint that does not match it": {
|
||||||
MultiSourceSelector{
|
MultiSourceSelector{
|
||||||
Source: emptySource,
|
Source: emptySource,
|
||||||
|
@ -383,6 +391,14 @@ func TestMultiSourceSelector(t *testing.T) {
|
||||||
addrs.NewDefaultProvider("foo"),
|
addrs.NewDefaultProvider("foo"),
|
||||||
true,
|
true,
|
||||||
},
|
},
|
||||||
|
"default provider with non-normalized exclude constraint that matches it via type wildcard": {
|
||||||
|
MultiSourceSelector{
|
||||||
|
Source: emptySource,
|
||||||
|
Exclude: mustParseMultiSourceMatchingPatterns("HashiCorp/*"),
|
||||||
|
},
|
||||||
|
addrs.NewDefaultProvider("foo"),
|
||||||
|
false,
|
||||||
|
},
|
||||||
|
|
||||||
// Both include and exclude in a single selector
|
// Both include and exclude in a single selector
|
||||||
"default provider with exclude wildcard overriding include exact": {
|
"default provider with exclude wildcard overriding include exact": {
|
||||||
|
|
Loading…
Reference in New Issue