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  }