github.com/hashicorp/packer@v1.14.3/packer/cmd_hook.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  	packersdk "github.com/hashicorp/packer-plugin-sdk/packer"
    11  )
    12  
    13  type cmdHook struct {
    14  	hook   packersdk.Hook
    15  	client *PluginClient
    16  }
    17  
    18  func (c *cmdHook) Run(ctx context.Context, name string, ui packersdk.Ui, comm packersdk.Communicator, data interface{}) error {
    19  	defer func() {
    20  		r := recover()
    21  		c.checkExit(r, nil)
    22  	}()
    23  
    24  	return c.hook.Run(ctx, name, ui, comm, data)
    25  }
    26  
    27  func (c *cmdHook) checkExit(p interface{}, cb func()) {
    28  	if c.client.Exited() && cb != nil {
    29  		cb()
    30  	} else if p != nil && !Killed {
    31  		log.Panic(p)
    32  	}
    33  }