Skip to content

Commit

Permalink
Merge pull request #35542 from MSilva98/f-aws_glue_trigger-implement-…
Browse files Browse the repository at this point in the history
…timeout

Add 'timeout' attribute to Glue Trigger create, update and delete
  • Loading branch information
johnsonaj authored Feb 9, 2024
2 parents 6e4560e + 53b9b39 commit b3fcecf
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 12 deletions.
3 changes: 3 additions & 0 deletions .changelog/35542.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:enhancement
resource/aws_glue_trigger: Add configurable `timeouts`
```
7 changes: 4 additions & 3 deletions internal/service/glue/trigger.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ func ResourceTrigger() *schema.Resource {
},
Timeouts: &schema.ResourceTimeout{
Create: schema.DefaultTimeout(5 * time.Minute),
Update: schema.DefaultTimeout(5 * time.Minute),
Delete: schema.DefaultTimeout(5 * time.Minute),
},

Expand Down Expand Up @@ -286,7 +287,7 @@ func resourceTriggerCreate(ctx context.Context, d *schema.ResourceData, meta int
d.SetId(name)

log.Printf("[DEBUG] Waiting for Glue Trigger (%s) to create", d.Id())
if _, err := waitTriggerCreated(ctx, conn, d.Id()); err != nil {
if _, err := waitTriggerCreated(ctx, conn, d.Id(), d.Timeout(schema.TimeoutCreate)); err != nil {
if tfawserr.ErrCodeEquals(err, glue.ErrCodeEntityNotFoundException) {
return diags
}
Expand Down Expand Up @@ -407,7 +408,7 @@ func resourceTriggerUpdate(ctx context.Context, d *schema.ResourceData, meta int
return sdkdiag.AppendErrorf(diags, "updating Glue Trigger (%s): %s", d.Id(), err)
}

if _, err := waitTriggerCreated(ctx, conn, d.Id()); err != nil {
if _, err := waitTriggerCreated(ctx, conn, d.Id(), d.Timeout(schema.TimeoutUpdate)); err != nil {
return sdkdiag.AppendErrorf(diags, "waiting for Glue Trigger (%s) to be Update: %s", d.Id(), err)
}
}
Expand Down Expand Up @@ -453,7 +454,7 @@ func resourceTriggerDelete(ctx context.Context, d *schema.ResourceData, meta int
}

log.Printf("[DEBUG] Waiting for Glue Trigger (%s) to delete", d.Id())
if _, err := waitTriggerDeleted(ctx, conn, d.Id()); err != nil {
if _, err := waitTriggerDeleted(ctx, conn, d.Id(), d.Timeout(schema.TimeoutDelete)); err != nil {
if tfawserr.ErrCodeEquals(err, glue.ErrCodeEntityNotFoundException) {
return diags
}
Expand Down
10 changes: 7 additions & 3 deletions internal/service/glue/trigger_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ func TestAccGlueTrigger_enabled(t *testing.T) {
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"enabled"},
ImportStateVerifyIgnore: []string{"enabled", "state"}, // adding state to igonre list because trigger state changes faster before test can verify what is in TF state
},
},
})
Expand Down Expand Up @@ -729,7 +729,11 @@ resource "aws_glue_trigger" "test" {
}

func testAccTriggerConfig_crawler(rName, state string) string {
return acctest.ConfigCompose(testAccCrawlerConfig_s3Target(rName, "s3://test_bucket"), fmt.Sprintf(`
return acctest.ConfigCompose(testAccCrawlerConfig_s3Target(rName, "s3://${aws_s3_bucket.test.bucket}"), fmt.Sprintf(`
resource "aws_s3_bucket" "test" {
bucket = %[1]q
}
resource "aws_glue_crawler" "test2" {
depends_on = [aws_iam_role_policy_attachment.test-AWSGlueServiceRole]
Expand All @@ -738,7 +742,7 @@ resource "aws_glue_crawler" "test2" {
role = aws_iam_role.test.name
s3_target {
path = "s3://test_bucket"
path = "s3://${aws_s3_bucket.test.bucket}"
}
}
Expand Down
10 changes: 4 additions & 6 deletions internal/service/glue/wait.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ const (
schemaAvailableTimeout = 2 * time.Minute
schemaDeleteTimeout = 2 * time.Minute
schemaVersionAvailableTimeout = 2 * time.Minute
triggerCreateTimeout = 5 * time.Minute
triggerDeleteTimeout = 5 * time.Minute
)

// waitMLTransformDeleted waits for an MLTransform to return Deleted
Expand Down Expand Up @@ -116,7 +114,7 @@ func waitSchemaVersionAvailable(ctx context.Context, conn *glue.Glue, registryID
}

// waitTriggerCreated waits for a Trigger to return Created
func waitTriggerCreated(ctx context.Context, conn *glue.Glue, triggerName string) (*glue.GetTriggerOutput, error) { //nolint:unparam
func waitTriggerCreated(ctx context.Context, conn *glue.Glue, triggerName string, timeout time.Duration) (*glue.GetTriggerOutput, error) { //nolint:unparam
stateConf := &retry.StateChangeConf{
Pending: []string{
glue.TriggerStateActivating,
Expand All @@ -128,7 +126,7 @@ func waitTriggerCreated(ctx context.Context, conn *glue.Glue, triggerName string
glue.TriggerStateCreated,
},
Refresh: statusTrigger(ctx, conn, triggerName),
Timeout: triggerCreateTimeout,
Timeout: timeout,
}

outputRaw, err := stateConf.WaitForStateContext(ctx)
Expand All @@ -141,12 +139,12 @@ func waitTriggerCreated(ctx context.Context, conn *glue.Glue, triggerName string
}

// waitTriggerDeleted waits for a Trigger to return Deleted
func waitTriggerDeleted(ctx context.Context, conn *glue.Glue, triggerName string) (*glue.GetTriggerOutput, error) {
func waitTriggerDeleted(ctx context.Context, conn *glue.Glue, triggerName string, timeout time.Duration) (*glue.GetTriggerOutput, error) {
stateConf := &retry.StateChangeConf{
Pending: []string{glue.TriggerStateDeleting},
Target: []string{},
Refresh: statusTrigger(ctx, conn, triggerName),
Timeout: triggerDeleteTimeout,
Timeout: timeout,
}

outputRaw, err := stateConf.WaitForStateContext(ctx)
Expand Down
1 change: 1 addition & 0 deletions website/docs/r/glue_trigger.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ This resource exports the following attributes in addition to the arguments abov
[Configuration options](https://developer.hashicorp.com/terraform/language/resources/syntax#operation-timeouts):

- `create` - (Default `5m`)
- `update` - (Default `5m`)
- `delete` - (Default `5m`)

## Import
Expand Down

0 comments on commit b3fcecf

Please sign in to comment.