]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blame - vendor/github.com/hashicorp/terraform/terraform/resource_provisioner.go
Upgrade to 0.12
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / hashicorp / terraform / terraform / resource_provisioner.go
CommitLineData
bae9f6d2
JC
1package terraform
2
107c1cdb
ND
3import (
4 "github.com/hashicorp/terraform/configs/configschema"
5 "github.com/hashicorp/terraform/provisioners"
6)
7
bae9f6d2
JC
8// ResourceProvisioner is an interface that must be implemented by any
9// resource provisioner: the thing that initializes resources in
10// a Terraform configuration.
11type ResourceProvisioner interface {
107c1cdb
ND
12 // GetConfigSchema returns the schema for the provisioner type's main
13 // configuration block. This is called prior to Validate to enable some
14 // basic structural validation to be performed automatically and to allow
15 // the configuration to be properly extracted from potentially-ambiguous
16 // configuration file formats.
17 GetConfigSchema() (*configschema.Block, error)
18
bae9f6d2
JC
19 // Validate is called once at the beginning with the raw
20 // configuration (no interpolation done) and can return a list of warnings
21 // and/or errors.
22 //
23 // This is called once per resource.
24 //
25 // This should not assume any of the values in the resource configuration
26 // are valid since it is possible they have to be interpolated still.
27 // The primary use case of this call is to check that the required keys
28 // are set and that the general structure is correct.
29 Validate(*ResourceConfig) ([]string, []error)
30
31 // Apply runs the provisioner on a specific resource and returns the new
32 // resource state along with an error. Instead of a diff, the ResourceConfig
33 // is provided since provisioners only run after a resource has been
34 // newly created.
35 Apply(UIOutput, *InstanceState, *ResourceConfig) error
36
37 // Stop is called when the provisioner should halt any in-flight actions.
38 //
39 // This can be used to make a nicer Ctrl-C experience for Terraform.
40 // Even if this isn't implemented to do anything (just returns nil),
41 // Terraform will still cleanly stop after the currently executing
42 // graph node is complete. However, this API can be used to make more
43 // efficient halts.
44 //
45 // Stop doesn't have to and shouldn't block waiting for in-flight actions
46 // to complete. It should take any action it wants and return immediately
47 // acknowledging it has received the stop request. Terraform core will
48 // automatically not make any further API calls to the provider soon
49 // after Stop is called (technically exactly once the currently executing
50 // graph nodes are complete).
51 //
52 // The error returned, if non-nil, is assumed to mean that signaling the
53 // stop somehow failed and that the user should expect potentially waiting
54 // a longer period of time.
55 Stop() error
56}
57
58// ResourceProvisionerCloser is an interface that provisioners that can close
59// connections that aren't needed anymore must implement.
60type ResourceProvisionerCloser interface {
61 Close() error
62}
63
64// ResourceProvisionerFactory is a function type that creates a new instance
65// of a resource provisioner.
66type ResourceProvisionerFactory func() (ResourceProvisioner, error)
107c1cdb
ND
67
68// ProvisionerFactory is a function type that creates a new instance
69// of a provisioners.Interface.
70type ProvisionerFactory = provisioners.Factory