Get started with Ansible - installation and basics.We start by creating an SSH key into my Digital Ocean account. To create this SSH key, we'd locally run:
cd ~/.ssh
ssh-keygen -t rsa -b 4096 -C "chris@serversforhackers.com" -f id_ansible
# Get key into Mac's clipboard
cat id_ansible.pub | pbcopy
That SSH key will be added to any server I create on Digital Ocean. This will ensure Ansible can log into any server we want to provision.
For this example, I create 3 servers on Digital Ocean.
In my local server I connect to the servers like so:
ssh -o "IdentitiesOnly yes" -i ~/.ssh/id_ansible root@[server-ip-here]
I can see I can connect, so I know the key-pair authentication is working over SSH.
Install Ansible
We're using an Ubuntu server (locally, via Vagrant). To install Ansible, run:
# Run this if we don't have the "add-apt-repository" command
sudo apt-get install -y software-properties-common
# Add Ansible's official repository
sudo add-apt-repository -y ppa:ansible/ansible
# Update repositories
# Install Ansible
sudo apt-get install -y ansible
# Ensure installed
which ansible
You can see how to install Ansible on other distributions here.
Ansible is agentless - we don't need to install an agent on the servers we provision. The servers just need Python and the ability to connect over SSH.
Configure Ansible
Ansible is inside of /etc/ansible
. Lets move the original out of the way and edit create a new one.
sudo mv /etc/ansible/hosts /etc/ansible/hosts.bak
sudo vim /etc/ansible/hosts
Edit /etc/ansible/hosts
and make it look like this:
[web]
104.131.7.243
104.131.28.172
104.131.43.90
Now we have our three servers defined as hosts for Ansible to use.
Run Some Commands on Each Host
We'll run some arbitrary commands.
# Run ping as user root on each server
ansible all -m ping -u root
We run into an SSH error, it doesn't find the correct key, falling back to password.
Instead, we try the following, which works:
ansible all -m ping -u root --private-key=~/.ssh/id_ansible
Another way we can do this is as follows, which uses the "shell" command. This let's us run any shell command on the servers.
ansible all -m shell -a "ping -c 3 localhost" \
-u root --private-key=~/.ssh/id_ansible
Install Nginx
We'll use the "apt" module to install Nginx across each server. This let's us declaratively tell Ansible what we want the desired state to be.
ansible all -m apt -a "pkg=nginx state=latest update_cache=true" \
-u root --private-key=~/.ssh/id_ansible
This will install Nginx on each server!