Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jonmorehouse/terraform-provisioner-ansible
A provisioner for bootstrapping terraform resources with ansible
https://github.com/jonmorehouse/terraform-provisioner-ansible
Last synced: 5 days ago
JSON representation
A provisioner for bootstrapping terraform resources with ansible
- Host: GitHub
- URL: https://github.com/jonmorehouse/terraform-provisioner-ansible
- Owner: jonmorehouse
- Created: 2016-02-14T05:18:32.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2018-01-24T16:24:29.000Z (almost 7 years ago)
- Last Synced: 2024-08-01T12:24:11.154Z (3 months ago)
- Language: Go
- Homepage:
- Size: 14.6 KB
- Stars: 524
- Watchers: 31
- Forks: 68
- Open Issues: 25
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-repositories - jonmorehouse/terraform-provisioner-ansible - A provisioner for bootstrapping terraform resources with ansible (Go)
- awesome-starred - jonmorehouse/terraform-provisioner-ansible - A provisioner for bootstrapping terraform resources with ansible (others)
README
# terraform-provisioner-ansible
> Provision terraform resources with ansible## Overview
**[Terraform](https://github.com/hashicorp/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](https://www.terraform.io/docs/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](https://www.terraform.io/docs/modules/create.html). To include it, simply download the binary and enable it as a terraform module in your **terraformrc**.
## Installation
**terraform-provisioner-ansible** ships as a single binary and is compatible with **terraform**'s plugin interface. Behind the scenes, terraform plugins use https://github.com/hashicorp/go-plugin and communicate with the parent terraform process via RPC.
To install, download and un-archive the binary and place it on your path.
```bash
$ https://github.com/jonmorehouse/terraform-provisioner-ansible/releases/download/0.0.1-terraform-provisioner-ansible.tar.gz$ tar -xvf 0.0.1-terraform-provisioner-ansible.tar.gz /usr/local/bin
```Once installed, a `~/.terraformrc` file is used to _enable_ the plugin.
```bash
providers {
ansible = "/usr/local/bin/terraform-provisioner-ansible"
}
```## Usage
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](example/) for a more detailed walkthrough of the provisioner and how to provision resources with **ansible**.