Ansible és una eina d’automatització de codi obert, desenvolupada originalment per Michael DeHaan el 2012 i actualment mantinguda per Red Hat (IBM). Permet gestionar servidors, desplegar aplicacions i orquestrar tasques d’infraestructura de manera declarativa: en comptes d’escriure scripts que indiquin com fer les coses pas a pas, es descriu quin estat final es vol per al sistema, i Ansible s’encarrega d’aconseguir-lo.
Es fa servir molt en entorns d’administració de sistemes i xarxes per:
A diferència de Puppet, Chef o SaltStack, Ansible és agentless: no cal instal·lar cap programari al node gestionat, només necessita accés SSH i Python.
| Característica | Descripció |
|---|---|
| Agentless | No requereix cap dimoni ni agent al node remot; funciona sobre SSH (Linux/Unix) o WinRM (Windows). |
| Declaratiu | Els playbooks descriuen l’estat desitjat, no els passos exactes. |
| Idempotent | Executar el mateix playbook diverses vegades no produeix canvis addicionals si el sistema ja és a l’estat desitjat. |
| YAML | Els playbooks es defineixen en fitxers YAML, llegibles i fàcils d’escriure. |
| Inventaris | Llistes de servidors organitzats en grups (web, bd, dns…) que es poden gestionar de forma selectiva. |
| Mòduls | Centenars de mòduls natius (apt, copy, service, user, template, cron…) i mòduls per a núvol (AWS, Azure, Proxmox…). |
| Rols | Forma d’organitzar playbooks reutilitzables i compartibles. |
| Ansible Galaxy | Dipòsit públic de rols i col·leccions creats per la comunitat. |
| Vault | Sistema d’encriptació integrat per protegir dades confidencials (contrasenyes, claus) dins dels playbooks. |
Ubuntu 26.04 LTS ja inclou Ansible als seus dipòsits oficials
(paquets ansible i ansible-core), de manera
que en la majoria de casos n’hi ha prou amb:
Actualitza la llista de paquets:
sudo apt updateInstal·la Ansible:
sudo apt install ansibleComprova la instal·lació:
ansible --versionEls repositoris oficials d’Ubuntu ofereixen la versió que hi havia disponible en el moment d’empaquetar la distribució, i només rep pedaços de seguretat. Si necessites la darrera versió estable amb mòduls i correccions més recents, pots afegir el PPA oficial del projecte, que ja publica paquets per a “Resolute Raccoon” (26.04):
sudo apt install software-properties-common -y
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install ansible -yansible-core (instal·lació mínima)Si només necessites el motor sense la col·lecció completa de mòduls
de la comunitat (paquet ansible, molt més pesat):
sudo apt install ansible-coreAnsible funciona millor amb autenticació per clau pública. Des del node de control:
Genera la clau:
ssh-keygen -t ed25519 -C "ansible@control"Copia la clau:
ssh-copy-id <usuari>@<node-remot>Per defecte, Ansible llegeix /etc/ansible/hosts, però és
bona pràctica crear un inventari propi per cada projecte. Exemple
(inventory.ini):
[servidors_web]
www1.thos.local
www2.thos.local
[servidors_bd]
bd1.thos.local
[laboratori:children]
servidors_web
servidors_bd
[laboratori:vars]
ansible_user=admin
ansible_python_interpreter=/usr/bin/python3ansible.cfgCrea un ansible.cfg al directori del projecte per
personalitzar el comportament (evita haver de passar paràmetres cada
cop):
[defaults]
inventory = ./inventory.ini
remote_user = admin
host_key_checking = False
retry_files_enabled = Falseansible laboratori -i inventory.ini -m pingSi tot és correcte, cada host respondrà amb "ping": "pong".
Un playbook és un fitxer YAML amb una llista d’una o més “plays”. Cada play s’aplica a un grup de l’inventari i conté una llista de tasques.
Exemple: instal·lar i activar Apache als servidors web del laboratori.
---
- name: Configurar servidors web
hosts: servidors_web
become: true
tasks:
- name: Actualitzar la memòria cau d'apt
apt:
update_cache: true
cache_valid_time: 3600
- name: Instal·lar apache2
apt:
name: apache2
state: present
- name: Copiar la pàgina d'inici personalitzada
copy:
src: files/index.html
dest: /var/www/html/index.html
- name: Assegurar que apache2 estigui actiu i habilitat
service:
name: apache2
state: started
enabled: true
- name: Obrir el port 80 al tallafoc (UFW)
ufw:
rule: allow
port: "80"
proto: tcpExecutar el playbook:
ansible-playbook -i inventory.ini playbook.ymlOpcions útils:
ansible-playbook -i inventory.ini playbook.yml --check # simulació (dry-run)
ansible-playbook -i inventory.ini playbook.yml --diff # mostra els canvis
ansible-playbook -i inventory.ini playbook.yml --limit www1.thos.localAnsible permet fer servir variables i plantilles Jinja2 per generar fitxers de configuració dinàmicament, molt útil per exemple per generar fitxers de zona BIND9 o configuracions de Kea DHCP diferents segons el host.
- name: Generar fitxer de configuració
template:
src: templates/dhcpd.conf.j2
dest: /etc/kea/kea-dhcp4.conf
notify: Reiniciar kea-dhcp4handlers:
- name: Reiniciar kea-dhcp4
service:
name: kea-dhcp4-server
state: restartedEls rols permeten organitzar playbooks grans en components reutilitzables, amb una estructura de directoris estàndard:
ansible-galaxy init rols/apacheGenera:
rols/apache/
├── tasks/
│ └── main.yml
├── handlers/
│ └── main.yml
├── templates/
├── files/
├── vars/
├── defaults/
└── meta/I s’invoquen des d’un playbook així:
- hosts: servidors_web
roles:
- apache
- firewallPer xifrar contrasenyes o claus dins dels playbooks:
ansible-vault create secrets.yml
ansible-vault edit secrets.yml
ansible-playbook playbook.yml --ask-vault-pass