Provisioner failure behavior in Terraform - Commands & Configuration
resource "aws_instance" "example" { ami = "ami-0c55b159cbfafe1f0" instance_type = "t2.micro" provisioner "local-exec" { command = "echo Hello from provisioner" } provisioner "remote-exec" { inline = [ "sudo apt-get update", "sudo apt-get install -y nginx" ] on_failure = "continue" } }
This Terraform file creates an AWS EC2 instance.
The local-exec provisioner runs a simple local command after the instance is created.
The remote-exec provisioner runs commands on the instance to update packages and install nginx.
The on_failure = "continue" setting tells Terraform to keep going even if the remote commands fail.
terraform init
terraform apply -auto-approve
-auto-approve - Skip manual approval to apply changes immediatelyterraform destroy -auto-approve
-auto-approve - Skip manual approval to destroy resources immediatelyIf a provisioner fails, Terraform can either stop the whole process or continue based on the on_failure setting.
Practice
What does the on_failure argument in a Terraform provisioner control?
Solution
Step 1: Understand provisioner purpose
Provisioners run scripts or commands after resource creation.Step 2: Role of
Theon_failureon_failureargument controls what Terraform does if the provisioner fails.Final Answer:
It controls what happens if the provisioner script or command fails. -> Option AQuick Check:
on_failurecontrols failure behavior [OK]
- Confusing on_failure with timeout settings
- Thinking on_failure sets provisioner order
- Assuming on_failure defines OS type
Which of the following is the correct syntax to make a provisioner continue even if it fails?
provisioner "local-exec" {
command = "echo Hello"
on_failure = ?
}Solution
Step 1: Recall valid
Terraform supportson_failurevaluesfailandcontinueas validon_failurevalues.Step 2: Identify correct value to continue on failure
To continue even if the provisioner fails, usecontinue.Final Answer:
"continue" -> Option AQuick Check:
on_failure = "continue"continues on failure [OK]
- Using invalid values like "ignore" or "skip"
- Confusing "fail" with continuing on failure
- Omitting quotes around the value
Given this Terraform snippet, what happens if the local-exec provisioner command fails?
resource "null_resource" "example" {
provisioner "local-exec" {
command = "exit 1"
on_failure = "fail"
}
}Solution
Step 1: Analyze provisioner command and on_failure
The command "exit 1" will fail. Theon_failureis set to "fail".Step 2: Understand effect of
This setting causes Terraform to stop and report an error if the provisioner fails.on_failure = "fail"Final Answer:
Terraform stops and reports an error, halting the apply process. -> Option CQuick Check:
on_failure = "fail"stops on failure [OK]
- Assuming Terraform retries automatically
- Thinking failure is ignored with "fail"
- Believing resource is created despite failure
Identify the error in this provisioner block that causes Terraform to ignore failures unexpectedly:
provisioner "remote-exec" {
inline = ["false_command"]
on_failure = fail
}Solution
Step 1: Check
The value foron_failuresyntaxon_failuremust be a quoted string, e.g., "fail" or "continue".Step 2: Identify impact of missing quotes
Without quotes, Terraform treats it as an identifier, causing unexpected behavior or ignoring the setting.Final Answer:
Theon_failurevalue should be a string with quotes. -> Option BQuick Check:
on_failurevalues require quotes [OK]
on_failure values "fail" or "continue" [OK]- Omitting quotes around
on_failurevalues - Confusing command errors with syntax errors
- Thinking
on_failureis unsupported
You want to run a local-exec provisioner that might fail but should not stop Terraform from creating other resources. Which configuration achieves this?
resource "null_resource" "example" {
provisioner "local-exec" {
command = "some_command"
on_failure = ?
}
}Solution
Step 1: Understand requirement to not stop Terraform
The provisioner may fail but Terraform should continue creating other resources.Step 2: Choose correct
Usingon_failurevalueon_failure = "continue"tells Terraform to ignore provisioner failure and proceed.Final Answer:
"continue" to ignore failure and proceed -> Option DQuick Check:
on_failure = "continue"allows continuation on failure [OK]
- Using unsupported values like "retry" or "ignore"
- Choosing "fail" which stops Terraform
- Not quoting the
on_failurevalue
Ready to prove it?
Pass the test and this pattern moves unknown
