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
- 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
- Fitxer de Configuració
ansible.cfg
ansible.cfgEl 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
- 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
- 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:
Exemple de host_vars/web1.yml:
- 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
- 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:
Exercici Pràctic
Exercici 1: Crear una Estructura de Projecte
- Crea un directori anomenat
my_ansible_project. - Dins d'aquest directori, crea els subdirectoris
inventory,group_vars,host_vars,roles,playbooksitemplates. - Crea un fitxer
ansible.cfga l'arrel del projecte amb la configuració bàsica. - Crea un fitxer d'inventari per a l'entorn de desenvolupament (
inventory/development). - Defineix variables de grup per als
webservers(group_vars/webservers.yml). - Crea un rol anomenat
webserveramb l'estructura de directori adequada. - 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
EOLResum
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.
Ansible: De Principiant a Avançat
Mòdul 1: Introducció a Ansible
Mòdul 2: Conceptes bàsics d'Ansible
Mòdul 3: Playbooks
- Introducció als Playbooks
- Escrivint el teu primer Playbook
- Estructura del Playbook
- Variables i Fets
- Condicionals i Bucles
Mòdul 4: Rols
Mòdul 5: Tècniques Avançades de Playbook
Mòdul 6: Ansible Galaxy
Mòdul 7: Ansible Tower
- Introducció a Ansible Tower
- Instal·lant Ansible Tower
- Utilitzant Ansible Tower
- Gestionant Projectes i Inventaris
