Terraform
Terraform is the orchestration tool that is recommended by the Jetstream2 team. Jetstream2 runs on the OpenStack platform, which has its own orchestration package, called Heat. While you could use Heat directly to perform orchestration for Jetstream2, using Terraform provides several advantages.
One advantage of Terraform is that it is "cloud agnostic", which means that its basic operational principals can be applied to any cloud platform. To facilitate this, a set of "providers" have been implemented to interface between Terraform and the functionality exposed by any given cloud platform. While Terraform's provider for OpenStack doesn't provide exhaustive coverage of OpenStack's functionality, it does expose all of its most commonly used components, including block storage, compute, database, identity, images, key manager, networking, shared file system and VPN access.
One benefit of a cloud agnostic tool is that it is easier to port a deployment configuration from one cloud platform to another. Instead of rewriting the entire deployment, you only need to modify the part that interfaces with the cloud provider. This has several implications:
- It is fairly easy for you to move an existing Terraform configuration between Jetstream2 and another cloud provider.
- If you find an example Terraform configuration that was written for a different cloud provider, you can easily adapt it for use with Jetstream2.
- You can create Terraform configurations that work with both Jetstream2 and other cloud providers at the same time.
Terraform Information
Terraform is an open source project from HashiCorp that is free to use. In this roadmap we will invoke Terraform functionality through its command line interface (CLI), which you will need to install on your own computer or on a cloud instance. Terraform commands read configuration files written in the HashiCorp Configuration Language (HCL), whose syntax will be described in later sections. These commands then interact with the specified cloud providers to determine their state and operate on entities on the cloud platform.
There are a few Terraform terms that will be used throughout this roadmap:
- Resource - Refers to a component found on a cloud computing platform (e.g. an instance, a network, a key pair, etc.). Your Terraform configurations will largely consist of defining resources and their relationships.
- Provider - Serves as the interface between Terraform and a cloud platform. Every Terraform configuration must have at least one provider.
- Provisioner - A mechanism for performing initialization work on a cloud instance. Provisioners might update the operating system, install software or copy files to the instance.