What if your server setup could stop and warn you the moment something goes wrong, without you watching every step?
Why Provisioner failure behavior in Terraform? - Purpose & Use Cases
Imagine you are setting up many servers by hand, running commands on each one to install software and configure settings.
If one command fails, you might not notice immediately, and fixing it means going back to each server manually.
Doing this manually is slow and tiring.
You can easily miss errors or forget to fix them, causing servers to be inconsistent or broken.
This wastes time and can cause outages.
Provisioner failure behavior in Terraform helps by automatically detecting when a setup step fails.
It can stop the process or continue safely, so you know exactly what happened and can fix it quickly.
ssh server1 sudo apt install app ssh server2 sudo apt install app
resource "aws_instance" "example" { provisioner "remote-exec" { inline = ["sudo apt install app"] on_failure = "fail" } }
This lets you automate server setup with confidence, catching errors early and keeping your infrastructure reliable.
When launching a web app, if installing the database software fails on one server, Terraform stops and alerts you instead of continuing with broken setup.
Manual setup is slow and error-prone.
Provisioner failure behavior detects and handles errors automatically.
This improves reliability and saves time in managing infrastructure.
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
