1package provisioners
2
3import (
4	"github.com/hashicorp/terraform/internal/configs/configschema"
5	"github.com/hashicorp/terraform/internal/tfdiags"
6	"github.com/zclconf/go-cty/cty"
7)
8
9// Interface is the set of methods required for a resource provisioner plugin.
10type Interface interface {
11	// GetSchema returns the schema for the provisioner configuration.
12	GetSchema() GetSchemaResponse
13
14	// ValidateProvisionerConfig allows the provisioner to validate the
15	// configuration values.
16	ValidateProvisionerConfig(ValidateProvisionerConfigRequest) ValidateProvisionerConfigResponse
17
18	// ProvisionResource runs the provisioner with provided configuration.
19	// ProvisionResource blocks until the execution is complete.
20	// If the returned diagnostics contain any errors, the resource will be
21	// left in a tainted state.
22	ProvisionResource(ProvisionResourceRequest) ProvisionResourceResponse
23
24	// Stop is called to interrupt the provisioner.
25	//
26	// Stop should not block waiting for in-flight actions to complete. It
27	// should take any action it wants and return immediately acknowledging it
28	// has received the stop request. Terraform will not make any further API
29	// calls to the provisioner after Stop is called.
30	//
31	// The error returned, if non-nil, is assumed to mean that signaling the
32	// stop somehow failed and that the user should expect potentially waiting
33	// a longer period of time.
34	Stop() error
35
36	// Close shuts down the plugin process if applicable.
37	Close() error
38}
39
40type GetSchemaResponse struct {
41	// Provisioner contains the schema for this provisioner.
42	Provisioner *configschema.Block
43
44	// Diagnostics contains any warnings or errors from the method call.
45	Diagnostics tfdiags.Diagnostics
46}
47
48// UIOutput provides the Output method for resource provisioner
49// plugins to write any output to the UI.
50//
51// Provisioners may call the Output method multiple times while Apply is in
52// progress. It is invalid to call Output after Apply returns.
53type UIOutput interface {
54	Output(string)
55}
56
57type ValidateProvisionerConfigRequest struct {
58	// Config is the complete configuration to be used for the provisioner.
59	Config cty.Value
60}
61
62type ValidateProvisionerConfigResponse struct {
63	// Diagnostics contains any warnings or errors from the method call.
64	Diagnostics tfdiags.Diagnostics
65}
66
67type ProvisionResourceRequest struct {
68	// Config is the complete provisioner configuration.
69	Config cty.Value
70
71	// Connection contains any information required to access the resource
72	// instance.
73	Connection cty.Value
74
75	// UIOutput is used to return output during the Apply operation.
76	UIOutput UIOutput
77}
78
79type ProvisionResourceResponse struct {
80	// Diagnostics contains any warnings or errors from the method call.
81	Diagnostics tfdiags.Diagnostics
82}
83