github.com/richardmarshall/terraform@v0.9.5-0.20170429023105-15704cc6ee35/helper/schema/resource_importer.go (about)

     1  package schema
     2  
     3  // ResourceImporter defines how a resource is imported in Terraform. This
     4  // can be set onto a Resource struct to make it Importable. Not all resources
     5  // have to be importable; if a Resource doesn't have a ResourceImporter then
     6  // it won't be importable.
     7  //
     8  // "Importing" in Terraform is the process of taking an already-created
     9  // resource and bringing it under Terraform management. This can include
    10  // updating Terraform state, generating Terraform configuration, etc.
    11  type ResourceImporter struct {
    12  	// The functions below must all be implemented for importing to work.
    13  
    14  	// State is called to convert an ID to one or more InstanceState to
    15  	// insert into the Terraform state. If this isn't specified, then
    16  	// the ID is passed straight through.
    17  	State StateFunc
    18  }
    19  
    20  // StateFunc is the function called to import a resource into the
    21  // Terraform state. It is given a ResourceData with only ID set. This
    22  // ID is going to be an arbitrary value given by the user and may not map
    23  // directly to the ID format that the resource expects, so that should
    24  // be validated.
    25  //
    26  // This should return a slice of ResourceData that turn into the state
    27  // that was imported. This might be as simple as returning only the argument
    28  // that was given to the function. In other cases (such as AWS security groups),
    29  // an import may fan out to multiple resources and this will have to return
    30  // multiple.
    31  //
    32  // To create the ResourceData structures for other resource types (if
    33  // you have to), instantiate your resource and call the Data function.
    34  type StateFunc func(*ResourceData, interface{}) ([]*ResourceData, error)
    35  
    36  // InternalValidate should be called to validate the structure of this
    37  // importer. This should be called in a unit test.
    38  //
    39  // Resource.InternalValidate() will automatically call this, so this doesn't
    40  // need to be called manually. Further, Resource.InternalValidate() is
    41  // automatically called by Provider.InternalValidate(), so you only need
    42  // to internal validate the provider.
    43  func (r *ResourceImporter) InternalValidate() error {
    44  	return nil
    45  }
    46  
    47  // ImportStatePassthrough is an implementation of StateFunc that can be
    48  // used to simply pass the ID directly through. This should be used only
    49  // in the case that an ID-only refresh is possible.
    50  func ImportStatePassthrough(d *ResourceData, m interface{}) ([]*ResourceData, error) {
    51  	return []*ResourceData{d}, nil
    52  }