github.com/hashicorp/packer@v1.14.3/packer/cmd_datasource.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 package packer 5 6 import ( 7 "log" 8 9 "github.com/hashicorp/hcl/v2/hcldec" 10 packersdk "github.com/hashicorp/packer-plugin-sdk/packer" 11 "github.com/zclconf/go-cty/cty" 12 ) 13 14 type cmdDatasource struct { 15 d packersdk.Datasource 16 client *PluginClient 17 } 18 19 func (d *cmdDatasource) ConfigSpec() hcldec.ObjectSpec { 20 defer func() { 21 r := recover() 22 d.checkExit(r, nil) 23 }() 24 25 return d.d.ConfigSpec() 26 } 27 28 func (d *cmdDatasource) Configure(configs ...interface{}) error { 29 defer func() { 30 r := recover() 31 d.checkExit(r, nil) 32 }() 33 34 return d.d.Configure(configs...) 35 } 36 37 func (d *cmdDatasource) OutputSpec() hcldec.ObjectSpec { 38 defer func() { 39 r := recover() 40 d.checkExit(r, nil) 41 }() 42 43 return d.d.OutputSpec() 44 } 45 46 func (d *cmdDatasource) Execute() (cty.Value, error) { 47 defer func() { 48 r := recover() 49 d.checkExit(r, nil) 50 }() 51 52 return d.d.Execute() 53 } 54 55 func (d *cmdDatasource) checkExit(p interface{}, cb func()) { 56 if d.client.Exited() && cb != nil { 57 cb() 58 } else if p != nil && !Killed { 59 log.Panic(p) 60 } 61 }