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.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
- 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
,playbooks
itemplates
. - Crea un fitxer
ansible.cfg
a 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
webserver
amb 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 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.
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