Terraform is an infrastructure configuration manager by HashiCorp (Vagrant) like CloudFormation or Heat, supporting
various infrastructure providers including Amazon, VirtuaBox, …
Terraform reads *.tf and creates an execution plan containing all resources:
– instances
– volumes
– networks
– ..
You can check an example configuration here on github:
Unfortunately, it uses a custom but readable format instead of yaml.
# Create a 75GB volume on openstack
resource "openstack_blockstorage_volume_v1" "master-docker-vol" {
name = "mastervol"
size = 75
}
# Create a nova vm with the given colume attached
resource "openstack_compute_instance_v2" "machine" {
name = "test"
region = "${var.openstack_region}"
image_id = "${var.master_image_id}"
flavor_name = "${var.master_instance_size}"
availability_zone = "${var.openstack_availability_zone}"
key_pair = "${var.openstack_keypair}"
security_groups = ["default"]
metadata {
ssh_user = "cloud-user"
}
volume {
volume_id = "${openstack_blockstorage_volume_v1.master-docker-vol.id}"
}
}
Further resources (eg. openstack volumes|floating_ip, digitalocean droplets, docker containers, ..)
can be defined via plugins.
At the end of every deployment cycle, terraform updates the `terraform.tstate` state file (which may
be stored on s3 or on shared storage) describing the actual infrastructure.
Upon configuration changes, terraform creates and shows a new execution plan,
that you can eventually apply.
As there’s no ansible provisioner, a terraform.py script can be used to extract an inventory file from a `terraform.tstate`.