github.com/ddnomad/packer@v1.3.2/packer/plugin/builder.go (about) 1 package plugin 2 3 import ( 4 "log" 5 6 "github.com/hashicorp/packer/packer" 7 ) 8 9 type cmdBuilder struct { 10 builder packer.Builder 11 client *Client 12 } 13 14 func (b *cmdBuilder) Prepare(config ...interface{}) ([]string, error) { 15 defer func() { 16 r := recover() 17 b.checkExit(r, nil) 18 }() 19 20 return b.builder.Prepare(config...) 21 } 22 23 func (b *cmdBuilder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packer.Artifact, error) { 24 defer func() { 25 r := recover() 26 b.checkExit(r, nil) 27 }() 28 29 return b.builder.Run(ui, hook, cache) 30 } 31 32 func (b *cmdBuilder) Cancel() { 33 defer func() { 34 r := recover() 35 b.checkExit(r, nil) 36 }() 37 38 b.builder.Cancel() 39 } 40 41 func (c *cmdBuilder) checkExit(p interface{}, cb func()) { 42 if c.client.Exited() && cb != nil { 43 cb() 44 } else if p != nil && !Killed { 45 log.Panic(p) 46 } 47 }