config: a nicer error message for invalid provider constraints
Previously our error message here was confusing and redundant: Error starting operation: provider.null: invalid version constraint "not valid": Malformed constraint: not valid Instead, we'll generate a full HCL2 diagnostic here, which results in something (subjectively) nicer: Error: Invalid provider version constraint The value "@ 1.0.0" given for provider.null is not a valid version constraint. At the moment this message is an outlier in that the other validation errors are all still just plain Go errors, but over time we'll want to adjust all of these to be full diagnostics so that we can embed source range information in them to help the user find the offending configuration.
This commit is contained in:
parent
9a5c865040
commit
87e1fb4d66
|
@ -8,6 +8,7 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
hcl2 "github.com/hashicorp/hcl2/hcl"
|
||||||
"github.com/hashicorp/hil/ast"
|
"github.com/hashicorp/hil/ast"
|
||||||
"github.com/hashicorp/terraform/helper/hilmapstructure"
|
"github.com/hashicorp/terraform/helper/hilmapstructure"
|
||||||
"github.com/hashicorp/terraform/plugin/discovery"
|
"github.com/hashicorp/terraform/plugin/discovery"
|
||||||
|
@ -415,10 +416,17 @@ func (c *Config) Validate() tfdiags.Diagnostics {
|
||||||
if p.Version != "" {
|
if p.Version != "" {
|
||||||
_, err := discovery.ConstraintStr(p.Version).Parse()
|
_, err := discovery.ConstraintStr(p.Version).Parse()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
diags = diags.Append(fmt.Errorf(
|
diags = diags.Append(&hcl2.Diagnostic{
|
||||||
"provider.%s: invalid version constraint %q: %s",
|
Severity: hcl2.DiagError,
|
||||||
name, p.Version, err,
|
Summary: "Invalid provider version constraint",
|
||||||
))
|
Detail: fmt.Sprintf(
|
||||||
|
"The value %q given for provider.%s is not a valid version constraint.",
|
||||||
|
p.Version, name,
|
||||||
|
),
|
||||||
|
// TODO: include a "Subject" source reference in here,
|
||||||
|
// once the config loader is able to retain source
|
||||||
|
// location information.
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -217,7 +217,7 @@ func TestConfigValidate_table(t *testing.T) {
|
||||||
"provider with invalid version constraint",
|
"provider with invalid version constraint",
|
||||||
"provider-version-invalid",
|
"provider-version-invalid",
|
||||||
true,
|
true,
|
||||||
"invalid version constraint",
|
"not a valid version constraint",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"invalid provider name in module block",
|
"invalid provider name in module block",
|
||||||
|
|
Loading…
Reference in New Issue