2018-10-30 17:58:29 +01:00
|
|
|
package test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/hashicorp/terraform/helper/schema"
|
|
|
|
)
|
|
|
|
|
|
|
|
func testResourceTimeout() *schema.Resource {
|
|
|
|
return &schema.Resource{
|
|
|
|
Create: testResourceTimeoutCreate,
|
|
|
|
Read: testResourceTimeoutRead,
|
|
|
|
Update: testResourceTimeoutUpdate,
|
|
|
|
Delete: testResourceTimeoutDelete,
|
|
|
|
|
2019-09-18 19:59:12 +02:00
|
|
|
// Due to the schema version also being stashed in the private/meta
|
|
|
|
// data, we need to ensure that it does not overwrite the map
|
|
|
|
// containing the timeouts.
|
|
|
|
SchemaVersion: 1,
|
|
|
|
|
2018-10-30 17:58:29 +01:00
|
|
|
Timeouts: &schema.ResourceTimeout{
|
|
|
|
Create: schema.DefaultTimeout(time.Second),
|
|
|
|
Update: schema.DefaultTimeout(time.Second),
|
|
|
|
Delete: schema.DefaultTimeout(time.Second),
|
|
|
|
},
|
|
|
|
|
|
|
|
Importer: &schema.ResourceImporter{
|
|
|
|
State: schema.ImportStatePassthrough,
|
|
|
|
},
|
|
|
|
|
|
|
|
Schema: map[string]*schema.Schema{
|
|
|
|
"create_delay": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Optional: true,
|
|
|
|
},
|
|
|
|
"read_delay": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Optional: true,
|
|
|
|
},
|
|
|
|
"update_delay": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Optional: true,
|
|
|
|
},
|
|
|
|
"delete_delay": {
|
|
|
|
Type: schema.TypeString,
|
|
|
|
Optional: true,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func testResourceTimeoutCreate(d *schema.ResourceData, meta interface{}) error {
|
|
|
|
delayString := d.Get("create_delay").(string)
|
|
|
|
var delay time.Duration
|
|
|
|
var err error
|
|
|
|
if delayString != "" {
|
|
|
|
delay, err = time.ParseDuration(delayString)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if delay > d.Timeout(schema.TimeoutCreate) {
|
|
|
|
return fmt.Errorf("timeout while creating resource")
|
|
|
|
}
|
|
|
|
|
|
|
|
d.SetId("testId")
|
|
|
|
|
|
|
|
return testResourceRead(d, meta)
|
|
|
|
}
|
|
|
|
|
|
|
|
func testResourceTimeoutRead(d *schema.ResourceData, meta interface{}) error {
|
|
|
|
delayString := d.Get("read_delay").(string)
|
|
|
|
var delay time.Duration
|
|
|
|
var err error
|
|
|
|
if delayString != "" {
|
|
|
|
delay, err = time.ParseDuration(delayString)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if delay > d.Timeout(schema.TimeoutRead) {
|
|
|
|
return fmt.Errorf("timeout while reading resource")
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func testResourceTimeoutUpdate(d *schema.ResourceData, meta interface{}) error {
|
|
|
|
delayString := d.Get("update_delay").(string)
|
|
|
|
var delay time.Duration
|
|
|
|
var err error
|
|
|
|
if delayString != "" {
|
|
|
|
delay, err = time.ParseDuration(delayString)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if delay > d.Timeout(schema.TimeoutUpdate) {
|
|
|
|
return fmt.Errorf("timeout while updating resource")
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func testResourceTimeoutDelete(d *schema.ResourceData, meta interface{}) error {
|
|
|
|
delayString := d.Get("delete_delay").(string)
|
|
|
|
var delay time.Duration
|
|
|
|
var err error
|
|
|
|
if delayString != "" {
|
|
|
|
delay, err = time.ParseDuration(delayString)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if delay > d.Timeout(schema.TimeoutDelete) {
|
|
|
|
return fmt.Errorf("timeout while deleting resource")
|
|
|
|
}
|
|
|
|
|
|
|
|
d.SetId("")
|
|
|
|
return nil
|
|
|
|
}
|