For one of my terraform tasks, I needed all the possible combinations of elements from all given sets. For example, there are two sets.
set1 = ["a","b","c"]
set2 = [1,2]
The expected result is,
[["a",1], ["a",2],["b",1],["b",2],["c",1],["c",2]]
After searching about this, I learned that such a concept is called the Cartesian Product. From the Wikipedia definition,
the Cartesian product of two sets A and B, denoted A × B, is the set of all ordered pairs (a, b) where a is in A and b is in B.
In my mind, I thought there had to be a nested for looping & tried something and failed miserably.
But we think from the Programmer’s perspective, but Terraform is not a Programming Language.
Hence, After searching a lot, I came across this amazing function called setproduct, which basically provides Cartesian product out of the box,
locals{
b = ["a", "b", "c"]
a = [1, 2]
}
output "example" {
value = setproduct(local.b, local.a)}
and the output is amazing and lifesaving,
[
[
"a",
1,
],
[
"a",
2,
],
[
"b",
1,
],
[
"b",
2,
],
[
"c",
1,
],
[
"c",
2,
],
]
If you have successfully created a cartesian product without using setproduct()
, do comment here :)
I hope you learned something new from this blog post. Click here to learn about me and how you can support my work, Thank you.