A long time ago in a galaxy far far away, lived a bunch of human beings known as “SysAdmins”. Those creatures used to do everything by hand: every piece of infrastructure was deployed manually (Servers, ELB, Network topology, Databases, etc.).
Then the cloud happened. It caused chaos, because of which many SysAdmins took a vacation forever. The remaining ones had to change their attitude and that was the birth of “DevOps”. A new concept has been introduced: “Infrastructure as Code” (IaC). The idea is to treat your infrastructure the same way you deal with your code. All changes can now be captured in code and versioned to code repository rather than a SysAdmin’s head.
- Platform agnostic tool.
- Open source.
- Easy to use & well documented.
Surely, there are other tools like: Puppet, Juju, Otter, Chef, SaltStack, Ansible, OpsWorks & CloudFormation,.., just to name a few. These tools are more configuration management tools than orchestration tools (except CloudFormation). They were built to install things on top of servers not to create new ones. Of course, most of the configuration management tools can do some degree of provisioning. They have indeed overlapping capabilities so we recommend using both together.
We went even further and setup the deployment flow above: any changes in the infrastructure trigger Jenkins build, run Smoke Tests (terraform fmt, execution plan), build a machine image with Packer & provision the infrastructure with our Terraform built-in modules. Once, the environment is created, we use Docker to run immutable containers.
It is worth mentioning that we use Terraform with ESX and its support for VMware is sort of dicey. We run into situations where the plugins for VMware doesn't support fancy features like NSX Edge or vSAN management. So you can either end up using the VMware “atrocious” API to create custom plugins in Golang for Terraform, which is not recommended (I've read through about 30 pages of the vSphere Web Services SDK Programming Guide and still have no idea how to get any data), or you can just end your misery and install OpenStack as control plane on top of VMware vCenter, and use Terraform OpenStack plugin.
By the way, if any of these subject matters are of interest to you, InterCloud is quickly expanding our engineering team (engineers, architects, leads, etc.). If you’d like to work with InterCloud, drop us a message!