En aquest tema, aprendrem com utilitzar condicionals i bucles en els Playbooks d'Ansible per fer-los més dinàmics i flexibles. Els condicionals ens permeten executar tasques basades en certes condicions, mentre que els bucles ens permeten repetir tasques múltiples vegades amb diferents dades.
Condicionals
Els condicionals en Ansible es defineixen utilitzant l'atribut when
. Aquest atribut permet especificar una condició que ha de complir-se perquè una tasca s'executi.
Sintaxi Bàsica
- name: Instal·lar Apache en sistemes Debian apt: name: apache2 state: present when: ansible_os_family == "Debian"
Explicació del Codi
- name: Descripció de la tasca.
- apt: Mòdul d'Ansible per gestionar paquets en sistemes basats en Debian.
- when: Condició que ha de complir-se perquè la tasca s'executi. En aquest cas, la tasca només s'executarà si la família del sistema operatiu és "Debian".
Condicionals Complexos
Pots utilitzar operadors lògics per crear condicionals més complexos.
- name: Instal·lar Apache en sistemes Debian o RedHat yum: name: httpd state: present when: ansible_os_family == "RedHat" or ansible_os_family == "Debian"
Exercici Pràctic
Objectiu: Escriu un Playbook que instal·li nginx
només si el sistema operatiu és Ubuntu.
--- - name: Instal·lar nginx en Ubuntu hosts: all tasks: - name: Instal·lar nginx apt: name: nginx state: present when: ansible_distribution == "Ubuntu"
Solució:
--- - name: Instal·lar nginx en Ubuntu hosts: all tasks: - name: Instal·lar nginx apt: name: nginx state: present when: ansible_distribution == "Ubuntu"
Bucles
Els bucles en Ansible es defineixen utilitzant l'atribut loop
. Aquest atribut permet repetir una tasca per a cada element d'una llista.
Sintaxi Bàsica
Explicació del Codi
- name: Descripció de la tasca.
- user: Mòdul d'Ansible per gestionar usuaris.
- name: Nom de l'usuari a crear, utilitzant la variable
item
. - loop: Llista d'usuaris a crear.
Bucles amb Diccionaris
Pots utilitzar diccionaris per passar múltiples valors a cada iteració del bucle.
- name: Crear usuaris amb propietats user: name: "{{ item.name }}" state: present shell: "{{ item.shell }}" loop: - { name: 'alice', shell: '/bin/bash' } - { name: 'bob', shell: '/bin/zsh' } - { name: 'charlie', shell: '/bin/sh' }
Exercici Pràctic
Objectiu: Escriu un Playbook que instal·li una llista de paquets en un sistema Ubuntu.
--- - name: Instal·lar paquets en Ubuntu hosts: all tasks: - name: Instal·lar paquets apt: name: "{{ item }}" state: present loop: - git - curl - vim
Solució:
--- - name: Instal·lar paquets en Ubuntu hosts: all tasks: - name: Instal·lar paquets apt: name: "{{ item }}" state: present loop: - git - curl - vim
Resum
En aquesta secció, hem après com utilitzar condicionals i bucles en els Playbooks d'Ansible per fer-los més dinàmics i flexibles. Els condicionals ens permeten executar tasques basades en certes condicions, mentre que els bucles ens permeten repetir tasques múltiples vegades amb diferents dades. Aquests conceptes són fonamentals per escriure Playbooks eficients i reutilitzables.
En el següent mòdul, explorarem els rols en Ansible, que ens permetran organitzar i reutilitzar el nostre codi de manera més eficient.
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