This tutorial is adapted from the Web Age course Ansible Configuration and Administration.
1.1 Control and Managed Nodes
Control Node – It is a system where Ansible is installed. It is used to execute ansible commands. One control node can configure many managed nodes.
Managed Node- It is one of the systems being configured by Ansible. It must be accessible via SSH (secure shell).
1.2 Preparing the Control Node
- Install Ansible
- Create an Ansible project directory:
- Create setup files in directory:
cfg – Ansible Configuration
ini – Holds inventory (list of managed nodes)
- Ansible commands can now be run from the project directory
1.3 Installing Ansible
- Ansible runs under Linux/Mac OS
- Typical installation Instructions (for Ubuntu):
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install ansible
- Ansible can also be installed with Python’s “pip” utility:
pip3 install ansible
- Verifying installation:
For more installation information/options see the official documenation here: https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html
1.4 Ansible on Windows
On Windows Ansible can be installed:
- Under CygWin
- Under the Windows Subsystem for Linux (WSSL)
- Ansible is configured in the following file which contains many commented out example settings with descriptions of their use:
- Placing an ansible.cfg file in the root of your Ansible project allows you to override existing configuration settings
- This common setting allows Ansible to get its inventory list from the named file:
inventory = hosts.ini
- Hosts.ini (or just hosts) is a file that Ansible looks at to get a list of the hosts you are planning to manage.
- A global version of the hosts file exists at the following location:
- A project-local version of the file, that lists just the hows being managed by the project, is often created in the project root directory.
- The ansible.cfg is then configured to point Ansible at the local version:
inventory = hosts.ini
1.7 Preparing Managed Nodes
- The purpose behind Ansible is to connect to and configure servers(hosts) remotely. To do this it needs to be able to connect to the remote server via ssh (secure shell).
- For each managed node:
- Test for SSH access to the Managed Node from the Control Node
(verifies user/password access)
(verifies public/private key access)
- If needed – copy the control node’s public key to the managed node
1.8 Creating Control Node Public/Private Key
- Ansible uses SSH (secure shell) to access and manage hosts.
- SSH requires the Ansible control node (the machine where ansible commands will be run) to have a key-pair. The public key of the pair will need to be copied to the host you need to ssh into.
- The following command is executed to create the key-pair:
ssh-keygen -t rsa
- The command saves key files into the ~/.ssh directory:
is_rsa - the private key
Id_rsa.pub - the public key
1.9 Copying Control Node Public Key to Managed Node
- The public key is copied into the remote host (the one you want to ssh into) using a command like this:
- During the copy, you will be prompted to provide the password for the user on the remote machine.
- Once this is done you will be able to:
- SSH into the remote machine (i.e. ssh firstname.lastname@example.org )
- Use Ansible to connect to and configure the remote machine
1.10 The “ansible” Command
- The ansible command is used to execute ad-hoc commands
ansible -m -a ""
- Given this as the hosts.ini file:
- could be
192.168.60.4 – individual host
all – all hosts in the file
app – just the hosts under the ‘app’ group
1.11 Other Ad-Hoc Commands
- Ping the Managed Nodes:
ansible app -m ping -u vagrant
- Check Memory:
ansible multi -a "free -m"
- Get Server Details
ansible db -m setup
1.12 Modules and Options
- The ‘ansible’ command takes as parameters a module and options related to that module
- When no module is specified it defaults to the ‘command’ module, so the following are equivalent:
ansible all -a "hostname"
ansible all -m command -a "hostname"
- The -a options for the command module specify the command you wish to execute.
ansible all -a "date" - Executes the 'date' cmd
ansible all -a "pwd" - Executes the 'pwd' cmd
- A list of Ansible modules can be found here:
- Ansible modules are used in playbooks and ad-hoc commands.
- Some module examples include:
- ping – pings the host
- yum, apt – install packages via yum or apt
- user – create and manage users
- service – start/stop services on a managed node(s)
- copy – copy files to/from host
- setup – get host variables/settings
- For more on how modules work see:
Playbooks group the tasks required to install and configure applications into a single executable script.
- hosts: web
- name: Update the package cache
- name: Install the nginx package
- The playbook is executed with the ansible-playbook command:
In this tutorial, we covered:
- Control and Managed Nodes
- Preparing the Control Node
- Installing Ansible
- Preparing Managed Nodes
- Public/Private Key Access
- Ad-Hoc commands