Skip to content

Commit b5faecd

Browse files
authored
Add configurable timeouts for disks (#717)
* add configurable timeouts for disks * add test for disk timeout
1 parent b3a22d0 commit b5faecd

File tree

3 files changed

+48
-4
lines changed

3 files changed

+48
-4
lines changed

google/resource_compute_disk.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/schema"
1011
"google.golang.org/api/compute/v1"
@@ -29,6 +30,12 @@ func resourceComputeDisk() *schema.Resource {
2930
State: schema.ImportStatePassthrough,
3031
},
3132

33+
Timeouts: &schema.ResourceTimeout{
34+
Create: schema.DefaultTimeout(5 * time.Minute),
35+
Update: schema.DefaultTimeout(5 * time.Minute),
36+
Delete: schema.DefaultTimeout(5 * time.Minute),
37+
},
38+
3239
Schema: map[string]*schema.Schema{
3340
"name": &schema.Schema{
3441
Type: schema.TypeString,
@@ -199,7 +206,7 @@ func resourceComputeDiskCreate(d *schema.ResourceData, meta interface{}) error {
199206
// It probably maybe worked, so store the ID now
200207
d.SetId(disk.Name)
201208

202-
err = computeOperationWait(config.clientCompute, op, project, "Creating Disk")
209+
err = computeOperationWaitTime(config.clientCompute, op, project, "Creating Disk", int(d.Timeout(schema.TimeoutCreate).Minutes()))
203210
if err != nil {
204211
return err
205212
}
@@ -225,7 +232,7 @@ func resourceComputeDiskUpdate(d *schema.ResourceData, meta interface{}) error {
225232
}
226233
d.SetPartial("size")
227234

228-
err = computeOperationWait(config.clientCompute, op, project, "Resizing Disk")
235+
err = computeOperationWaitTime(config.clientCompute, op, project, "Resizing Disk", int(d.Timeout(schema.TimeoutUpdate).Minutes()))
229236
if err != nil {
230237
return err
231238
}
@@ -243,7 +250,7 @@ func resourceComputeDiskUpdate(d *schema.ResourceData, meta interface{}) error {
243250
}
244251
d.SetPartial("labels")
245252

246-
err = computeOperationWait(config.clientCompute, op, project, "Setting labels on disk")
253+
err = computeOperationWaitTime(config.clientCompute, op, project, "Setting labels on disk", int(d.Timeout(schema.TimeoutUpdate).Minutes()))
247254
if err != nil {
248255
return err
249256
}
@@ -378,7 +385,7 @@ func resourceComputeDiskDelete(d *schema.ResourceData, meta interface{}) error {
378385
return fmt.Errorf("Error deleting disk: %s", err)
379386
}
380387

381-
err = computeOperationWait(config.clientCompute, op, project, "Deleting Disk")
388+
err = computeOperationWaitTime(config.clientCompute, op, project, "Deleting Disk", int(d.Timeout(schema.TimeoutDelete).Minutes()))
382389
if err != nil {
383390
return err
384391
}

google/resource_compute_disk_test.go

+28
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package google
33
import (
44
"fmt"
55
"os"
6+
"regexp"
67
"strconv"
78
"testing"
89

@@ -36,6 +37,21 @@ func TestAccComputeDisk_basic(t *testing.T) {
3637
})
3738
}
3839

40+
func TestAccComputeDisk_timeout(t *testing.T) {
41+
t.Parallel()
42+
43+
resource.Test(t, resource.TestCase{
44+
PreCheck: func() { testAccPreCheck(t) },
45+
Providers: testAccProviders,
46+
Steps: []resource.TestStep{
47+
resource.TestStep{
48+
Config: testAccComputeDisk_timeout,
49+
ExpectError: regexp.MustCompile("timeout"),
50+
},
51+
},
52+
})
53+
}
54+
3955
func TestAccComputeDisk_update(t *testing.T) {
4056
t.Parallel()
4157

@@ -298,6 +314,18 @@ resource "google_compute_disk" "foobar" {
298314
}`, diskName)
299315
}
300316

317+
var testAccComputeDisk_timeout = fmt.Sprintf(`
318+
resource "google_compute_disk" "foobar" {
319+
name = "%s"
320+
image = "debian-8-jessie-v20160803"
321+
type = "pd-ssd"
322+
zone = "us-central1-a"
323+
324+
timeouts {
325+
Create = "1s"
326+
}
327+
}`, acctest.RandString(10))
328+
301329
func testAccComputeDisk_updated(diskName string) string {
302330
return fmt.Sprintf(`
303331
resource "google_compute_disk" "foobar" {

website/docs/r/compute_disk.html.markdown

+9
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,15 @@ exported:
7878

7979
* `label_fingerprint` - The fingerprint of the assigned labels.
8080

81+
## Timeouts
82+
83+
`google_compute_disk` provides the following
84+
[Timeouts](/docs/configuration/resources.html#timeouts) configuration options:
85+
86+
- `create` - (Default `5 minutes`) Used for creating disks.
87+
- `update` - (Default `5 minutes`) Used for resizing a disk and setting labels on disks.
88+
- `delete` - (Default `5 minutes`) Used for destroying disks (not including time to detach the disk from instances).
89+
8190
## Import
8291

8392
Disks can be imported using the `name`, e.g.

0 commit comments

Comments
 (0)