github.com/brandonstevens/terraform@v0.9.6-0.20170512224929-5367f2607e16/terraform/resource_provisioner.go (about)

     1  package terraform
     2  
     3  // ResourceProvisioner is an interface that must be implemented by any
     4  // resource provisioner: the thing that initializes resources in
     5  // a Terraform configuration.
     6  type ResourceProvisioner interface {
     7  	// Validate is called once at the beginning with the raw
     8  	// configuration (no interpolation done) and can return a list of warnings
     9  	// and/or errors.
    10  	//
    11  	// This is called once per resource.
    12  	//
    13  	// This should not assume any of the values in the resource configuration
    14  	// are valid since it is possible they have to be interpolated still.
    15  	// The primary use case of this call is to check that the required keys
    16  	// are set and that the general structure is correct.
    17  	Validate(*ResourceConfig) ([]string, []error)
    18  
    19  	// Apply runs the provisioner on a specific resource and returns the new
    20  	// resource state along with an error. Instead of a diff, the ResourceConfig
    21  	// is provided since provisioners only run after a resource has been
    22  	// newly created.
    23  	Apply(UIOutput, *InstanceState, *ResourceConfig) error
    24  
    25  	// Stop is called when the provisioner should halt any in-flight actions.
    26  	//
    27  	// This can be used to make a nicer Ctrl-C experience for Terraform.
    28  	// Even if this isn't implemented to do anything (just returns nil),
    29  	// Terraform will still cleanly stop after the currently executing
    30  	// graph node is complete. However, this API can be used to make more
    31  	// efficient halts.
    32  	//
    33  	// Stop doesn't have to and shouldn't block waiting for in-flight actions
    34  	// to complete. It should take any action it wants and return immediately
    35  	// acknowledging it has received the stop request. Terraform core will
    36  	// automatically not make any further API calls to the provider soon
    37  	// after Stop is called (technically exactly once the currently executing
    38  	// graph nodes are complete).
    39  	//
    40  	// The error returned, if non-nil, is assumed to mean that signaling the
    41  	// stop somehow failed and that the user should expect potentially waiting
    42  	// a longer period of time.
    43  	Stop() error
    44  }
    45  
    46  // ResourceProvisionerCloser is an interface that provisioners that can close
    47  // connections that aren't needed anymore must implement.
    48  type ResourceProvisionerCloser interface {
    49  	Close() error
    50  }
    51  
    52  // ResourceProvisionerFactory is a function type that creates a new instance
    53  // of a resource provisioner.
    54  type ResourceProvisionerFactory func() (ResourceProvisioner, error)