A feature of the Terraform CLI is the ability to apply
or destroy
or plan
a specific resource within your module. For example, take an example set of operations in a module like:
resource "null_resource" "file1" {
environment = {
resource = "file1"
}
provisioner "local-exec" {
command = "echo $(date) ${resource} | tee -a dates.log"
}
}
resource "null_resource" "file2" {
environment = {
resource = "file2"
}
provisioner "local-exec" {
command = "echo $(date) ${resource} | tee -a dates.log"
}
}
This would just apply as echoing two dates and the name of the resource, some number of seconds apart into the log. However, let's assume these must become discrete steps; for example, maybe null_resource.file2
only needs to be applied a second time as a check on a running environment, but none of the other steps in the plan do. You can use -target
to operate only on null_resource.file2
using this format, which works for any resource type:
terraform {plan,apply,destroy} -target=${resource_type}.${resource_name}
so to plan
for null_resource
named file2
:
terraform plan -target=null_resource.file2
This feature is commonly used for operations like modifying an instance of a module (-target=module.name.resource.name
) or applying partial changes to a subset of interdependent resources in your plan (for example, if you create a new volume, or import one not managed by Terraform, you can update a resource for a VM to attach that volume, and then apply the resource for the volume, then the VM resource using this method), but it's also helpful for developing modules:
Using this feature of the Terraform CLI, you can partially execute your plan as you add or remove resources-- this can save you time in extending your module's plans.
Top comments (0)