From be814c77df4549a2275e9f8622c0289dd5661dbd Mon Sep 17 00:00:00 2001 From: Sharon Nam Date: Mon, 13 Mar 2023 17:16:29 -0700 Subject: [PATCH] Extend timeouts for aws_budget_actions --- .changelog/29976.txt | 3 +++ internal/service/budgets/budget_action.go | 17 +++++++++-------- .../docs/r/budgets_budget_action.html.markdown | 7 +++++++ 3 files changed, 19 insertions(+), 8 deletions(-) create mode 100644 .changelog/29976.txt diff --git a/.changelog/29976.txt b/.changelog/29976.txt new file mode 100644 index 000000000000..15bff8cbd7c0 --- /dev/null +++ b/.changelog/29976.txt @@ -0,0 +1,3 @@ +```release-note:bug +resource/aws_budgets_action: Extend and add configurable timeouts for create and update +``` \ No newline at end of file diff --git a/internal/service/budgets/budget_action.go b/internal/service/budgets/budget_action.go index e36707550857..e666e9a3b946 100644 --- a/internal/service/budgets/budget_action.go +++ b/internal/service/budgets/budget_action.go @@ -34,6 +34,11 @@ func ResourceBudgetAction() *schema.Resource { StateContext: schema.ImportStatePassthroughContext, }, + Timeouts: &schema.ResourceTimeout{ + Create: schema.DefaultTimeout(5 * time.Minute), + Update: schema.DefaultTimeout(5 * time.Minute), + }, + Schema: map[string]*schema.Schema{ "account_id": { Type: schema.TypeString, @@ -245,7 +250,7 @@ func resourceBudgetActionCreate(ctx context.Context, d *schema.ResourceData, met d.SetId(BudgetActionCreateResourceID(accountID, actionID, budgetName)) - if _, err := waitActionAvailable(ctx, conn, accountID, actionID, budgetName); err != nil { + if _, err := waitActionAvailable(ctx, conn, accountID, actionID, budgetName, d.Timeout(schema.TimeoutCreate)); err != nil { return diag.Errorf("waiting for Budget Action (%s) create: %s", d.Id(), err) } @@ -346,7 +351,7 @@ func resourceBudgetActionUpdate(ctx context.Context, d *schema.ResourceData, met return diag.Errorf("updating Budget Action (%s): %s", d.Id(), err) } - if _, err := waitActionAvailable(ctx, conn, accountID, actionID, budgetName); err != nil { + if _, err := waitActionAvailable(ctx, conn, accountID, actionID, budgetName, d.Timeout(schema.TimeoutUpdate)); err != nil { return diag.Errorf("waiting for Budget Action (%s) update: %s", d.Id(), err) } @@ -446,11 +451,7 @@ func statusAction(ctx context.Context, conn *budgets.Budgets, accountID, actionI } } -const ( - actionAvailableTimeout = 2 * time.Minute -) - -func waitActionAvailable(ctx context.Context, conn *budgets.Budgets, accountID, actionID, budgetName string) (*budgets.Action, error) { //nolint:unparam +func waitActionAvailable(ctx context.Context, conn *budgets.Budgets, accountID, actionID, budgetName string, timeout time.Duration) (*budgets.Action, error) { //nolint:unparam stateConf := &resource.StateChangeConf{ Pending: []string{ budgets.ActionStatusExecutionInProgress, @@ -462,7 +463,7 @@ func waitActionAvailable(ctx context.Context, conn *budgets.Budgets, accountID, budgets.ActionStatusPending, }, Refresh: statusAction(ctx, conn, accountID, actionID, budgetName), - Timeout: actionAvailableTimeout, + Timeout: timeout, } outputRaw, err := stateConf.WaitForStateContext(ctx) diff --git a/website/docs/r/budgets_budget_action.html.markdown b/website/docs/r/budgets_budget_action.html.markdown index b20252bc9633..e4134c41c6bd 100644 --- a/website/docs/r/budgets_budget_action.html.markdown +++ b/website/docs/r/budgets_budget_action.html.markdown @@ -139,6 +139,13 @@ In addition to all arguments above, the following attributes are exported: * `arn` - The ARN of the budget action. * `status` - The status of the budget action. +## Timeouts + +[Configuration options](https://developer.hashicorp.com/terraform/language/resources/syntax#operation-timeouts): + +* `create` - (Default `5m`) +* `update` - (Default `5m`) + ## Import Budgets can be imported using `AccountID:ActionID:BudgetName`, e.g.,