Command Rundown
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!
0 comments:
Post a Comment
Note: only a member of this blog may post a comment.