HashiCorp Terraform has an inline If/Else conditional expression that enables you to set parameters and variables programmatically based on the condition being evaluated. The syntax of this “If/Then” or “If/Else” expression is similar to other programming languages where you have a condition to evaluate, then the result to return if either True or False are the evaluated conditions. It follows the below format in HCL:
condition ? true_value : false_value
This conditional expression can be used to programmatically assign resource parameters and variables based on an expression being evaluated. However, this feature is also very useful for other scenarios as well.
When setting up a block of HCL code to deploy / manage a resource, you can combine the inline If/Else conditional expression with the Resource count feature to easily be able to check a condition, then decide programmatically whether to deploy / manage the resource or not in your deployment. This can be useful with implementing Feature Flags in your Terraform code, as well as other scenarios where you may need to conditionally deploy resources.
You simply set the value of the count property of the resource using the If/Else conditional expression to assign the values of either 1 (to deploy the resource) or 0 (to not deploy the resource). This is a useful features that helps when developing custom Terraform Modules or other blocks of HCL that are reusable across may different Terraform projects.
The following is an example of using this technique to implement the conditional deployment of a resource based on a feature flag variable:
resource "azurerm_function_app" "b59func" {
# Deploy conditionally based on Feature Flag variable
count = local.deploy_b59func == true ? 1 : 0
# resource attributes here
}
The count property on the resource block in Terraform used in conjunction with a conditional expression is the closest to supporting an “if” property to determine conditional resources. The conditional expression above essentially set the count to 1 to provision a single instance of the resource. When set to 0 then it will not provision the resource at all.
The
countproperty is also supported on Terraformmoduleblocks as well; as of Terraform 0.13 or later. So, this conditional deployment technique is not just available forresourceblocks, but also Terraform Modules with themoduleblock too!
The following is an example of using this technique to implement the conditional deployment of a module based on a feature flag variable:
module "azure-web-app-1" {
source = "../../modules/azure-web-app"
# Deploy conditionally based on Feature Flag variable
count = local.deploy_b59webapp == true ? 1 : 0
# module attributes here
}
Using these conditional expressions to conditionally deploy / manage resources in Terraform does not throw any exceptions or raise any errors based on the conditional expression. This is just an easy way to programmatically determine whether to deploy / manage the resource. If you need to raise an error if a certain condition is met within your Terraform code, then you’ll want to look into the Preconditions and Postconditions features.
Original Article Source: Terraform: If/Else Conditional Resource and Module Deployment written by Chris Pietschmann (If you're reading this somewhere other than Build5Nines.com, it was republished without permission.)

Microsoft Azure Regions: Interactive Map of Global Datacenters
Create Azure Architecture Diagrams with Microsoft Visio
Byte Conversion Calculator from KB, MB, GB, TB, PB
IPv4 Address CIDR Range Reference and Calculator
Azure Functions: Extend Execution Timeout Past 5 Minutes





