Thursday, 8 February 2018

Ansible

WHAT IS ANSIBLE????

Ansible is the simplest and best tool to get started with configuration management. See how to start using now


Ansible: Installation and Basics


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


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!

No comments:

Post a Comment

Ansible: Roles

Use Ansible roles to orchestrate more complex configurations.Let's create a new directory named  nginx , which will be a Role. Then we&...