En aquest tema, aprendrem com organitzar el codi d'Ansible de manera eficient i mantenible. Una bona organització del codi és essencial per a projectes grans i complexos, ja que facilita la col·laboració, la reutilització de codi i el manteniment a llarg termini.

Objectius

  • Entendre la importància de l'organització del codi.
  • Aprendre les millors pràctiques per estructurar projectes d'Ansible.
  • Implementar una estructura de directori clara i lògica.
  • Utilitzar rols per modularitzar el codi.

Importància de l'Organització del Codi

Una bona organització del codi:

  • Facilita la comprensió i la navegació pel projecte.
  • Millora la col·laboració entre equips.
  • Permet la reutilització de components.
  • Redueix el risc d'errors i duplicitats.
  • Facilita el manteniment i l'escalabilitat del projecte.

Millors Pràctiques per Estructurar Projectes d'Ansible

  1. Estructura de Directori Recomanada

Una estructura de directori ben definida ajuda a mantenir el codi organitzat i fàcil de trobar. A continuació es mostra una estructura de directori recomanada per a projectes d'Ansible:

project/
├── ansible.cfg
├── inventory/
│   ├── development
│   ├── staging
│   └── production
├── group_vars/
│   ├── all.yml
│   ├── webservers.yml
│   └── dbservers.yml
├── host_vars/
│   ├── host1.yml
│   └── host2.yml
├── roles/
│   ├── common/
│   ├── webserver/
│   └── database/
├── playbooks/
│   ├── site.yml
│   ├── webservers.yml
│   └── dbservers.yml
└── templates/
    ├── nginx.conf.j2
    └── my.cnf.j2

  1. Fitxer de Configuració ansible.cfg

El fitxer ansible.cfg conté la configuració global per a Ansible. És recomanable tenir aquest fitxer a l'arrel del projecte per definir paràmetres com el directori d'inventari, la ubicació dels rols, etc.

Exemple de ansible.cfg:

[defaults]
inventory = ./inventory
roles_path = ./roles
host_key_checking = False
retry_files_enabled = False

  1. Inventaris

Els fitxers d'inventari defineixen els hosts i grups de hosts sobre els quals s'executaran les tasques d'Ansible. És una bona pràctica tenir diferents fitxers d'inventari per a diferents entorns (development, staging, production).

Exemple de fitxer d'inventari (inventory/development):

[webservers]
web1 ansible_host=192.168.1.10
web2 ansible_host=192.168.1.11

[dbservers]
db1 ansible_host=192.168.1.20

  1. Variables de Grup i Host

Les variables de grup (group_vars) i de host (host_vars) permeten definir configuracions específiques per a grups de hosts o hosts individuals.

Exemple de group_vars/webservers.yml:

nginx_port: 80

Exemple de host_vars/web1.yml:

nginx_port: 8080

  1. Rols

Els rols són una manera de modularitzar el codi d'Ansible. Cada rol conté tasques, fitxers, plantilles, variables i handlers necessaris per a una funcionalitat específica.

Exemple d'estructura de directori d'un rol (roles/webserver):

webserver/
├── tasks/
│   └── main.yml
├── templates/
│   └── nginx.conf.j2
├── files/
├── vars/
│   └── main.yml
├── defaults/
│   └── main.yml
├── handlers/
│   └── main.yml
└── meta/
    └── main.yml

  1. Playbooks

Els playbooks són el cor d'Ansible, on es defineixen les tasques a executar. És recomanable tenir un playbook principal (site.yml) que inclogui altres playbooks més específics.

Exemple de site.yml:

- import_playbook: webservers.yml
- import_playbook: dbservers.yml

Exercici Pràctic

Exercici 1: Crear una Estructura de Projecte

  1. Crea un directori anomenat my_ansible_project.
  2. Dins d'aquest directori, crea els subdirectoris inventory, group_vars, host_vars, roles, playbooks i templates.
  3. Crea un fitxer ansible.cfg a l'arrel del projecte amb la configuració bàsica.
  4. Crea un fitxer d'inventari per a l'entorn de desenvolupament (inventory/development).
  5. Defineix variables de grup per als webservers (group_vars/webservers.yml).
  6. Crea un rol anomenat webserver amb l'estructura de directori adequada.
  7. Escriu un playbook principal (playbooks/site.yml) que importi altres playbooks.

Solució de l'Exercici 1

mkdir -p my_ansible_project/{inventory,group_vars,host_vars,roles,playbooks,templates}
cd my_ansible_project

# Crear ansible.cfg
cat <<EOL > ansible.cfg
[defaults]
inventory = ./inventory
roles_path = ./roles
host_key_checking = False
retry_files_enabled = False
EOL

# Crear inventari de desenvolupament
cat <<EOL > inventory/development
[webservers]
web1 ansible_host=192.168.1.10
web2 ansible_host=192.168.1.11

[dbservers]
db1 ansible_host=192.168.1.20
EOL

# Crear variables de grup per als webservers
cat <<EOL > group_vars/webservers.yml
nginx_port: 80
EOL

# Crear estructura de directori per al rol webserver
mkdir -p roles/webserver/{tasks,templates,files,vars,defaults,handlers,meta}

# Crear playbook principal
cat <<EOL > playbooks/site.yml
- import_playbook: webservers.yml
- import_playbook: dbservers.yml
EOL

Resum

En aquest tema, hem après la importància de l'organització del codi en projectes d'Ansible i hem vist les millors pràctiques per estructurar un projecte. Hem creat una estructura de directori recomanada, hem configurat fitxers d'inventari, variables de grup i host, i hem modularitzat el codi utilitzant rols. Finalment, hem practicat aquests conceptes amb un exercici pràctic.

En el següent tema, explorarem les millors pràctiques de seguretat per a Ansible.

© Copyright 2024. Tots els drets reservats