<story><title>Terraform 1.0</title><url>https://github.com/hashicorp/terraform/releases/tag/v1.0.0</url></story><parent_chain><item><author>solatic</author><text>Terraform is such an underappreciated tool. It seems like so much of the hate surrounds HCL1 (back in Terraform before 0.12) and doesn&amp;#x27;t reflect modern Terraform.&lt;p&gt;For example, after introducing `for_each` and dynamic blocks, it&amp;#x27;s possible to nearly entirely ditch variables files and local modules, and just add more infrastructure by editing a local YAML file. The only variables your Terraform code should have should be credentials &amp;#x2F; other secrets that are not loaded from environment variables by providers. A great public example of this usage pattern is supplied by &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;concourse&amp;#x2F;governance&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;concourse&amp;#x2F;governance&lt;/a&gt; to manage their GitHub repositories.</text></item></parent_chain><comment><author>majormajor</author><text>My problem with this approach is that it&amp;#x27;s still too much &amp;quot;infrastructure as data&amp;quot; and not &amp;quot;infrastructure as code.&amp;quot; Moving infrastructure data into flat files is not a clear-cut win over having it in a database - you get easier version control with external tools like git, but you everything that makes a database a joy to work with instead of flat files, like schema validation and easy queries, etc.&lt;p&gt;Things like for_each and variables exist because &amp;quot;infrastructure as data&amp;quot; would be incredibly tedious and brittle and hard to extend, but an approach that tries to get to &amp;quot;infrastructure as code&amp;quot; by starting with a data format instead of a programming language just seems like too big a gap to cross. I haven&amp;#x27;t seen a lot of teams unit testing their terraform, for instance.</text></comment>
<story><title>Terraform 1.0</title><url>https://github.com/hashicorp/terraform/releases/tag/v1.0.0</url></story><parent_chain><item><author>solatic</author><text>Terraform is such an underappreciated tool. It seems like so much of the hate surrounds HCL1 (back in Terraform before 0.12) and doesn&amp;#x27;t reflect modern Terraform.&lt;p&gt;For example, after introducing `for_each` and dynamic blocks, it&amp;#x27;s possible to nearly entirely ditch variables files and local modules, and just add more infrastructure by editing a local YAML file. The only variables your Terraform code should have should be credentials &amp;#x2F; other secrets that are not loaded from environment variables by providers. A great public example of this usage pattern is supplied by &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;concourse&amp;#x2F;governance&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;concourse&amp;#x2F;governance&lt;/a&gt; to manage their GitHub repositories.</text></item></parent_chain><comment><author>thayne</author><text>It&amp;#x27;s a lot better than it used to be. But there are still quite a few annoyances. For example, you still need to use count as a hack for the absence of any kind  of &amp;quot;if&amp;quot;.  You can&amp;#x27;t make custom functions. Modules can be kind of awkward to work with. There are still some places that can&amp;#x27;t take any dynamic values such as lifecycle.ignore_changes and arguments to providers and backends.</text></comment>