<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Providers on Daniel Corneschi</title><link>https://blog.corneschi.ro/tags/providers/</link><description>Recent content in Providers on Daniel Corneschi</description><generator>Hugo</generator><language>en</language><copyright>Daniel Corneschi</copyright><lastBuildDate>Sat, 10 Oct 2026 11:20:46 +0300</lastBuildDate><atom:link href="https://blog.corneschi.ro/tags/providers/index.xml" rel="self" type="application/rss+xml"/><item><title>terraform get -update vs terraform init -upgrade</title><link>https://blog.corneschi.ro/posts/terraform-get-update-vs-init-upgrade/</link><pubDate>Sat, 10 Oct 2026 00:00:00 +0000</pubDate><guid>https://blog.corneschi.ro/posts/terraform-get-update-vs-init-upgrade/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;&#10;&lt;p&gt;Both commands refresh module sources, but they operate at different scopes and serve different purposes. Confusing them — or using one when you need the other — leads to stale modules, unexpected provider changes, or wasted time re-downloading things you didn&amp;rsquo;t intend to touch.&lt;/p&gt;&#10;&lt;h2 id="quick-comparison"&gt;Quick Comparison&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Aspect&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;code&gt;terraform get -update&lt;/code&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;code&gt;terraform init -upgrade&lt;/code&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Scope&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Modules only&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Modules + Providers + Backend&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Updates providers&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;No&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Yes&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Updates modules&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Yes&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Yes&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Updates &lt;code&gt;.terraform.lock.hcl&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;No&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Yes (provider entries)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Initializes backend&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;No&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Yes&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Works with a broken or misconfigured backend&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Yes&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;No (fails while initializing the backend)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Typical use case&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Refresh module source code&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Full dependency upgrade&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="terraform-get"&gt;terraform get&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;terraform get&lt;/code&gt; downloads and updates module source code into &lt;code&gt;.terraform/modules/&lt;/code&gt;. That&amp;rsquo;s all it does — nothing else.&lt;/p&gt;</description></item><item><title>terraform init -upgrade and Version Constraints</title><link>https://blog.corneschi.ro/posts/terraform-init-upgrade-and-constraints/</link><pubDate>Sat, 10 Oct 2026 00:00:00 +0000</pubDate><guid>https://blog.corneschi.ro/posts/terraform-init-upgrade-and-constraints/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;terraform init -upgrade&lt;/code&gt; tells Terraform to ignore the versions pinned in &lt;code&gt;.terraform.lock.hcl&lt;/code&gt; and resolve providers and modules again — selecting the newest versions that still satisfy your version constraints. Without &lt;code&gt;-upgrade&lt;/code&gt;, &lt;code&gt;terraform init&lt;/code&gt; respects whatever is already locked and only downloads what&amp;rsquo;s missing.&lt;/p&gt;&#10;&lt;p&gt;Understanding when to use &lt;code&gt;-upgrade&lt;/code&gt; and how to write effective version constraints keeps your infrastructure reproducible while still allowing controlled updates.&lt;/p&gt;&#10;&lt;h2 id="what-terraform-init-does-normally"&gt;What terraform init Does Normally&lt;/h2&gt;&#10;&lt;p&gt;A plain &lt;code&gt;terraform init&lt;/code&gt;:&lt;/p&gt;</description></item></channel></rss>