# Ricette: script bash salvati su più server

> Salva script bash come ricette ed eseguili su uno o più server alla volta, come root o come utente del server, con variabili per server e un report via email.

Una ricetta è uno script bash salvato che esegui su uno o più dei tuoi server. Usa le ricette per il lavoro che ripeti, come installare uno strumento, liberare spazio su disco, ruotare i log o controllare un'impostazione su ogni server. Scrivi lo script una volta e l'organizzazione può eseguirlo su qualsiasi server attivo ogni volta che serve.

Ogni esecuzione avvia un [task in background](https://ops.vimonto.com/docs/it/organization/activity) per server, così puoi seguire l'output di ogni server separatamente. Le ricette appartengono all'organizzazione: ogni membro le vede e i membri con il ruolo sviluppatore o superiore possono crearle, modificarle ed eseguirle.

![La pagina delle ricette con le ricette salvate e le esecuzioni recenti per server](https://ops.vimonto.com/docs-media/it/recipes.webp?v=161e760d "Ricette in un'organizzazione")

## Creare una ricetta

1. Apri **Ricette** nella navigazione in alto dell'organizzazione.
2. Fai clic su **Nuova ricetta**.
3. Inserisci un **Nome**, per esempio "Installa htop".
4. In **Esegui come**, scegli **root** o **Utente del server** (l'utente proprietario dei siti sul server).
5. Scrivi lo **Script** nell'editor. Viene eseguito con bash, quindi puoi scriverlo esattamente come faresti in un terminale.
6. Fai clic su **Salva ricetta**.

La ricetta ora compare nell'elenco, con la prima riga dello script, l'utente con cui viene eseguita e quando è stata eseguita l'ultima volta.

### Esempio: installare uno strumento su ogni server

```bash
apt-get update
apt-get install -y htop ncdu
```

Eseguila come **root**. I comandi che richiedono root, come `apt-get`, falliscono quando la ricetta viene eseguita come utente del server.

## Usare variabili in una ricetta

Una ricetta può contenere variabili tra doppie parentesi graffe. Subito prima dell'esecuzione dello script, Vimonto Deploy le sostituisce con i valori del server su cui viene eseguito. L'editor le elenca in **Variabili, compilate per server**.

| Variabile | Valore |
| --- | --- |
| `{{server_id}}` | L'ID del server in Vimonto Deploy. |
| `{{server_name}}` | Il nome del server. |
| `{{server_type}}` | Il tipo di server, come `app` o `database`. |
| `{{ip_address}}` | L'indirizzo IP pubblico. |
| `{{private_ip_address}}` | L'indirizzo IP privato, se presente; altrimenti vuoto. |
| `{{user}}` | L'utente del server. |
| `{{db_password}}` | La password del database, finché Vimonto Deploy la conserva ancora per il server. |

Le variabili con nomi che non esistono in questo elenco restano come le hai scritte.

Esempio:

```bash
echo "Cleaning up on {{server_name}} ({{ip_address}})"
du -sh /home/{{user}}/*
```

## Eseguire una ricetta

1. Fai clic su **Esegui** accanto alla ricetta.
2. In **Server**, seleziona ogni server su cui deve essere eseguita. L'elenco mostra i server a cui hai accesso; si possono selezionare solo i server attivi.
3. Lascia attivo **Inviami un report via email** se vuoi ricevere un'email quando tutti i server hanno finito, con le ultime righe di output di ciascuno. Disattivalo se non ti serve.
4. Fai clic su **Esegui ricetta**.

La ricetta parte contemporaneamente su ogni server selezionato, ciascuno come task separato. Puoi lasciare la pagina; l'output si trova in **Attività**.

Quando tutti i server hanno finito, ricevi una notifica **Ricetta finita** nella campanella (e via email, se l'hai attivata). La riceve solo chi ha avviato l'esecuzione. Vedi [notifiche](https://ops.vimonto.com/docs/it/more/notifications).

## Seguire un'esecuzione e leggere l'output

L'elenco **Esecuzioni recenti** in fondo alla pagina delle ricette mostra le ultime dieci esecuzioni, con chi le ha avviate e quando. Ogni server di un'esecuzione ha il proprio badge con il suo stato. Fai clic su un server per aprire il suo task e leggere l'output completo. Un membro limitato ai server dei suoi [team](https://ops.vimonto.com/docs/it/organization/teams) vede solo le esecuzioni su quei server, e in ogni esecuzione solo i suoi server.

Un'esecuzione su un server **fallisce** quando lo script termina con un exit code diverso da 0. Il task indica allora con quale exit code si è fermata la ricetta. Inizia lo script con `set -e` se vuoi che si fermi al primo comando che fallisce.

Una ricetta può durare fino a circa un'ora per server. Gli script più lunghi vengono interrotti.

## Eseguire una ricetta da uno script o dalla CI

L'[API](https://ops.vimonto.com/docs/it/more/api) elenca le ricette dell'organizzazione (`GET /api/v1/orgs/{organization}/recipes`) ed esegue una ricetta su un elenco di server (`POST /api/v1/orgs/{organization}/recipes/{recipe}/run`), con un token che ha l'ambito **Scrittura**. Ogni server riceve il proprio task, che puoi seguire anche tramite l'API.

## Modificare o eliminare una ricetta

Apri il menu accanto alla ricetta e scegli:

- **Modifica** per cambiare il nome, l'utente o lo script. Le esecuzioni precedenti mantengono lo script con cui sono state eseguite.
- **Elimina** per rimuovere la ricetta per tutti nell'organizzazione. Le esecuzioni precedenti restano nell'attività.

## Chi può usare le ricette?

Ogni membro può vedere le ricette e le loro esecuzioni. Per creare, modificare, eseguire ed eliminare le ricette serve il ruolo proprietario, amministratore, manager o sviluppatore. Vedi [membri e ruoli](https://ops.vimonto.com/docs/it/organization/members-and-roles). Se la tua organizzazione usa i [team](https://ops.vimonto.com/docs/it/organization/teams), puoi eseguire una ricetta solo sui server a cui i tuoi team ti danno accesso.

> [!WARNING]
> Una ricetta può eseguire qualsiasi comando sui tuoi server, anche come root se è impostata così. Controlla bene uno script prima di eseguirlo su più server e provalo prima su un solo server.

## Domande frequenti

### Posso eseguire una ricetta su tutti i miei server insieme?

Sì. Seleziona ogni server nell'elenco **Server** quando avvii l'esecuzione. Ogni server riceve il proprio task e vengono eseguiti contemporaneamente.

### Qual è la differenza tra root e l'utente del server?

**root** può fare qualsiasi cosa sul server, come installare pacchetti e cambiare le impostazioni di sistema. L'**Utente del server** è l'utente proprietario dei tuoi siti che esegue i tuoi deploy; usalo per il lavoro nelle directory dei tuoi siti, così i file mantengono il proprietario giusto.

### Posso eseguire la stessa ricetta due volte contemporaneamente su un server?

Sì. Vimonto Deploy non ti impedisce di eseguire una ricetta su un server dove un'altra ricetta è ancora in esecuzione, quindi fai attenzione con gli script che non devono sovrapporsi.

### Per quanto tempo vengono conservate le esecuzioni delle ricette?

Le esecuzioni e il loro output vengono conservati per 90 giorni, come il resto dell'[attività](https://ops.vimonto.com/docs/it/organization/activity).

### Posso eseguire comandi singoli senza salvare una ricetta?

Usa il [terminale nel browser](https://ops.vimonto.com/docs/it/servers/terminal) per comandi singoli su un solo server.
