Ansible dynamic inventory from Terraform
Project description
terrible
Terrible (TERRaform to ansIBLE) creates dynamic Ansible inventory from Terraform state.
Free software: Apache Software License 2.0
Documentation: https://terrible.readthedocs.io.
Installation
To install terrible, run this command in your terminal.:
$ pip install terrible
Once installed a symbolic link or shell script can be added to the Ansible inventory directory.
Symbolic link.:
$ ln -s /path/to/terrible inventory/terrible
Simple shell script wrapper.:
#!/usr/bin/env bash terrible "$@"
Usage
Usage: terrible [OPTIONS] <root_dir> Terrible extracts Ansible inventory data from Terraform state. The <root_dir> is relative to the directory where Ansible is executed but defaults to ./terraform in the current directory. Options: --host TEXT Show varibles for single host --list List all variables --nometa Remove _meta from output --pretty Make json look pretty --help Show this message and exit.
Features
Terraform Resources:
VMware vSphere (vsphere_virtual_machine)
AWS Instance (aws_instance)
Common Parameters
These can be specified by all resources. Uniq configuration details are documented in specific sections below.
- ansible_user (Optional)
The user that Ansible will connect to the host. Defaults to root if not specified.
- ansible_group (Optional)
The inventory group associated with the resource. (Add default All group?)
- ansible_host (Optional)
The host that Ansible will connect to. VMware defaults to IP of 1st interface, network_interface:0 but if can be overwriten to an specific IP. AWS defaults to public_ip and configuralbe to private_ip. (TODO: Add test and error condition for values)
VMware
When defining Terraform vsphere_virtual_machine resource use the custom_configuration_parameters block to set Ansible parameters.
Configuration example:
custom_configuration_parameters { ansible_group = "api-gateway" ansible_user = "ansible" ansible_host = "192.168.52.101" }
AWS
When defining a Terraform aws-instance resource use tags to set Ansible parameters.
- ansible_ssh_private_key_file
The key used to connect to AWS instance. The value is the path to the private key that matches the defined AWS instance key_name. Defaults to the value of key_name + .pem. EXAMPLE: If your AWS instance key_name is terraform then Ansible would look in the current working directory for terraform.pem
Configuration example:
tags { Name = "app1-aws" ansible_groups = "webapp" ansible_user = "ansible" ansible_host = "private_ip" ansible_ssh_private_key_file = "aws-keys/webapp-terraform.pem" }
Directory Layout
By default, Terrible looks for the terraform inside the Ansible playbook root directory.:
. ├── ansible.cfg ├── inventory │ ├── group_vars │ └── terrible ├── playbooks │ └── site.yml ├── requirements.yml ├── roles │ └── example_role └── terraform ├── terraform.tf ├── terraform.tfstate ├── terraform.tfvars └── variables.tf
Credits
This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.
This package was greatly influenced by the sean-abbott/terraform.py project.
History
0.1.2 (2017-08-21)
bump version testing
0.1.1 (2017-08-21)
Support for aws_instance and vsphere_virtual_machine Terraform resources.
Ansible parameters available: ansible_user, ansible_host, ansible_ssh_private_key_file
Define Terraform resource to ansible group.
0.1.0 (2017-08-10)
First release on PyPI.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for terrible-0.1.2-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6d8fa5192a164cdc6f6bda2b53998c46262d5544b8191201f4a305e3eb08f777 |
|
MD5 | debdf96149ac3a8560e96de935725cbf |
|
BLAKE2b-256 | 379464cf9a4a17e1a591999e0b346874ddec8800dec9cebe67d274fa9edc291f |