Day 2: Connecting to the server with Ansible¶
You installed Ansible on your local machine
You created a Ubuntu 22.04 server that you will control with Ansible, and to which you can logon with your ssh keys
You created a quicksearch to the Ansible library reference in your browser
You got a quick idea of greeter, a silly Django application that we will be deploying as an example
Create a repository¶
First, create a repository for your Ansible code:
mkdir greeter-ansible cd greeter-ansible git init echo '*.retry' >.gitignore
We will create the three files that I’m showing in the image below. Please go ahead and create them inside your working directory.
When we execute Ansible, first it’s going to read
the current directory. In there, it finds the information that the list
of hosts, the inventory file as it’s called, is in file
The name of the file that defines the variables,
is hardwired in Ansible, it’s going to read that one anyway. From there
it’s going to get the information that it should be logging in as root
on all remote servers. Here we have only one remote server.
Check the connection and debug it¶
Let’s check the connection. Please execute this command:
Here are possible errors you may encounter:
ERROR! Unexpected Exception: dictionary update sequence element #0 has length 1; 2 is required
ERROR! Problem parsing file ‘…/greeter-ansible/group_vars/all.yml’: line 2, column 1
ERROR! failed to combine variables, expected dicts but got a ‘dict’ and a ‘AnsibleUnicode’:
SSH Error: data could not be sent to remote host “example.com”. Make sure this host can be reached over ssh
/usr/bin/python: not found (message slightly buried in details of Ansible output)
The first three error messages are caused by a common error beginners
do: in file
group_vars/all.yml, you may have forgotten a space after
the colon. In this case, which error message will appear depends on the
version of Ansible.
If you get the fourth message, make sure you can SSH into the server.
Remember that in
group_vars/all.yml we have specified that the
ansible will be logging into the server as root; so you should make
ssh firstname.lastname@example.org works without asking for a
If you get the fifth message, it means that Python isn’t installed on
the server. Ansible logs on to the remote server and it executes Python
on the remote server. To fix this problem, you need to ssh into the
remote server and execute
apt install python3.
So before running Ansible we must first bring the servers to a state where running Ansible is possible, which means they must be running Python and an ssh server. If you try the ping command again this time it should succeed. Essentially all this does is verify that Ansible can ssh and execute Python remotely, which means Ansible is ready to do more stuff.
Tomorrow we will create our first playbook.