{"id":49275,"date":"2025-05-05T10:35:19","date_gmt":"2025-05-05T10:35:19","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=49275"},"modified":"2025-05-05T10:35:19","modified_gmt":"2025-05-05T10:35:19","slug":"terraform-tfenv-tutorial-from-basic-to-advanced","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/terraform-tfenv-tutorial-from-basic-to-advanced\/","title":{"rendered":"Terraform tfenv Tutorial: From Basic to Advanced"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>What is <code>tfenv<\/code>?<\/strong><\/h3>\n\n\n\n<p><code>tfenv<\/code> is a Terraform version manager that allows you to easily install and manage multiple versions of Terraform on your system. You can switch between different versions of Terraform quickly, which is especially useful when you are working with multiple Terraform projects that require different versions of the tool.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 1: Installing <code>tfenv<\/code><\/strong><\/h3>\n\n\n\n<p>The first step is to install <code>tfenv<\/code> on your system. You can install <code>tfenv<\/code> using <strong>Homebrew<\/strong>, <strong>Git<\/strong>, or manually.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>1.1: Installing with Homebrew (for macOS or Linux)<\/strong><\/h4>\n\n\n\n<p>If you are using <strong>macOS<\/strong> or <strong>Linux<\/strong> and have <strong>Homebrew<\/strong> installed, you can easily install <code>tfenv<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">brew install tfenv\n<\/code><\/span><\/pre>\n\n\n<h4 class=\"wp-block-heading\"><strong>1.2: Installing Manually (without Homebrew)<\/strong><\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Clone the <code>tfenv<\/code> repository from GitHub: <code>git clone https:\/\/github.com\/tfutils\/tfenv.git ~\/.tfenv<\/code><\/li>\n\n\n\n<li>Add the following to your <code>~\/.bashrc<\/code> (or <code>~\/.zshrc<\/code> for Zsh users): <code>export PATH=\"$HOME\/.tfenv\/bin:$PATH\"<\/code><\/li>\n\n\n\n<li>Reload your terminal: <code>source ~\/.bashrc # or source ~\/.zshrc for Zsh users<\/code><\/li>\n\n\n\n<li>Verify the installation: <code>tfenv --version<\/code><\/li>\n<\/ol>\n\n\n\n<p>If the installation was successful, you should see the version of <code>tfenv<\/code> installed.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 2: Installing Terraform Versions Using <code>tfenv<\/code><\/strong><\/h3>\n\n\n\n<p>With <code>tfenv<\/code> installed, you can now install specific versions of <strong>Terraform<\/strong>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>2.1: Installing the Latest Stable Version<\/strong><\/h4>\n\n\n\n<p>To install the latest stable version of Terraform:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">tfenv install latest\n<\/code><\/span><\/pre>\n\n\n<p>This will install the latest stable version of Terraform and set it as the default.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>2.2: Installing a Specific Version<\/strong><\/h4>\n\n\n\n<p>To install a specific version of Terraform, use the following command:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">tfenv<\/span> <span class=\"hljs-selector-tag\">install<\/span> 1<span class=\"hljs-selector-class\">.0<\/span><span class=\"hljs-selector-class\">.0<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This installs <strong>Terraform 1.0.0<\/strong>. You can replace <code>1.0.0<\/code> with any version you need.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>2.3: Installing a Version for a Specific Project<\/strong><\/h4>\n\n\n\n<p>To install a version of Terraform for a specific project, you can create a <code>.terraform-version<\/code> file in the project directory with the desired version.<\/p>\n\n\n\n<p>For example, if you want to use Terraform <code>0.15.0<\/code> for a project:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Navigate to the project directory: <code>cd ~\/projects\/my_project<\/code><\/li>\n\n\n\n<li>Create a <code>.terraform-version<\/code> file with the version number: <code>echo \"0.15.0\" > .terraform-version<\/code> <code>tfenv<\/code> will automatically use Terraform <code>0.15.0<\/code> whenever you are in that directory.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 3: Switching Between Terraform Versions<\/strong><\/h3>\n\n\n\n<p>With <code>tfenv<\/code>, switching between installed versions of Terraform is simple.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>3.1: Switching to a Specific Version<\/strong><\/h4>\n\n\n\n<p>To switch to a different version that is already installed:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">tfenv<\/span> <span class=\"hljs-selector-tag\">use<\/span> 1<span class=\"hljs-selector-class\">.1<\/span><span class=\"hljs-selector-class\">.0<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This will set <strong>Terraform 1.1.0<\/strong> as the active version.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>3.2: Switching to the Version Defined in <code>.terraform-version<\/code><\/strong><\/h4>\n\n\n\n<p>If you have a <code>.terraform-version<\/code> file in your project directory, you can switch to the version specified in that file with:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">tfenv <span class=\"hljs-keyword\">use<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This will automatically switch to the version specified in the <code>.terraform-version<\/code> file.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>3.3: Listing Installed Versions<\/strong><\/h4>\n\n\n\n<p>You can list all installed versions of Terraform with:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">tfenv <span class=\"hljs-keyword\">list<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This shows a list of Terraform versions installed on your system, and it marks the active version.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>3.4: Removing a Version<\/strong><\/h4>\n\n\n\n<p>If you want to remove a specific version, use:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">tfenv<\/span> <span class=\"hljs-selector-tag\">uninstall<\/span> 1<span class=\"hljs-selector-class\">.0<\/span><span class=\"hljs-selector-class\">.0<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This removes <strong>Terraform version 1.0.0<\/strong> from your system.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 4: Managing Multiple Terraform Versions<\/strong><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>4.1: Setting a Global Version<\/strong><\/h4>\n\n\n\n<p>You can set a global version of Terraform that will be used across all projects unless overridden by a <code>.terraform-version<\/code> file.<\/p>\n\n\n\n<p>To set a global version:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">tfenv<\/span> <span class=\"hljs-selector-tag\">global<\/span> 1<span class=\"hljs-selector-class\">.1<\/span><span class=\"hljs-selector-class\">.0<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This sets <strong>Terraform 1.1.0<\/strong> as the default version for all projects.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>4.2: Setting a Local Version (for a specific project)<\/strong><\/h4>\n\n\n\n<p>If you want to use a specific version of Terraform for a particular project, you can set a local version. You can do this by creating a <code>.terraform-version<\/code> file in the project&#8217;s root directory, as shown in <strong>Step 2.3<\/strong>.<\/p>\n\n\n\n<p>Alternatively, you can manually specify the version:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">tfenv<\/span> <span class=\"hljs-selector-tag\">local<\/span> 0<span class=\"hljs-selector-class\">.14<\/span><span class=\"hljs-selector-class\">.0<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This will create a <code>.terraform-version<\/code> file in the current directory, making <strong>Terraform 0.14.0<\/strong> the local version for that project.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 5: Use Cases for <code>tfenv<\/code><\/strong><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>5.1: Working on Multiple Terraform Projects<\/strong><\/h4>\n\n\n\n<p>With <code>tfenv<\/code>, you can manage multiple versions of Terraform easily. For example:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Project <code>A<\/code> requires <strong>Terraform 0.14.0<\/strong>.<\/li>\n\n\n\n<li>Project <code>B<\/code> requires <strong>Terraform 1.0.0<\/strong>.<\/li>\n\n\n\n<li>Project <code>C<\/code> requires the latest stable version.<\/li>\n<\/ul>\n\n\n\n<p>You can use <code>tfenv<\/code> to easily switch between these versions without any issues.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>5.2: Collaborating with Teams<\/strong><\/h4>\n\n\n\n<p>If your team works with different versions of Terraform, <code>tfenv<\/code> helps ensure everyone is using the same version for a project. By checking in the <code>.terraform-version<\/code> file, you ensure consistency across your team.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 6: Troubleshooting<\/strong><\/h3>\n\n\n\n<p>If you encounter any issues, here are some tips for troubleshooting:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>6.1: Verify Installed Versions<\/strong><\/h4>\n\n\n\n<p>If you&#8217;re unsure whether a version is installed:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">tfenv <span class=\"hljs-keyword\">list<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\"><strong>6.2: Verify Active Version<\/strong><\/h4>\n\n\n\n<p>To check the current active version of Terraform:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">terraform version\n<\/code><\/span><\/pre>\n\n\n<p>This will display the currently active version of Terraform in use.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>6.3: Reinstall a Version<\/strong><\/h4>\n\n\n\n<p>If a Terraform version seems to be misbehaving, you can uninstall and then reinstall it:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">tfenv<\/span> <span class=\"hljs-selector-tag\">uninstall<\/span> 1<span class=\"hljs-selector-class\">.0<\/span><span class=\"hljs-selector-class\">.0<\/span>\n<span class=\"hljs-selector-tag\">tfenv<\/span> <span class=\"hljs-selector-tag\">install<\/span> 1<span class=\"hljs-selector-class\">.0<\/span><span class=\"hljs-selector-class\">.0<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Conclusion<\/strong><\/h3>\n\n\n\n<p><code>tfenv<\/code> is an excellent tool for managing multiple versions of Terraform, especially if you&#8217;re working with multiple Terraform projects or need to ensure consistent versions across your team. By following the steps in this tutorial, you can easily install, switch between, and manage different versions of Terraform.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>What is tfenv? tfenv is a Terraform version manager that allows you to easily install and manage multiple versions of Terraform on your system. You can switch between different versions&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-49275","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49275","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=49275"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49275\/revisions"}],"predecessor-version":[{"id":49276,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49275\/revisions\/49276"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=49275"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=49275"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=49275"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}