Bird
Raised Fist0
Terraformcloud~5 mins

Why provisioners run scripts on resources in Terraform - Quick Recap

Choose your learning style10 modes available
Recall & Review
beginner
What is the main purpose of provisioners in Terraform?
Provisioners run scripts or commands on resources after they are created to perform setup tasks that Terraform itself cannot do directly.
Click to reveal answer
beginner
When do provisioners run in the Terraform lifecycle?
Provisioners run after the resource is created but before Terraform marks the resource as successfully created.
Click to reveal answer
beginner
Why might you use a provisioner to run a script on a virtual machine resource?
To install software, configure settings, or start services that Terraform cannot manage directly through its resource definitions.
Click to reveal answer
intermediate
What is a common risk when using provisioners in Terraform?
If the script run by a provisioner fails, the entire resource creation can fail, causing deployment issues.
Click to reveal answer
intermediate
How do provisioners help bridge gaps in Terraform's resource management?
They allow running custom scripts or commands on resources to handle tasks Terraform resources don’t support natively.
Click to reveal answer
When do Terraform provisioners run their scripts?
ABefore Terraform plan runs
BBefore the resource is created
CAfter Terraform destroy
DAfter the resource is created
What is a typical use case for a Terraform provisioner?
ADefining the resource type
BWriting Terraform configuration files
CInstalling software on a new server
DDestroying resources
What happens if a provisioner script fails during resource creation?
AResource creation fails
BTerraform ignores the failure
CTerraform retries indefinitely
DResource is destroyed automatically
Why might you avoid using provisioners when possible?
AThey are faster than native resources
BThey can cause deployment failures if scripts fail
CThey are required for all resources
DThey replace Terraform resource definitions
Which of these is NOT a reason to use a provisioner?
ATo manage resource lifecycle natively
BTo run custom setup scripts on a resource
CTo configure software after resource creation
DTo perform tasks Terraform resources can't do
Explain why Terraform provisioners run scripts on resources and when this happens in the resource lifecycle.
Think about what Terraform can’t do by itself and when the resource is ready.
You got /3 concepts.
    Describe the risks and best practices when using provisioners in Terraform.
    Focus on what can go wrong and how to avoid problems.
    You got /4 concepts.

      Practice

      (1/5)
      1. Why do Terraform provisioners run scripts on resources?
      easy
      A. To backup resource data before creation
      B. To delete resources automatically
      C. To configure resources after they are created
      D. To monitor resource usage continuously

      Solution

      1. Step 1: Understand provisioners' purpose

        Provisioners run scripts to configure resources after Terraform creates them.
      2. Step 2: Identify correct use case

        They help install software or run commands Terraform cannot manage directly.
      3. Final Answer:

        To configure resources after they are created -> Option C
      4. Quick Check:

        Provisioners configure resources post-creation = D [OK]
      Hint: Provisioners run scripts after resource creation [OK]
      Common Mistakes:
      • Thinking provisioners delete resources
      • Assuming provisioners monitor resources
      • Believing provisioners backup data
      2. Which of the following is the correct syntax to use a local-exec provisioner in Terraform?
      easy
      A. provisioner "local-exec" { command = "echo Hello" }
      B. provisioner local_exec { run = "echo Hello" }
      C. provisioner "local-exec" (command: "echo Hello")
      D. provisioner local-exec { execute = "echo Hello" }

      Solution

      1. Step 1: Recall correct provisioner block syntax

        Terraform uses provisioner blocks with type in quotes and a command attribute.
      2. Step 2: Match syntax to options

        provisioner "local-exec" { command = "echo Hello" } matches the correct syntax: provisioner "local-exec" { command = "echo Hello" }.
      3. Final Answer:

        provisioner "local-exec" { command = "echo Hello" } -> Option A
      4. Quick Check:

        Correct provisioner syntax uses quotes and command attribute = A [OK]
      Hint: Use quotes and command attribute for local-exec provisioner [OK]
      Common Mistakes:
      • Omitting quotes around provisioner type
      • Using wrong attribute names like run or execute
      • Using parentheses instead of braces
      3. Given this Terraform snippet, what will happen when the resource is created?
      resource "null_resource" "example" {
        provisioner "local-exec" {
          command = "echo Resource created"
        }
      }
      medium
      A. Terraform will fail because null_resource cannot have provisioners
      B. Terraform will print 'Resource created' after creating the resource
      C. Terraform will create the resource but not run the command
      D. Terraform will run the command before creating the resource

      Solution

      1. Step 1: Understand null_resource and local-exec provisioner

        null_resource supports provisioners; local-exec runs commands on the machine running Terraform after resource creation.
      2. Step 2: Analyze command execution timing

        The command 'echo Resource created' runs after the resource is created, printing the message.
      3. Final Answer:

        Terraform will print 'Resource created' after creating the resource -> Option B
      4. Quick Check:

        local-exec runs command post-creation = A [OK]
      Hint: local-exec runs commands after resource creation [OK]
      Common Mistakes:
      • Thinking null_resource disallows provisioners
      • Assuming commands run before resource creation
      • Believing commands won't run at all
      4. You wrote this provisioner block but Terraform shows an error:
      provisioner "remote-exec" {
        command = "sudo apt-get update"
      }
      What is the likely cause of the error?
      medium
      A. Provisioners cannot run sudo commands
      B. The command attribute is invalid for remote-exec
      C. remote-exec provisioner requires a local script file
      D. Missing connection block to specify how to connect to the resource

      Solution

      1. Step 1: Check remote-exec requirements

        remote-exec provisioner needs a connection block to connect to the resource (SSH or WinRM).
      2. Step 2: Identify missing connection block

        The snippet lacks a connection block, causing Terraform to error because it cannot connect to run the command.
      3. Final Answer:

        Missing connection block to specify how to connect to the resource -> Option D
      4. Quick Check:

        remote-exec needs connection block = C [OK]
      Hint: Always add connection block for remote-exec provisioners [OK]
      Common Mistakes:
      • Assuming command attribute is invalid
      • Thinking sudo commands are disallowed
      • Believing remote-exec runs local scripts only
      5. You want to install software on a new VM after Terraform creates it. Which approach best uses provisioners to do this reliably?
      hard
      A. Use a remote-exec provisioner with a connection block to run installation commands after creation
      B. Use a local-exec provisioner to run installation commands on your local machine
      C. Run installation commands manually after Terraform finishes
      D. Use a provisioner without connection block to run commands remotely

      Solution

      1. Step 1: Identify provisioner type for remote VM configuration

        remote-exec provisioner runs commands on the remote VM after creation using a connection block.
      2. Step 2: Evaluate options for reliability

        Using remote-exec with connection block automates installation reliably; local-exec runs locally, manual runs are error-prone, and missing connection causes failure.
      3. Final Answer:

        Use a remote-exec provisioner with a connection block to run installation commands after creation -> Option A
      4. Quick Check:

        remote-exec + connection block = reliable remote config [OK]
      Hint: Use remote-exec with connection block for remote installs [OK]
      Common Mistakes:
      • Using local-exec for remote installs
      • Skipping connection block for remote-exec
      • Relying on manual post-creation steps
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard