github.com/rstandt/terraform@v0.12.32-0.20230710220336-b1063613405c/builtin/providers/test/resource_timeout.go (about) 1 package test 2 3 import ( 4 "fmt" 5 "time" 6 7 "github.com/hashicorp/terraform/helper/schema" 8 ) 9 10 func testResourceTimeout() *schema.Resource { 11 return &schema.Resource{ 12 Create: testResourceTimeoutCreate, 13 Read: testResourceTimeoutRead, 14 Update: testResourceTimeoutUpdate, 15 Delete: testResourceTimeoutDelete, 16 17 // Due to the schema version also being stashed in the private/meta 18 // data, we need to ensure that it does not overwrite the map 19 // containing the timeouts. 20 SchemaVersion: 1, 21 22 Timeouts: &schema.ResourceTimeout{ 23 Create: schema.DefaultTimeout(time.Second), 24 Update: schema.DefaultTimeout(time.Second), 25 Delete: schema.DefaultTimeout(time.Second), 26 }, 27 28 Importer: &schema.ResourceImporter{ 29 State: schema.ImportStatePassthrough, 30 }, 31 32 Schema: map[string]*schema.Schema{ 33 "create_delay": { 34 Type: schema.TypeString, 35 Optional: true, 36 }, 37 "read_delay": { 38 Type: schema.TypeString, 39 Optional: true, 40 }, 41 "update_delay": { 42 Type: schema.TypeString, 43 Optional: true, 44 }, 45 "delete_delay": { 46 Type: schema.TypeString, 47 Optional: true, 48 }, 49 }, 50 } 51 } 52 53 func testResourceTimeoutCreate(d *schema.ResourceData, meta interface{}) error { 54 delayString := d.Get("create_delay").(string) 55 var delay time.Duration 56 var err error 57 if delayString != "" { 58 delay, err = time.ParseDuration(delayString) 59 if err != nil { 60 return err 61 } 62 } 63 64 if delay > d.Timeout(schema.TimeoutCreate) { 65 return fmt.Errorf("timeout while creating resource") 66 } 67 68 d.SetId("testId") 69 70 return testResourceRead(d, meta) 71 } 72 73 func testResourceTimeoutRead(d *schema.ResourceData, meta interface{}) error { 74 delayString := d.Get("read_delay").(string) 75 var delay time.Duration 76 var err error 77 if delayString != "" { 78 delay, err = time.ParseDuration(delayString) 79 if err != nil { 80 return err 81 } 82 } 83 84 if delay > d.Timeout(schema.TimeoutRead) { 85 return fmt.Errorf("timeout while reading resource") 86 } 87 88 return nil 89 } 90 91 func testResourceTimeoutUpdate(d *schema.ResourceData, meta interface{}) error { 92 delayString := d.Get("update_delay").(string) 93 var delay time.Duration 94 var err error 95 if delayString != "" { 96 delay, err = time.ParseDuration(delayString) 97 if err != nil { 98 return err 99 } 100 } 101 102 if delay > d.Timeout(schema.TimeoutUpdate) { 103 return fmt.Errorf("timeout while updating resource") 104 } 105 return nil 106 } 107 108 func testResourceTimeoutDelete(d *schema.ResourceData, meta interface{}) error { 109 delayString := d.Get("delete_delay").(string) 110 var delay time.Duration 111 var err error 112 if delayString != "" { 113 delay, err = time.ParseDuration(delayString) 114 if err != nil { 115 return err 116 } 117 } 118 119 if delay > d.Timeout(schema.TimeoutDelete) { 120 return fmt.Errorf("timeout while deleting resource") 121 } 122 123 d.SetId("") 124 return nil 125 }