github.com/hashicorp/packer@v1.14.3/packer/cmd_builder.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 package packer 5 6 import ( 7 "context" 8 "log" 9 10 "github.com/hashicorp/hcl/v2/hcldec" 11 packersdk "github.com/hashicorp/packer-plugin-sdk/packer" 12 ) 13 14 type cmdBuilder struct { 15 builder packersdk.Builder 16 client *PluginClient 17 } 18 19 func (b *cmdBuilder) ConfigSpec() hcldec.ObjectSpec { 20 defer func() { 21 r := recover() 22 b.checkExit(r, nil) 23 }() 24 25 return b.builder.ConfigSpec() 26 } 27 28 func (b *cmdBuilder) Prepare(config ...interface{}) ([]string, []string, error) { 29 defer func() { 30 r := recover() 31 b.checkExit(r, nil) 32 }() 33 34 return b.builder.Prepare(config...) 35 } 36 37 func (b *cmdBuilder) Run(ctx context.Context, ui packersdk.Ui, hook packersdk.Hook) (packersdk.Artifact, error) { 38 defer func() { 39 r := recover() 40 b.checkExit(r, nil) 41 }() 42 43 return b.builder.Run(ctx, ui, hook) 44 } 45 46 func (c *cmdBuilder) checkExit(p interface{}, cb func()) { 47 if c.client.Exited() && cb != nil { 48 cb() 49 } else if p != nil && !Killed { 50 log.Panic(p) 51 } 52 }