Skip to content

Commit 7bee550

Browse files
authored
add timeouts support for sql database instance (#1288)
* add timeouts support for sql database instance * rm a tag
1 parent 360260d commit 7bee550

File tree

3 files changed

+25
-5
lines changed

3 files changed

+25
-5
lines changed

google/resource_sql_database_instance.go

+11-4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"log"
66
"regexp"
77
"strings"
8+
"time"
89

910
"github.com/hashicorp/terraform/helper/resource"
1011
"github.com/hashicorp/terraform/helper/schema"
@@ -41,6 +42,12 @@ func resourceSqlDatabaseInstance() *schema.Resource {
4142
State: schema.ImportStatePassthrough,
4243
},
4344

45+
Timeouts: &schema.ResourceTimeout{
46+
Create: schema.DefaultTimeout(10 * time.Minute),
47+
Update: schema.DefaultTimeout(10 * time.Minute),
48+
Delete: schema.DefaultTimeout(10 * time.Minute),
49+
},
50+
4451
Schema: map[string]*schema.Schema{
4552
"region": &schema.Schema{
4653
Type: schema.TypeString,
@@ -670,7 +677,7 @@ func resourceSqlDatabaseInstanceCreate(d *schema.ResourceData, meta interface{})
670677

671678
d.SetId(instance.Name)
672679

673-
err = sqladminOperationWait(config, op, project, "Create Instance")
680+
err = sqladminOperationWaitTime(config, op, project, "Create Instance", int(d.Timeout(schema.TimeoutCreate).Minutes()))
674681
if err != nil {
675682
d.SetId("")
676683
return err
@@ -697,7 +704,7 @@ func resourceSqlDatabaseInstanceCreate(d *schema.ResourceData, meta interface{})
697704
err = retry(func() error {
698705
op, err = config.clientSqlAdmin.Users.Delete(project, instance.Name, u.Host, u.Name).Do()
699706
if err == nil {
700-
err = sqladminOperationWait(config, op, project, "Delete default root User")
707+
err = sqladminOperationWaitTime(config, op, project, "Delete default root User", int(d.Timeout(schema.TimeoutCreate).Minutes()))
701708
}
702709
return err
703710
})
@@ -1027,7 +1034,7 @@ func resourceSqlDatabaseInstanceUpdate(d *schema.ResourceData, meta interface{})
10271034
return fmt.Errorf("Error, failed to update instance %s: %s", instance.Name, err)
10281035
}
10291036

1030-
err = sqladminOperationWait(config, op, project, "Create Instance")
1037+
err = sqladminOperationWaitTime(config, op, project, "Update Instance", int(d.Timeout(schema.TimeoutUpdate).Minutes()))
10311038
if err != nil {
10321039
return err
10331040
}
@@ -1049,7 +1056,7 @@ func resourceSqlDatabaseInstanceDelete(d *schema.ResourceData, meta interface{})
10491056
return fmt.Errorf("Error, failed to delete instance %s: %s", d.Get("name").(string), err)
10501057
}
10511058

1052-
err = sqladminOperationWait(config, op, project, "Delete Instance")
1059+
err = sqladminOperationWaitTime(config, op, project, "Delete Instance", int(d.Timeout(schema.TimeoutDelete).Minutes()))
10531060
if err != nil {
10541061
return err
10551062
}

google/sqladmin_operation.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,18 @@ func (e SqlAdminOperationError) Error() string {
5757
}
5858

5959
func sqladminOperationWait(config *Config, op *sqladmin.Operation, project, activity string) error {
60+
return sqladminOperationWaitTime(config, op, project, activity, 10)
61+
}
62+
63+
func sqladminOperationWaitTime(config *Config, op *sqladmin.Operation, project, activity string, timeoutMinutes int) error {
6064
w := &SqlAdminOperationWaiter{
6165
Service: config.clientSqlAdmin,
6266
Op: op,
6367
Project: project,
6468
}
6569

6670
state := w.Conf()
67-
state.Timeout = 10 * time.Minute
71+
state.Timeout = time.Duration(timeoutMinutes) * time.Minute
6872
state.MinTimeout = 2 * time.Second
6973
state.Delay = 5 * time.Second
7074
opRaw, err := state.WaitForState()

website/docs/r/sql_database_instance.html.markdown

+9
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,15 @@ when the resource is configured with a `count`.
229229
* `settings.version` - Used to make sure changes to the `settings` block are
230230
atomic.
231231

232+
## Timeouts
233+
234+
`google_sql_database_instance` provides the following
235+
[Timeouts](/docs/configuration/resources.html#timeouts) configuration options:
236+
237+
- `create` - Default is 10 minutes.
238+
- `update` - Default is 10 minutes.
239+
- `delete` - Default is 10 minutes.
240+
232241
## Import
233242

234243
Database instances can be imported using the `name`, e.g.

0 commit comments

Comments
 (0)