-
Notifications
You must be signed in to change notification settings - Fork 3
terraform condition
ghdrako edited this page May 18, 2022
·
6 revisions
output "b1" {
value = contains(["a","b","c"], "d") ? "is true" : "is false"
}
output "b2" {
value = keys({a: 1, b: 2, c: 3}) == ["a","b","c"] ? "is true" : "is false"
}
output "b3" {
value = contains(keys({a: 1, b: 2, c: 3}), "b") ? "is true" : "is false"
}
$ terraform apply -auto-approve
Outputs:
b1 = is false
b2 = is true
b3 = is true
You mast wrapping the multi-line ternary expressions with (...)
output "c3" {
value = (
contains(["a","b","c"], "d")
? "is true"
: "is false"
)
}
variable "create1" {
default = true
}
resource "random_pet" "pet1" {
count = var.create1 ? 1 : 0
length = 2
}
output "pet1" {
value = random_pet.pet1
}
Using the Terraform count attribute is that the result of the resource declaration is no longer a single element. It’s an Array.
locals {
make_bucket = "${var.create_bucket == "true" ? true : false}"
}
resource "google_storage_bucket" "twinkiebucket" {
count = "${local.make_bucket ? 1 : 0}"
name = "${var.bucket_name}'
project = "${var.project_name}"
}
resource "aws_security_group_rule" "allowlist" {
for_each = var.cidr_blocks == [] ? [] : var.cidr_blocks
type = "ingress"
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = [each.value]
security_group_id = aws_security_group.bastion.id
}
Terraform allows write the conditional expression that will set the null value for the argument. It means the absence or omission and Terraform would behave the same as if you did not specify the argument at all.
resource "aws_launch_template" "this" {
name = "my-launch-template"
...
key_name = var.use_default_keypair ? var.keypair_name : null
...
resource "aws_cloudfront_distribution" "cdn" {
enabled = true
...
dynamic "custom_error_response" {
for_each = var.custom_error_response == null ? [] : [var.custom_error_response]
iterator = cer
content {
error_code = lookup(cer.value, "error_code", null)
error_caching_min_ttl = lookup(cer.value, "error_caching_min_ttl", null)
response_code = lookup(cer.value, "response_code", null)
response_page_path = lookup(cer.value, "response_page_path", null)
}
}
...
}
Test