Radek Sprta (Posts about iac)https://radeksprta.eu/categories/iac.atom2024-01-07T02:28:54ZRadek SprtaNikolaCreate Terraform Array In a Loophttps://radeksprta.eu/posts/create-terraform-array-in-a-loop/2023-01-09T23:09:13+01:002023-01-09T23:09:13+01:00Radek Sprta<p>The other day, I needed to create a multi-SAN TLS certificate in Terraform. The DNS names ended in a number sequence, so you could easily create them in a loop. Now, Terraform has count & for_each loop to create multiple resources. But what if you want to create a variable in a loop? (I am sure some people are screaming <a href="https://www.pulumi.com/">Pulumi</a> now.)</p>
<p>Luckily, Terraform has <a href="https://registry.terraform.io/providers/hashicorp/null/latest/docs/resources/resource">null_resource</a> available, which is exactly what I needed. It creates a virtual resource with a map of strings. So, you can define it in a loop and then use the result to declare a variable.</p>
<p>Here's example code:</p>
<div class="code"><pre class="code literal-block"><span class="nb">locals</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="na">dns_sans</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">null_resource.dns_sans</span><span class="p">[</span><span class="err">*</span><span class="p">].</span><span class="nv">triggers.dns_name</span>
<span class="p">}</span>
<span class="kr">resource</span><span class="w"> </span><span class="nc">"null_resource"</span><span class="w"> </span><span class="nv">"dns_sans"</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="na">count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">var.replicas</span>
<span class="w"> </span><span class="nb">triggers</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="na">dns_name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"service-${count.index}.service-internal"</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
<p>This made my life easier. Maybe it will make yours too.</p>