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

  1. name: Descripció de la tasca.
  2. apt: Mòdul d'Ansible per gestionar paquets en sistemes basats en Debian.
  3. 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

- name: Crear usuaris
  user:
    name: "{{ item }}"
    state: present
  loop:
    - alice
    - bob
    - charlie

Explicació del Codi

  1. name: Descripció de la tasca.
  2. user: Mòdul d'Ansible per gestionar usuaris.
  3. name: Nom de l'usuari a crear, utilitzant la variable item.
  4. 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.

© Copyright 2024. Tots els drets reservats