Conditional Expressions
A conditional expression uses the value of a boolean expression to select one of two values. If you are familiar with programming languages such as Javascript or Python the Terraform conditional expressions are similar if-else functions.
The syntax of a conditional expression is as follows:
condition ? true_val : false_valIf condition is true then the result is true_val. If condition is false then the result is false_val.
Example #1
In a property rule tree you can set behaviors based on a condition. For example we could apply a caching "no store" when var.environment is "dev":
data "akamai_property_rules_builder" "my_property_rule_caching" {
rules_v2024_02_12 {
name = "Caching"
comments = "Offload Origin"
criteria_must_satisfy = "any"
behavior {
caching {
behavior = var.environment == "dev" ? "NO_STORE" : "MAX_AGE"
must_revalidate = false
ttl = "7d"
}
}
}
}In this scenario when behavior = "NO_STORE" the other arguments for the caching behavior block are ignored. And if the environment is other than dev behavior = "MAX_AGE" gets applied instead.
Example #2
Another common use of conditional expressions in Akamai is for individual or simoultaneous activations in Property Manager:
resource "akamai_property_activation" "my_property_activation_staging" {
property_id = akamai_property.my_property.id
contact = [var.email]
version = var.activate_property_on_staging ? akamai_property.my_property.latest_version : akamai_property.my_property.staging_version
network = "STAGING"
note = var.version_notes
auto_acknowledge_rule_warnings = true
}
resource "akamai_property_activation" "my_property_activation_production" {
property_id = akamai_property.my_property.id
contact = [var.email]
version = var.activate_property_on_staging ? akamai_property.my_property.latest_version : akamai_property.my_property.staging_version
network = "PRODUCTION"
note = var.version_notes
auto_acknowledge_rule_warnings = true
}The logic is similar for both activation resources, but let's review the case for the my_property_activation_staging resource:
- If
var.activate_property_on_stagingistruethen the result isakamai_property.my_property.latest_versionwhich holds the latest property version created by theakamai_propertyresource effectively activting the new version to staging. - If
var.activate_property_on_stagingisfalsethen the result isakamai_property.my_property.staging_versionwhich holds the current active version in staging, tricking TF into activate an already activated version effectivelly performing no activation.
Exercise
Configure
Define a new variable named ab_test and give it a default value of "A".
Update
In your property created in the Exercise #2 in module 5. Resources create a condition for the origin name based on the variable ab_test. That is if ab_test="A" go to Origin A (e.g. origin-a.example.com), else go to Origin B (e.g. origin-b.example.com).
Plan/Apply
Run terraform a few times and modify the value of ab_test each time.
Commit
- Commit your change and push it to GitHub.