Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Terraform: How to add a filter to a data source conditionally

Given the data source definition:

data "aws_ami" "my_ami" {
  filter {
    name   = "name"
    values = ["my_ami_name"]
  }
}

How does one add a second filter only if a condition is true?

Example pseudo code of what I want:

data "aws_ami" "my_ami" {
  filter {
    name   = "name"
    values = ["my_ami_name"]
  }
  var.state ? filter {
    name   = "state"
    values = [var.state]
  } : pass
}

The second filter would only be used if the state variable has content.

Note that I don't want to use a 'N/A' value to always use the second filter, regardless if it's needed or not.

like image 906
Andrés Delfino Avatar asked Oct 16 '25 15:10

Andrés Delfino


1 Answers

You can use dynamic blocks. The condition depends exactly on what is your condition (var.state is not shown, so I don't know what it is), but in general you can do:

data "aws_ami" "my_ami" {

  filter {
    name   = "name"
    values = ["my_ami_name"]
  }

  dynamic "filter" {
    for_each = var.state ? [1] : []
    content {
      name   = "state"
      values = [var.state]    
    }
  } 
}
like image 82
Marcin Avatar answered Oct 18 '25 08:10

Marcin



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!