Ansible is an orchestration engine that automates configuration management and application deployment.
Ansible uses YAML, in the form of Ansible playbooks, to describe automation jobs and SSH to communicate with the systems it manages.
Prerequisites
- Xcode Command Line Tools
To install the Xcode Command Line Tools in OSX Mavericks (10.9.x), enter the following command:
sudo xcode-select --install
To check that they have been installed, enter the following command::
sudo xcode-select -p
If you see:
/Applications/Xcode.app/Contents/Developer
Then you're good to go.
Install Ansible
To install Ansible on OSX you should use "pip" the Python package manager:
sudo easy_install pip
First, we need to install the Python Cryptography Toolkit:
sudo ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install pycrypto
Note: sudo
filters out most environment variables as a security measure.
Now, we can install Ansible:
sudo pip install ansible
Finally, to check that Ansible has been installed, enter the following command:
sudo pip install ansible --upgrade
Configure Ansible
By default, Ansible uses SSH to communicate with remote systems, so you should be familiar with key-based authentication and SSH configuration.
Inventory Files
Ansible uses inventory files to describe the systems it manages.
To create an inventory file, enter the following commands:
mkdir ~/ansible
touch ~/ansible/hosts
Open it with a text editor. I used TextEdit:
open -a TextEdit ~/ansible/hosts
And, update it as follows:
[production]
robferguson.org:22000 ansible_connection=ssh ansible_ssh_user=homer
Note: For each server you want to manage there should be a corresponding entry in your ~/.ssh/known_hosts
file.
We also need to let Ansible know where it can find our inventory file, add the following line to the end of your ~/.bash_profile
(or if you don't want to maintain two separate config files for login and non-login shells, put your common settings in ~/.bashrc
and make sure you source it from your ~/.bash_profile
):
export ANSIBLE_HOSTS=~/ansible/hosts
Load the changes into your current shell:
source ~/.bash_profile
Now, we can use the ping module to test Ansible:
ansible robferguson.org -m ping
You should then see output like:
robferguson.org | success >> {
"changed": false,
"ping": "pong"
}
To run Ansible from the command line, you need to provide a host pattern (e.g., a server name: robferguson.org
; or a group name: production
) and the name of the module (-m MODULE_NAME) you want to invoke.
Now, try the setup module which gathers data about remote systems, and then returns those values:
ansible robferguson.org -m setup
You can use ansible-doc
to obtain a list of Ansible modules:
ansible-doc -l
And, to learn more about a particular module:
ansible-doc setup
What's Next
In the next post, we'll take a look at Ansible commands and playbooks.