At Iguana solutions, DevOps culture is part of any Technical Team member. When we need to implement a cloud infrastructure, we want to use “Infra as Code” tools to ease its deployment and to be part of our CI/CD pipelines. In our case, we decided to use one of the most commonly used tools: Terraform.
Terraform has been developed for 5 years now by Hashicorp. This open source tools comes with a large set of providers used to
- Implement infrastructure on Public Cloud or on common Private cloud stack such as OpenStack or VMware,
- Manage SaaS applications such as Gitlab (project or group creation for example),
- Manage resources on CDN provider such as Cloudflare
When we deploy infrastructure on a Public Cloud Provider we already use Terraform, when we need to deploy on IG1 cloud we also want to use it. IG1 Cloud uses OpenNebula to orchestrate clusters of KVM nodes and storage. Unfortunately for us, there is not an official Terraform provider for OpenNebula yet.
That is why we decided to dig into github.com to check if someone initiate a provider to manage an OpenNebula Cluster with Terraform. Guess what ? We found a project initiated by Runtastic and enhanced by Blackberry. But these two projects are old, not well maintained and based on Old version of OpenNebula.
Since then, OpenNebula has a GO API, called “Goca” and because Terraform providers must be written in Golang, we decided to develop our own provider based on the Goca.
As one of the contributors to the Goca, OpenNebula asked us, few weeks ago, if we want to submit our provider as an official one. That email made us really proud and we were really excited to answer yes to OpenNebula! Since then, our provider has been added as an OpenNebula Add-on on OpenNebula Github. Contributions are greatly welcomed
Today, we are able to write text files, using HCL, HashiCorp Configuration Language, syntax. HCL is a DSL (Domain specific language) close to JSON syntax and developed by Hashicorp. These files describe infrastructure to be deployed on several clouds. In a unique Terraform file, we use several providers to deploy infrastructure in a multi-cloud environment with a simple terraform apply command line!