Roles et organisation 18 min de lecture

Utiliser et organiser les roles

Appeler des roles dans un playbook

# site.yml - Playbook principal
---
- name: Configurer les serveurs web
  hosts: webservers
  become: yes
  roles:
    - nginx
    - php
    - app

# Avec des variables specifiques
- name: Configurer avec variables
  hosts: webservers
  become: yes
  roles:
    - role: nginx
      vars:
        nginx_port: 8080
        nginx_server_name: app.example.com
    - role: app
      vars:
        app_env: production

Dependances entre roles

# roles/app/meta/main.yml
---
dependencies:
  - role: nginx
    vars:
      nginx_port: 80
  - role: php
    vars:
      php_version: "8.1"

Ansible Galaxy : roles communautaires

# Chercher un role sur Galaxy
ansible-galaxy search nginx

# Installer un role depuis Galaxy
ansible-galaxy install geerlingguy.nginx

# Installer depuis un fichier requirements
# requirements.yml
---
roles:
  - name: geerlingguy.nginx
    version: "3.1.0"
  - name: geerlingguy.mysql
    version: "4.0.0"

# Installer toutes les dependances
ansible-galaxy install -r requirements.yml

Structure de projet recommandee

# Organisation d'un projet Ansible complet
project/
  ansible.cfg
  inventory/
    production/
      hosts
      group_vars/
      host_vars/
    staging/
      hosts
      group_vars/
      host_vars/
  playbooks/
    site.yml
    webservers.yml
    dbservers.yml
  roles/
    nginx/
    php/
    app/
    mysql/
  files/
  templates/
  vars/
    common.yml
  requirements.yml
Bonne pratique : Un role = une responsabilite unique. Ne melangez pas l'installation de Nginx et de votre application dans le meme role.