@@ -339,8 +339,44 @@ func filterInitExclusiveDiffs(tr resource.Terraformed, instanceDiff *tf.Instance
339
339
return nil
340
340
}
341
341
342
+ // resource timeouts configuration
343
+ func getTimeoutParameters (config * config.Resource ) map [string ]any {
344
+ timeouts := make (map [string ]any )
345
+ // first use the timeout overrides specified in
346
+ // the Terraform resource schema
347
+ if config .TerraformResource .Timeouts != nil {
348
+ if config .TerraformResource .Timeouts .Create != nil && * config .TerraformResource .Timeouts .Create != 0 {
349
+ timeouts [schema .TimeoutCreate ] = config .TerraformResource .Timeouts .Create .Nanoseconds ()
350
+ }
351
+ if config .TerraformResource .Timeouts .Update != nil && * config .TerraformResource .Timeouts .Update != 0 {
352
+ timeouts [schema .TimeoutUpdate ] = config .TerraformResource .Timeouts .Update .Nanoseconds ()
353
+ }
354
+ if config .TerraformResource .Timeouts .Delete != nil && * config .TerraformResource .Timeouts .Delete != 0 {
355
+ timeouts [schema .TimeoutDelete ] = config .TerraformResource .Timeouts .Delete .Nanoseconds ()
356
+ }
357
+ if config .TerraformResource .Timeouts .Read != nil && * config .TerraformResource .Timeouts .Read != 0 {
358
+ timeouts [schema .TimeoutRead ] = config .TerraformResource .Timeouts .Read .Nanoseconds ()
359
+ }
360
+ }
361
+ // then, override any Terraform defaults using any upjet
362
+ // resource configuration overrides
363
+ if config .OperationTimeouts .Create != 0 {
364
+ timeouts [schema .TimeoutCreate ] = config .OperationTimeouts .Create .Nanoseconds ()
365
+ }
366
+ if config .OperationTimeouts .Update != 0 {
367
+ timeouts [schema .TimeoutUpdate ] = config .OperationTimeouts .Update .Nanoseconds ()
368
+ }
369
+ if config .OperationTimeouts .Delete != 0 {
370
+ timeouts [schema .TimeoutDelete ] = config .OperationTimeouts .Delete .Nanoseconds ()
371
+ }
372
+ if config .OperationTimeouts .Read != 0 {
373
+ timeouts [schema .TimeoutRead ] = config .OperationTimeouts .Read .Nanoseconds ()
374
+ }
375
+ return timeouts
376
+ }
377
+
342
378
func (n * noForkExternal ) getResourceDataDiff (tr resource.Terraformed , ctx context.Context , s * tf.InstanceState , resourceExists bool ) (* tf.InstanceDiff , error ) {
343
- resourceConfig := tf .NewResourceConfigRaw (n .params )
379
+ resourceConfig := tf .NewResourceConfigRaw (n .params )
344
380
instanceDiff , err := schema .InternalMap (n .resourceSchema .Schema ).Diff (ctx , s , resourceConfig , nil , n .ts .Meta , false )
345
381
if err != nil {
346
382
return nil , errors .Wrap (err , "failed to get *terraform.InstanceDiff" )
@@ -371,6 +407,13 @@ func (n *noForkExternal) getResourceDataDiff(tr resource.Terraformed, ctx contex
371
407
// Setting instanceDiff.RawConfig has no effect on diff application.
372
408
instanceDiff .RawConfig = n .rawConfig
373
409
}
410
+ timeouts := getTimeoutParameters (n .config )
411
+ if instanceDiff .Meta == nil && len (timeouts ) > 0 {
412
+ instanceDiff .Meta = make (map [string ]interface {})
413
+ }
414
+ if len (timeouts ) > 0 {
415
+ instanceDiff .Meta [schema .TimeoutKey ] = timeouts
416
+ }
374
417
return instanceDiff , nil
375
418
}
376
419
0 commit comments