Step 1: Creating a Test Playbook
To try out the examples described in this guide, you’ll need an Ansible playbook. We’ll set up a testing playbook that installs Nginx and sets up an index.html
page on the remote server. This file will be copied from the Ansible control node to the remote nodes in your inventory file.
Create a new file called playbook.yml
in the same directory as your inventory file. If you followed our guide on how to create inventory files, this should be a folder called ansible
inside your home directory:
cd ~/ansible
nano playbook.yml
The following playbook has a single play and runs on all hosts from your inventory file, by default. This is defined by the hosts: all
directive at the beginning of the file. The become
directive is then used to indicate that the following tasks must be executed by a super user (root
by default).
It defines two tasks: one to install required system packages, and the other one to copy an index.html
file to the remote host, and save it in Nginx’s default document root location, /var/www/html
. Each task has tags, which can be used to control the playbook’s execution.
Copy the following content to your playbook.yml
file:
~/ansible/playbook.yml
---
- hosts: all
become: true
tasks:
- name: Install Packages
apt: name={{ item }} update_cache=yes state=latest
loop: [ 'nginx', 'vim' ]
tags: [ 'setup' ]
- name: Copy index page
copy:
src: index.html
dest: /var/www/html/index.html
owner: www-data
group: www-data
mode: '0644'
tags: [ 'update', 'sync' ]
Save and close the file when you’re done. Then, create a new index.html
file in the same directory, and place the following content in it:
~/ansible/index.html
<html>
<head>
<title>Testing Ansible Playbooks</title>
</head>
<body>
<h1>Testing Ansible Playbooks</h1>
<p>This server was set up using an Nginx playbook.</p>
</body>
</html>
Don’t forget to save and close the file.
Executing a Playbook
To execute the testing playbook on all servers listed within your inventory file, which we’ll refer to as inventory
throughout this guide, you may use the following command:
ansible-playbook -i inventory playbook.yml
This will use the current system user as remote SSH user, and the current system user’s SSH key to authenticate to the nodes. In case those aren’t the correct credentials to access the server, you’ll need to include a few other parameters in the command, such as -u
to define the remote user or --private-key
to define the correct SSH keypair you want to use to connect. If your remote user requires a password for running commands with sudo
, you’ll need to provide the -K
option so that Ansible prompts you for the sudo
password.