Skip to content


Switch branches/tags


Failed to load latest commit information.
Latest commit message
Commit time


Provision terraform resources with ansible


Terraform is a tool for automating infrastructure. Terraform includes the ability to provision resources at creation time through a plugin api. Currently, some builtin provisioners such as chef and standard scripts are provided; this provisioner introduces the ability to provision an instance at creation time with ansible.

This provisioner provides the ability to apply host-groups, plays or roles against a host at provision time. Ansible is run on the host itself and this provisioner configures a dynamic inventory on the fly as resources are created.

terraform-provisioner-ansible is shipped as a Terraform module. To include it, simply download the binary and enable it as a terraform module in your terraformrc.


terraform-provisioner-ansible ships as a single binary and is compatible with terraform's plugin interface. Behind the scenes, terraform plugins use and communicate with the parent terraform process via RPC.

To install, download and un-archive the binary and place it on your path.


$ tar -xvf 0.0.1-terraform-provisioner-ansible.tar.gz /usr/local/bin

Once installed, a ~/.terraformrc file is used to enable the plugin.

providers {
    ansible = "/usr/local/bin/terraform-provisioner-ansible"


Once installed, you can provision resources by including an ansible provisioner block.

The following example demonstrates a configuration block to apply a host group's plays to new instances. You can specify a list of hostgroups and a list of plays to specify which ansible tasks to perform on the host.

Additionally, groups and extra_vars are accessible to resolve variables and group the new host in ansible.

  resource "aws_instance" "terraform-provisioner-ansible-example" {
    ami = "ami-408c7f28"
    instance_type = "t1.micro"

    provisioner "ansible" {
      connection {
        user = "ubuntu"

      playbook = "ansible/playbook.yml"
      groups = ["all"]
      hosts = ["terraform"]
      extra_vars = {
        "env": "terraform"  

Check out example for a more detailed walkthrough of the provisioner and how to provision resources with ansible.