# Capitolo 6 – Primo Playbook Reale: Setup Base Server

Dopo aver visto i comandi ad-hoc, è il momento di passare ai **playbook**, il cuore dell’automazione con Ansible.

Un playbook permette di definire lo **stato desiderato** dei server in modo dichiarativo e ripetibile.

---

## 6.1 Struttura di un Playbook

Un playbook è un file YAML composto da:

- `hosts` → gruppo di host target
- `become` → se abilitare l’escalation privilegi
- `tasks` → elenco di attività da eseguire

Esempio concettuale:

```yaml
- name: Configurazione base server
  hosts: all
  become: true
  tasks:
    - name: Aggiornare cache pacchetti
      apt:
        update_cache: yes
```

---

## 6.2 Playbook Base

File: `playbooks/base.yml`

```yaml
- name: Configurazione base server
  hosts: all
  become: true

  tasks:
    - name: Aggiornamento cache apt
      apt:
        update_cache: yes
      when: ansible_os_family == "Debian"

    - name: Installazione pacchetti base
      package:
        name:
          - vim
          - curl
          - htop
          - git
        state: present

    - name: Creazione utente deploy
      user:
        name: deploy
        groups: sudo
        append: yes
        shell: /bin/bash
```

### Spiegazione

- `when` → condizione per eseguire il task
- `package` → modulo cross-distribution per installare pacchetti
- `user` → modulo per creare utenti con gruppo e shell

---

## 6.3 Esecuzione del Playbook

Esecuzione base:

```bash
ansible-playbook playbooks/base.yml
```

Modalità di **check** (simulazione senza modifiche):

```bash
ansible-playbook playbooks/base.yml --check
```

Modalità **verbose**:

```bash
ansible-playbook playbooks/base.yml -vvv
```

---

## 6.4 Best Practice per Playbook

- Non usare shell se esiste modulo nativo
- Testare con `--check` prima di eseguire in produzione
- Versionare i playbook con Git
- Separare ambienti (production, staging, dev)
- Usare variabili per parametri ripetuti
- Creare ruoli per componenti specifici (nginx, mysql, common)

---

## 6.5 Prossimi Passi

Dopo aver creato e testato il primo playbook:

- Strutturare progetti con ruoli
- Gestire variabili e segreti con `group_vars`, `host_vars` e `ansible-vault`
- Configurare playbook per deploy applicativi reali
- Implementare hardening base dei server
- Creare playbook modulari e riutilizzabili

---

## Conclusione

Il primo playbook rappresenta il primo passo concreto verso l’automazione.

Da questo momento è possibile standardizzare setup, gestire pacchetti, utenti e configurazioni in modo ripetibile e sicuro.

Nei capitoli successivi approfondiremo la **gestione di ruoli, variabili avanzate e segreti**, e la **strutturazione professionale di progetti Ansible**.