Skip to content

Commit

Permalink
Merge pull request #38598 from tfranovic/fix_eventbridge_input_template
Browse files Browse the repository at this point in the history
fix: Reset EventBridge pipe input template only on change detected
  • Loading branch information
ewbankkit committed Jul 31, 2024
2 parents 24bedfd + 2d0f10a commit af3e17f
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 4 deletions.
3 changes: 3 additions & 0 deletions .changelog/38598.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:bug
resource/aws_pipes_pipe: Don't reset `target_parameters` if the configured value has not changed
```
8 changes: 4 additions & 4 deletions internal/service/pipes/pipe.go
Original file line number Diff line number Diff line change
Expand Up @@ -250,10 +250,6 @@ func resourcePipeUpdate(ctx context.Context, d *schema.ResourceData, meta interf
Name: aws.String(d.Id()),
RoleArn: aws.String(d.Get(names.AttrRoleARN).(string)),
Target: aws.String(d.Get(names.AttrTarget).(string)),
// Reset state in case it's a deletion, have to set the input to an empty string otherwise it doesn't get overwritten.
TargetParameters: &awstypes.PipeTargetParameters{
InputTemplate: aws.String(""),
},
}

if d.HasChange("enrichment") {
Expand All @@ -279,6 +275,10 @@ func resourcePipeUpdate(ctx context.Context, d *schema.ResourceData, meta interf
}

if d.HasChange("target_parameters") {
// Reset state in case it's a deletion, have to set the input to an empty string otherwise it doesn't get overwritten.
input.TargetParameters = &awstypes.PipeTargetParameters{
InputTemplate: aws.String(""),
}
if v, ok := d.GetOk("target_parameters"); ok && len(v.([]interface{})) > 0 && v.([]interface{})[0] != nil {
input.TargetParameters = expandPipeTargetParameters(v.([]interface{})[0].(map[string]interface{}))
}
Expand Down
91 changes: 91 additions & 0 deletions internal/service/pipes/pipe_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -785,6 +785,66 @@ func TestAccPipesPipe_targetParameters_inputTemplate(t *testing.T) {
})
}

func TestAccPipesPipe_targetParameters_inputTemplate_preserveUnchanged(t *testing.T) {
ctx := acctest.Context(t)
var pipe pipes.DescribePipeOutput
rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix)
resourceName := "aws_pipes_pipe.test"

resource.ParallelTest(t, resource.TestCase{
PreCheck: func() {
acctest.PreCheck(ctx, t)
acctest.PreCheckPartitionHasService(t, names.PipesEndpointID)
testAccPreCheck(ctx, t)
},
ErrorCheck: acctest.ErrorCheck(t, names.PipesServiceID),
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories,
CheckDestroy: testAccCheckPipeDestroy(ctx),
Steps: []resource.TestStep{
{
Config: testAccPipeConfig_targetParameters_filterCriteria_inputTemplate(rName, "test1", "$.first"),
Check: resource.ComposeTestCheckFunc(
testAccCheckPipeExists(ctx, resourceName, &pipe),
resource.TestCheckResourceAttr(resourceName, "target_parameters.0.input_template", "$.first"),
),
},
{
Config: testAccPipeConfig_targetParameters_filterCriteria_inputTemplate(rName, "test2", "$.first"),
Check: resource.ComposeTestCheckFunc(
testAccCheckPipeExists(ctx, resourceName, &pipe),
resource.TestCheckResourceAttr(resourceName, "target_parameters.0.input_template", "$.first"),
),
},
{
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
},
{
Config: testAccPipeConfig_targetParameters_filterCriteria_inputTemplate(rName, "test2", "$.second"),
Check: resource.ComposeTestCheckFunc(
testAccCheckPipeExists(ctx, resourceName, &pipe),
resource.TestCheckResourceAttr(resourceName, "target_parameters.0.input_template", "$.second"),
),
},
{
Config: testAccPipeConfig_targetParameters_filterCriteria_inputTemplate(rName, "test1", "$.second"),
Check: resource.ComposeTestCheckFunc(
testAccCheckPipeExists(ctx, resourceName, &pipe),
resource.TestCheckResourceAttr(resourceName, "target_parameters.0.input_template", "$.second"),
),
},
{
Config: testAccPipeConfig_basicSQS(rName),
Check: resource.ComposeTestCheckFunc(
testAccCheckPipeExists(ctx, resourceName, &pipe),
resource.TestCheckNoResourceAttr(resourceName, "target_parameters.0.input_template"),
),
},
},
})
}

func TestAccPipesPipe_kinesisSourceAndTarget(t *testing.T) {
ctx := acctest.Context(t)
var pipe pipes.DescribePipeOutput
Expand Down Expand Up @@ -2358,6 +2418,37 @@ resource "aws_pipes_pipe" "test" {
`, rName, template))
}

func testAccPipeConfig_targetParameters_filterCriteria_inputTemplate(rName, criteria string, template string) string {
return acctest.ConfigCompose(
testAccPipeConfig_base(rName),
testAccPipeConfig_baseSQSSource(rName),
testAccPipeConfig_baseSQSTarget(rName),
fmt.Sprintf(`
resource "aws_pipes_pipe" "test" {
depends_on = [aws_iam_role_policy.source, aws_iam_role_policy.target]
name = %[1]q
role_arn = aws_iam_role.test.arn
source = aws_sqs_queue.source.arn
target = aws_sqs_queue.target.arn
source_parameters {
filter_criteria {
filter {
pattern = jsonencode({
source = [%[2]q]
})
}
}
}
target_parameters {
input_template = %[3]q
}
}
`, rName, criteria, template))
}

func testAccPipeConfig_basicKinesis(rName string) string {
return acctest.ConfigCompose(
testAccPipeConfig_base(rName),
Expand Down

0 comments on commit af3e17f

Please sign in to comment.