### What is an Ansible role?
:::info
Roles let you automatically load related vars, files, tasks, handlers, and other Ansible artifacts based on a known file structure. After you group your content in roles, you can easily reuse them and share them with other users.
:::
:arrow_right: *https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_reuse_roles.html*
### Working with Ansible Roles
### Ansible Galaxy Commands
````yaml=
Check local roles:
ansible-galaxy role list
Create a local role:
ansible-galaxy init <role-name>
Explore Ansible Galaxy:
galaxy.ansible.com
Go to (one of) default location for ansible roles:
cd ~/.ansible
mkdir roles && cd roles
Install a role from Ansible Galaxy:
ansible-galaxy install <authorname.rolename>
Validate the role installation:
ansible-galaxy role list
````
### Use a role to work with Nginx
#### Install the role
```yaml=
ansible-galaxy install geerlingguy.nginx
```
#### Write a playbook to call the role
````yaml=
## vi role-play.yaml
--- ## Playbook to call nginx role
- hosts: nodes
become: yes
tasks:
- name: install and manage nginx
include_role:
name: geerlingguy.nginx
````
:arrow_right: *Please note that you need to have the role installed on the controller already before you can use it in a playbook*
#### Run the Playbook
````yaml=
ansible-playbook role-play.yaml
````
#### Validate the changes
````yaml=
curl localhost
or
elinks http://localhost
or
which nginx
or
sudo systemctl status nginx
````
### Configure a LAMP server using Ansible roles
```yaml=
L -> Linux
A -> Apache
M -> MySQL
P -> PHP
Step1: Install relevant roles:
ansible-galaxy install geerlingguy.php
ansible-galaxy install geerlingguy.mysql
ansible-galaxy install geerlingguy.apache
Step 2: Write a playbook to call the roles:
--- ## Playbook to call nginx role
- hosts: webservers
become: yes
tasks:
- name: install LAMP
include_role:
- geerlingguy.php
- geerlingguy.mysql
- geerlingguy.apache
Step 3: Run the Playbook:
ansible-playbook lamp.yaml
Step 4: Validate:
which php / apache2 / mysql
or
systemctl status apache2
or
curl localhost
```
### References:
:::info
- https://docs.ansible.com/ansible/latest/reference_appendices/general_precedence.html
- https://galaxy.ansible.com/home
- https://galaxy.ansible.com/geerlingguy/nginx
-
:::