Skip to content

Commit

Permalink
Merge pull request #22946 from DrFaust92/events_list
Browse files Browse the repository at this point in the history
r/cloudwatch_event_target - `http_target.path_parameter_values` preserve order + validations
  • Loading branch information
ewbankkit authored Feb 4, 2022
2 parents 6aa5051 + 786811f commit 8500b6b
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 19 deletions.
7 changes: 7 additions & 0 deletions .changelog/22946.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
```release-note:bug
resource/aws_cloudwatch_event_target: Preserve order of `http_target.path_parameter_values`.
```

```release-note:enhancement
resource/aws_cloudwatch_event_target: Add plan time validation for `input`, `input_path`, `run_command_targets.values`, `http_target.header_parameters`, `http_target.query_string_parameters`, `redshift_target.database`, `redshift_target.db_user`, `redshift_target.secrets_manager_arn`, `redshift_target.sql`, `redshift_target.statement_name`, `retry_policy.maximum_event_age_in_seconds`, `retry_policy.maximum_retry_attempts`.
```
77 changes: 58 additions & 19 deletions internal/service/events/target.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/eventbridge"
"github.com/hashicorp/aws-sdk-go-base/v2/awsv1shim/v2/tfawserr"
"github.com/hashicorp/go-cty/cty"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
Expand Down Expand Up @@ -69,8 +71,12 @@ func ResourceTarget() *schema.Resource {
},

"input": {
Type: schema.TypeString,
Optional: true,
Type: schema.TypeString,
Optional: true,
ValidateFunc: validation.All(
validation.StringIsJSON,
validation.StringLenBetween(0, 8192),
),
ConflictsWith: []string{"input_path", "input_transformer"},
// We could be normalizing the JSON here,
// but for built-in targets input may not be JSON
Expand All @@ -79,6 +85,7 @@ func ResourceTarget() *schema.Resource {
"input_path": {
Type: schema.TypeString,
Optional: true,
ValidateFunc: validation.StringLenBetween(0, 256),
ConflictsWith: []string{"input", "input_transformer"},
},

Expand All @@ -102,7 +109,11 @@ func ResourceTarget() *schema.Resource {
"values": {
Type: schema.TypeList,
Required: true,
Elem: &schema.Schema{Type: schema.TypeString},
MaxItems: 50,
Elem: &schema.Schema{
Type: schema.TypeString,
ValidateFunc: validation.StringLenBetween(1, 256),
},
},
},
},
Expand All @@ -117,15 +128,27 @@ func ResourceTarget() *schema.Resource {
"header_parameters": {
Type: schema.TypeMap,
Optional: true,
Elem: &schema.Schema{Type: schema.TypeString},
ValidateDiagFunc: allDiagFunc(
validation.MapKeyLenBetween(0, 512),
validation.MapKeyMatch(regexp.MustCompile(`^[!#$%&'*+-.^_|~0-9a-zA-Z]+$`), ""),
validation.MapValueLenBetween(0, 512),
validation.MapValueMatch(regexp.MustCompile(`^[ \t]*[\x20-\x7E]+([ \t]+[\x20-\x7E]+)*[ \t]*$`), ""),
),
Elem: &schema.Schema{Type: schema.TypeString},
},
"query_string_parameters": {
Type: schema.TypeMap,
Optional: true,
Elem: &schema.Schema{Type: schema.TypeString},
ValidateDiagFunc: allDiagFunc(
validation.MapKeyLenBetween(0, 512),
validation.MapKeyMatch(regexp.MustCompile(`[^\x00-\x1F\x7F]+`), ""),
validation.MapValueLenBetween(0, 512),
validation.MapValueMatch(regexp.MustCompile(`[^\x00-\x09\x0B\x0C\x0E-\x1F\x7F]+`), ""),
),
Elem: &schema.Schema{Type: schema.TypeString},
},
"path_parameter_values": {
Type: schema.TypeSet,
Type: schema.TypeList,
Optional: true,
Elem: &schema.Schema{Type: schema.TypeString},
},
Expand Down Expand Up @@ -281,24 +304,29 @@ func ResourceTarget() *schema.Resource {
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"database": {
Type: schema.TypeString,
Required: true,
Type: schema.TypeString,
Required: true,
ValidateFunc: validation.StringLenBetween(1, 64),
},
"db_user": {
Type: schema.TypeString,
Optional: true,
Type: schema.TypeString,
Optional: true,
ValidateFunc: validation.StringLenBetween(1, 128),
},
"secrets_manager_arn": {
Type: schema.TypeString,
Optional: true,
Type: schema.TypeString,
Optional: true,
ValidateFunc: verify.ValidARN,
},
"sql": {
Type: schema.TypeString,
Optional: true,
Type: schema.TypeString,
Optional: true,
ValidateFunc: validation.StringLenBetween(1, 100000),
},
"statement_name": {
Type: schema.TypeString,
Optional: true,
Type: schema.TypeString,
Optional: true,
ValidateFunc: validation.StringLenBetween(1, 500),
},
"with_event": {
Type: schema.TypeBool,
Expand Down Expand Up @@ -356,11 +384,12 @@ func ResourceTarget() *schema.Resource {
"maximum_event_age_in_seconds": {
Type: schema.TypeInt,
Optional: true,
ValidateFunc: validation.IntAtLeast(60),
ValidateFunc: validation.IntBetween(0, 86400),
},
"maximum_retry_attempts": {
Type: schema.TypeInt,
Optional: true,
Type: schema.TypeInt,
Optional: true,
ValidateFunc: validation.IntBetween(0, 185),
},
},
},
Expand Down Expand Up @@ -1072,3 +1101,13 @@ func resourceTargetImport(d *schema.ResourceData, meta interface{}) ([]*schema.R

return []*schema.ResourceData{d}, nil
}

func allDiagFunc(validators ...schema.SchemaValidateDiagFunc) schema.SchemaValidateDiagFunc {
return func(i interface{}, k cty.Path) diag.Diagnostics {
var diags diag.Diagnostics
for _, validator := range validators {
diags = append(diags, validator(i, k)...)
}
return diags
}
}

0 comments on commit 8500b6b

Please sign in to comment.