mirror of
https://github.com/opentofu/opentofu.git
synced 2025-02-25 18:45:20 -06:00
Updates attribute validation messages
This commit is contained in:
parent
e8c7722d3e
commit
2fda09aab2
@ -40,6 +40,8 @@ type Backend struct {
|
|||||||
workspaceKeyPrefix string
|
workspaceKeyPrefix string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ConfigSchema returns a description of the expected configuration
|
||||||
|
// structure for the receiving backend.
|
||||||
func (b *Backend) ConfigSchema() *configschema.Block {
|
func (b *Backend) ConfigSchema() *configschema.Block {
|
||||||
return &configschema.Block{
|
return &configschema.Block{
|
||||||
Attributes: map[string]*configschema.Attribute{
|
Attributes: map[string]*configschema.Attribute{
|
||||||
@ -211,6 +213,10 @@ func (b *Backend) ConfigSchema() *configschema.Block {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PrepareConfig checks the validity of the values in the given
|
||||||
|
// configuration, and inserts any missing defaults, assuming that its
|
||||||
|
// structure has already been validated per the schema returned by
|
||||||
|
// ConfigSchema.
|
||||||
func (b *Backend) PrepareConfig(obj cty.Value) (cty.Value, tfdiags.Diagnostics) {
|
func (b *Backend) PrepareConfig(obj cty.Value) (cty.Value, tfdiags.Diagnostics) {
|
||||||
var diags tfdiags.Diagnostics
|
var diags tfdiags.Diagnostics
|
||||||
if obj.IsNull() {
|
if obj.IsNull() {
|
||||||
@ -221,8 +227,7 @@ func (b *Backend) PrepareConfig(obj cty.Value) (cty.Value, tfdiags.Diagnostics)
|
|||||||
diags = diags.Append(tfdiags.AttributeValue(
|
diags = diags.Append(tfdiags.AttributeValue(
|
||||||
tfdiags.Error,
|
tfdiags.Error,
|
||||||
"Invalid bucket value",
|
"Invalid bucket value",
|
||||||
// `The "bucket" attribute value must not be empty.`,
|
`The "bucket" attribute value must not be empty.`,
|
||||||
`"bucket": required field is not set`,
|
|
||||||
cty.Path{cty.GetAttrStep{Name: "bucket"}},
|
cty.Path{cty.GetAttrStep{Name: "bucket"}},
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
@ -231,7 +236,7 @@ func (b *Backend) PrepareConfig(obj cty.Value) (cty.Value, tfdiags.Diagnostics)
|
|||||||
diags = diags.Append(tfdiags.AttributeValue(
|
diags = diags.Append(tfdiags.AttributeValue(
|
||||||
tfdiags.Error,
|
tfdiags.Error,
|
||||||
"Invalid key value",
|
"Invalid key value",
|
||||||
`"key": required field is not set`,
|
`The "key" attribute value must not be empty.`,
|
||||||
cty.Path{cty.GetAttrStep{Name: "key"}},
|
cty.Path{cty.GetAttrStep{Name: "key"}},
|
||||||
))
|
))
|
||||||
} else if strings.HasPrefix(val.AsString(), "/") || strings.HasSuffix(val.AsString(), "/") {
|
} else if strings.HasPrefix(val.AsString(), "/") || strings.HasSuffix(val.AsString(), "/") {
|
||||||
@ -242,7 +247,7 @@ func (b *Backend) PrepareConfig(obj cty.Value) (cty.Value, tfdiags.Diagnostics)
|
|||||||
diags = diags.Append(tfdiags.AttributeValue(
|
diags = diags.Append(tfdiags.AttributeValue(
|
||||||
tfdiags.Error,
|
tfdiags.Error,
|
||||||
"Invalid key value",
|
"Invalid key value",
|
||||||
"key must not start or end with '/'",
|
`The "key" attribute value must not start or end with with "/".`,
|
||||||
cty.Path{cty.GetAttrStep{Name: "key"}},
|
cty.Path{cty.GetAttrStep{Name: "key"}},
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
@ -252,7 +257,7 @@ func (b *Backend) PrepareConfig(obj cty.Value) (cty.Value, tfdiags.Diagnostics)
|
|||||||
diags = diags.Append(tfdiags.AttributeValue(
|
diags = diags.Append(tfdiags.AttributeValue(
|
||||||
tfdiags.Error,
|
tfdiags.Error,
|
||||||
"Missing region value",
|
"Missing region value",
|
||||||
`"region": required field is not set`,
|
`The "region" attribute or the "AWS_REGION" or "AWS_DEFAULT_REGION" environment variables must be set.`,
|
||||||
cty.Path{cty.GetAttrStep{Name: "region"}},
|
cty.Path{cty.GetAttrStep{Name: "region"}},
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
@ -267,10 +272,11 @@ func (b *Backend) PrepareConfig(obj cty.Value) (cty.Value, tfdiags.Diagnostics)
|
|||||||
cty.Path{},
|
cty.Path{},
|
||||||
))
|
))
|
||||||
} else if customerKey := os.Getenv("AWS_SSE_CUSTOMER_KEY"); customerKey != "" {
|
} else if customerKey := os.Getenv("AWS_SSE_CUSTOMER_KEY"); customerKey != "" {
|
||||||
diags = diags.Append(tfdiags.Sourceless(
|
diags = diags.Append(tfdiags.AttributeValue(
|
||||||
tfdiags.Error,
|
tfdiags.Error,
|
||||||
"Invalid encryption configuration",
|
"Invalid encryption configuration",
|
||||||
encryptionKeyConflictEnvVarError,
|
encryptionKeyConflictEnvVarError,
|
||||||
|
cty.Path{},
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -280,7 +286,7 @@ func (b *Backend) PrepareConfig(obj cty.Value) (cty.Value, tfdiags.Diagnostics)
|
|||||||
diags = diags.Append(tfdiags.AttributeValue(
|
diags = diags.Append(tfdiags.AttributeValue(
|
||||||
tfdiags.Error,
|
tfdiags.Error,
|
||||||
"Invalid workspace_key_prefix value",
|
"Invalid workspace_key_prefix value",
|
||||||
"workspace_key_prefix must not start or end with '/'",
|
`The "workspace_key_prefix" attribute value must not start with "/".`,
|
||||||
cty.Path{cty.GetAttrStep{Name: "workspace_key_prefix"}},
|
cty.Path{cty.GetAttrStep{Name: "workspace_key_prefix"}},
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
@ -289,6 +295,12 @@ func (b *Backend) PrepareConfig(obj cty.Value) (cty.Value, tfdiags.Diagnostics)
|
|||||||
return obj, diags
|
return obj, diags
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Configure uses the provided configuration to set configuration fields
|
||||||
|
// within the backend.
|
||||||
|
//
|
||||||
|
// The given configuration is assumed to have already been validated
|
||||||
|
// against the schema returned by ConfigSchema and passed validation
|
||||||
|
// via PrepareConfig.
|
||||||
func (b *Backend) Configure(obj cty.Value) tfdiags.Diagnostics {
|
func (b *Backend) Configure(obj cty.Value) tfdiags.Diagnostics {
|
||||||
var diags tfdiags.Diagnostics
|
var diags tfdiags.Diagnostics
|
||||||
if obj.IsNull() {
|
if obj.IsNull() {
|
||||||
|
@ -503,7 +503,7 @@ func TestBackendConfig_PrepareConfigValidation(t *testing.T) {
|
|||||||
"key": cty.StringVal("test"),
|
"key": cty.StringVal("test"),
|
||||||
"region": cty.StringVal("us-west-2"),
|
"region": cty.StringVal("us-west-2"),
|
||||||
}),
|
}),
|
||||||
expectedErr: `"bucket": required field is not set`,
|
expectedErr: `The "bucket" attribute value must not be empty.`,
|
||||||
},
|
},
|
||||||
"empty bucket": {
|
"empty bucket": {
|
||||||
config: cty.ObjectVal(map[string]cty.Value{
|
config: cty.ObjectVal(map[string]cty.Value{
|
||||||
@ -511,7 +511,7 @@ func TestBackendConfig_PrepareConfigValidation(t *testing.T) {
|
|||||||
"key": cty.StringVal("test"),
|
"key": cty.StringVal("test"),
|
||||||
"region": cty.StringVal("us-west-2"),
|
"region": cty.StringVal("us-west-2"),
|
||||||
}),
|
}),
|
||||||
expectedErr: `"bucket": required field is not set`,
|
expectedErr: `The "bucket" attribute value must not be empty.`,
|
||||||
},
|
},
|
||||||
"null key": {
|
"null key": {
|
||||||
config: cty.ObjectVal(map[string]cty.Value{
|
config: cty.ObjectVal(map[string]cty.Value{
|
||||||
@ -519,7 +519,7 @@ func TestBackendConfig_PrepareConfigValidation(t *testing.T) {
|
|||||||
"key": cty.NullVal(cty.String),
|
"key": cty.NullVal(cty.String),
|
||||||
"region": cty.StringVal("us-west-2"),
|
"region": cty.StringVal("us-west-2"),
|
||||||
}),
|
}),
|
||||||
expectedErr: `"key": required field is not set`,
|
expectedErr: `The "key" attribute value must not be empty.`,
|
||||||
},
|
},
|
||||||
"empty key": {
|
"empty key": {
|
||||||
config: cty.ObjectVal(map[string]cty.Value{
|
config: cty.ObjectVal(map[string]cty.Value{
|
||||||
@ -527,7 +527,7 @@ func TestBackendConfig_PrepareConfigValidation(t *testing.T) {
|
|||||||
"key": cty.StringVal(""),
|
"key": cty.StringVal(""),
|
||||||
"region": cty.StringVal("us-west-2"),
|
"region": cty.StringVal("us-west-2"),
|
||||||
}),
|
}),
|
||||||
expectedErr: `"key": required field is not set`,
|
expectedErr: `The "key" attribute value must not be empty.`,
|
||||||
},
|
},
|
||||||
"key with leading slash": {
|
"key with leading slash": {
|
||||||
config: cty.ObjectVal(map[string]cty.Value{
|
config: cty.ObjectVal(map[string]cty.Value{
|
||||||
@ -535,7 +535,7 @@ func TestBackendConfig_PrepareConfigValidation(t *testing.T) {
|
|||||||
"key": cty.StringVal("/leading-slash"),
|
"key": cty.StringVal("/leading-slash"),
|
||||||
"region": cty.StringVal("us-west-2"),
|
"region": cty.StringVal("us-west-2"),
|
||||||
}),
|
}),
|
||||||
expectedErr: `key must not start or end with '/'`,
|
expectedErr: `The "key" attribute value must not start or end with with "/".`,
|
||||||
},
|
},
|
||||||
"key with trailing slash": {
|
"key with trailing slash": {
|
||||||
config: cty.ObjectVal(map[string]cty.Value{
|
config: cty.ObjectVal(map[string]cty.Value{
|
||||||
@ -543,7 +543,7 @@ func TestBackendConfig_PrepareConfigValidation(t *testing.T) {
|
|||||||
"key": cty.StringVal("trailing-slash/"),
|
"key": cty.StringVal("trailing-slash/"),
|
||||||
"region": cty.StringVal("us-west-2"),
|
"region": cty.StringVal("us-west-2"),
|
||||||
}),
|
}),
|
||||||
expectedErr: `key must not start or end with '/'`,
|
expectedErr: `The "key" attribute value must not start or end with with "/".`,
|
||||||
},
|
},
|
||||||
"null region": {
|
"null region": {
|
||||||
config: cty.ObjectVal(map[string]cty.Value{
|
config: cty.ObjectVal(map[string]cty.Value{
|
||||||
@ -551,7 +551,7 @@ func TestBackendConfig_PrepareConfigValidation(t *testing.T) {
|
|||||||
"key": cty.StringVal("test"),
|
"key": cty.StringVal("test"),
|
||||||
"region": cty.NullVal(cty.String),
|
"region": cty.NullVal(cty.String),
|
||||||
}),
|
}),
|
||||||
expectedErr: `"region": required field is not set`,
|
expectedErr: `The "region" attribute or the "AWS_REGION" or "AWS_DEFAULT_REGION" environment variables must be set.`,
|
||||||
},
|
},
|
||||||
"empty region": {
|
"empty region": {
|
||||||
config: cty.ObjectVal(map[string]cty.Value{
|
config: cty.ObjectVal(map[string]cty.Value{
|
||||||
@ -559,7 +559,7 @@ func TestBackendConfig_PrepareConfigValidation(t *testing.T) {
|
|||||||
"key": cty.StringVal("test"),
|
"key": cty.StringVal("test"),
|
||||||
"region": cty.StringVal(""),
|
"region": cty.StringVal(""),
|
||||||
}),
|
}),
|
||||||
expectedErr: `"region": required field is not set`,
|
expectedErr: `The "region" attribute or the "AWS_REGION" or "AWS_DEFAULT_REGION" environment variables must be set.`,
|
||||||
},
|
},
|
||||||
"workspace_key_prefix with leading slash": {
|
"workspace_key_prefix with leading slash": {
|
||||||
config: cty.ObjectVal(map[string]cty.Value{
|
config: cty.ObjectVal(map[string]cty.Value{
|
||||||
@ -568,7 +568,7 @@ func TestBackendConfig_PrepareConfigValidation(t *testing.T) {
|
|||||||
"region": cty.StringVal("us-west-2"),
|
"region": cty.StringVal("us-west-2"),
|
||||||
"workspace_key_prefix": cty.StringVal("/env"),
|
"workspace_key_prefix": cty.StringVal("/env"),
|
||||||
}),
|
}),
|
||||||
expectedErr: `workspace_key_prefix must not start or end with '/'`,
|
expectedErr: `The "workspace_key_prefix" attribute value must not start with "/".`,
|
||||||
},
|
},
|
||||||
"workspace_key_prefix with trailing slash": {
|
"workspace_key_prefix with trailing slash": {
|
||||||
config: cty.ObjectVal(map[string]cty.Value{
|
config: cty.ObjectVal(map[string]cty.Value{
|
||||||
@ -577,7 +577,7 @@ func TestBackendConfig_PrepareConfigValidation(t *testing.T) {
|
|||||||
"region": cty.StringVal("us-west-2"),
|
"region": cty.StringVal("us-west-2"),
|
||||||
"workspace_key_prefix": cty.StringVal("env/"),
|
"workspace_key_prefix": cty.StringVal("env/"),
|
||||||
}),
|
}),
|
||||||
expectedErr: `workspace_key_prefix must not start or end with '/'`,
|
expectedErr: `The "workspace_key_prefix" attribute value must not start with "/".`,
|
||||||
},
|
},
|
||||||
"encyrption key conflict": {
|
"encyrption key conflict": {
|
||||||
config: cty.ObjectVal(map[string]cty.Value{
|
config: cty.ObjectVal(map[string]cty.Value{
|
||||||
|
Loading…
Reference in New Issue
Block a user