Basic Ansible tutorial (Installation and setup)
Published: 2023-07-31 20:47:59

## Introduction
In the last article we talked about the power of ansible, it's importance and why you should consider using it in your company or on your next big project if you haven't been using it. Ansible is a configuration management tool that streamlines the process of controlling large number of servers. Ansible is just one of the other configuration tool out there, some of which includes [puppet](https://puppet.com/), [chef](https://www.chef.io/).
In this tutorial we’ll discuss how to install Ansible on your machine (for this tutorial we'll be using a linux environment, ubuntu) and go over some basics of how to use this software.

## Prerequisites

Before installing ansible you must have **An Ansible Control Node** which is the machine we'll install ansible on to configure other servers. The machine should have a non-root user with sudo privileges.

### Installation

To install on ubuntu machine add the project official's PPA

```
sudo apt-add-repository ppa:ansible/ansible
```
Then update
```
sudo apt update
```
Install ansible
```
sudo apt install ansible
```

You can also install ansible via python (This works for any OS).
 
Make sure you have python installed on your machine then run the following to install ansible

```
python3 -m pip install --user ansible
```
Use `python` for windows.

We've successfully installed ansible on our machine

## Using ansible

Now let's use ansible!, one of the simplest way is first by creating an `inventory` file in your working directory.

```
touch inventory
```
in the `inventory` file, write the ip address or the domain name of the ansible hosts (machines you want to remotely access). For testing purposes you can input the ip address of your current machine with no space or just `localhost`.
**NOTE**: The ansible hosts(machines ansible want to run commands remotely) must accept ssh connection and also must have set up the required ssh key, if you are using your local machine as the ansible host for testing purposes, you might need to add the public key of your machine to `authorized_keys` so ssh via identity-file can work

Then Run
```
ceejay@ceejay:~/ceejay/ansible_practice$ ansible all --key-file ~/.ssh/id_rsa -i inventory -m ping

localhost | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python3"

    },

    "changed": false,

    "ping": "pong"

}

```

`-i` - accepts the inventory file.
`-m` - The ansible module to use. There a lot of ansible modules, you can check them [here](https://docs.ansible.com/ansible/2.9/modules/list_of_all_modules.html). The ping module is basically just to test if ansible is able to ssh into the server.

You can also create an ansible config file `ansible.cfg` to define the basic configurations. Create this file in your working directory, this would override the default config file in `/etc/ansible`. 
in the `ansible.cfg` file copy paste the following

```
[defaults]

inventory = inventory

private_key_file = ~/.ssh/id_rsa

```
Save this file and run 
```
ceejay@ceejay:~/ceejay/ansible_practice$ ansible all -m ping

localhost | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python3"

    },

    "changed": false,

    "ping": "pong"

}

```

This method makes it cleaner and easier to run.

We've just seen how to use ansible, in the coming article we'll explore more possibilities with ansible, there's so much more powerful stuffs you can do with ansible.