Separating Providers from the Terraform core

Terraform is my favorite tool for infrastructure building and managing. Although I use it mostly for the vSphere and vCloud Director environments (you can see more here), I know that I am far from making full use of it. Hashicorp project is growing so fast, there are some problems with scalability. Moreover, as Hashicorp wrote on their blog, Providers maintaining is quite hard because of their number. Hence decision about separating Providers from the Terraform core. This change will be applied in the 0.10.0-beta1 version of Terraform. This move will help developers not associated with the Hashicorp. No more conflicts with another Providers and core, because Providers will have each own GitHub repository too!

What will be changed?

Now, Terraform is provided as one binary file, and the code is stored in the one repository on the GitHub – Hashicorp/Terraform. Since 0.10.0-beta1 version there will be a separate repository for each Provider.  You can find them just now at the Terraform Providers profile on GitHub. So as you can see, separating Providers from the Terraform core is not only the internal change, but it affects the code management of the whole project too. It means that every Provider plugin will be versioned separately, so it is possible to release Providers independently. This is very good news, especially for developers!

Separating Providers from the Terraform core

What does it mean for the regular user?

The best answer for this question is the project owner explanation. In the Terraform changelog we can see that:

Terraform providers are no longer distributed as part of the main Terraform distribution. Instead, they are installed automatically as part of running terraform init. It is therefore now mandatory to run terraform init before any other operations that use provider plugins, to ensure that the required plugins are installed and properly initialized.

So since 0.10.0-beta1 version, you will have to initialize working directory first, before you can use Terraform. This command is used to initialize and configure Terraform with such options like backends, state locking and now also providers managing. Moreover, Hashicorp will introduce a new subcommand, terraform providers, which shows information about configured providers.

Also, you won’t have to download a huge binary file with every Provider contained in it. If you don’t need some Providers, just don’t install them. Simple, doesn’t it? I know it’s not the critical change right now (Terraform 0.9.8 binary file is 126 MB), but it’s always better to have smaller binaries. 🙂

I hope that the most important change for the regular users would be more frequently Providers releases. It means I hope these releases would appear more frequently. 🙂 We all know how it looks now. Every Provider depends on the other Providers and of course on the core of the Terraform. Also, it’s hard to manage the permissions to the repository. Separating Providers from the Terraform core allows increasing the collaborators’ number. Instead, it can help with the faster plugins developing.

It is definitely good news. Separating Providers from the Terraform core means that the whole project is evolving and its owners have a long-term strategy.

What about issues and Pull Requests?

This information is mostly for developers. Hashicorp is trying to automate the whole separation process, even on the GitHub. Unfortunately, not everything can be migrated automatically. What was (or is still being processed) made:

  • creating new repositories for the Terraform Providers,
  • separating Terraform Providers and code migration to the new repositories,
  • migrating issues to the appropriate Provider repository.

Pull Requests cannot be migrated due to its nature. New repositories have another scheme, another directories tree etc. So if you have any open Pull Requests, you must create a new one. Of course, Hashicorp said they would help with migration, but if you can do it now, it would be great.

Read More

Leave a Reply

Your email address will not be published. Required fields are marked *