'Terraform: Conditional creation of a resource based on a variable in .tfvars
I have resources defined in .tf
files that are generic to several applications. I populate many of the fields via a .tfvars
file. I need to omit some of the resources entirely based on variables in the .tfvars
.
For example if I have a resource like:
resource "cloudflare_record" "record" {
zone_id = "${data.cloudflare_zones.domain.zones[0].id}"
name = "${var.subdomain}"
value = "${var.origin_server}"
type = "CNAME"
ttl = 1
proxied = true
}
But then I declare something like cloudflare = false
in my .tfvars
file I'd like to be able to do something like this:
if var.cloudflare {
resource "cloudflare_record" "record" {
zone_id = "${data.cloudflare_zones.domain.zones[0].id}"
name = "${var.subdomain}"
value = "${var.origin_server}"
type = "CNAME"
ttl = 1
proxied = true
}
}
I've looked at dynamic blocks but that looks like you can only use those to edit fields and blocks within a resource. I need to be able to ignore an entire resource.
Solution 1:[1]
Add a count
parameter with a ternary conditional using the variable declared in .tfvars
like this:
resource "cloudflare_record" "record" {
count = var.cloudflare ? 1 : 0
zone_id = "${data.cloudflare_zones.domain.zones[0].id}"
name = "${var.subdomain}"
value = "${var.origin_server}"
type = "CNAME"
ttl = 1
proxied = true
}
In this example var.cloudflare
is a boolean declared in the .tfvars
file. If it is true a count of 1 record
will be created. If it is false a count of 0 record
will be created.
After the count
apply the resource becomes a group, so later in the reference use 0-index
of the group:
cloudflare_record.record[0].some_field
Solution 2:[2]
An issue i'm seeing this with is if the resource your trying to create is already using a for_each then you can't use both count and for_each in the resource. I'm still trying to find an answer on this will update if I find something better.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 | Geoff Scott |