24 lines
579 B
Go
24 lines
579 B
Go
|
package packer
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
// TimeoutProvisioner is a Provisioner implementation that can timeout after a
|
||
|
// duration
|
||
|
type TimeoutProvisioner struct {
|
||
|
Provisioner
|
||
|
Timeout time.Duration
|
||
|
}
|
||
|
|
||
|
func (p *TimeoutProvisioner) Provision(ctx context.Context, ui Ui, comm Communicator) error {
|
||
|
ctx, cancel := context.WithTimeout(ctx, p.Timeout)
|
||
|
defer cancel()
|
||
|
|
||
|
// Use a select to determine if we get cancelled during the wait
|
||
|
ui.Say(fmt.Sprintf("Setting a %s timeout for the next provisioner...", p.Timeout))
|
||
|
return p.Provisioner.Provision(ctx, ui, comm)
|
||
|
}
|