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`.