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  }