# Recepten: opgeslagen bash-scripts op meerdere servers

> Sla bash-scripts op als recept en voer ze in één keer uit op een of meer servers, als root of als servergebruiker, met variabelen per server en een mailverslag.

Een recept is een opgeslagen bash-script dat je op een of meer van je servers uitvoert. Gebruik recepten voor werk dat je vaker doet, zoals een tool installeren, schijfruimte opruimen, logs roteren of een instelling op elke server controleren. Je schrijft het script één keer, en de organisatie kan het op elke actieve server uitvoeren wanneer dat nodig is.

Elke uitvoering start één [achtergrondtaak](https://ops.vimonto.com/docs/nl/organization/activity) per server, zodat je de output van elke server apart kunt volgen. Recepten horen bij de organisatie: elk lid ziet ze, en leden met de rol developer of hoger kunnen ze aanmaken, wijzigen en uitvoeren.

![De pagina Recepten met opgeslagen recepten en de recente uitvoeringen per server](https://ops.vimonto.com/docs-media/nl/recipes.webp?v=161e760d "Recepten in een organisatie")

## Een recept aanmaken

1. Open **Recepten** in de navigatie bovenaan de organisatie.
2. Klik op **Nieuw recept**.
3. Vul een **Naam** in, bijvoorbeeld "htop installeren".
4. Kies onder **Uitvoeren als** voor **root** of **Servergebruiker** (de gebruiker die eigenaar is van de sites op de server).
5. Schrijf het **Script** in de editor. Het draait met bash, dus je schrijft het precies zoals je in een terminal zou doen.
6. Klik op **Recept opslaan**.

Het recept staat nu in de lijst, met de eerste regel van het script, de gebruiker waarmee het draait en wanneer het voor het laatst is uitgevoerd.

### Voorbeeld: een tool op elke server installeren

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

Voer dit uit als **root**. Commando's die root nodig hebben, zoals `apt-get`, mislukken als het recept als servergebruiker draait.

## Variabelen gebruiken in een recept

Een recept kan variabelen tussen dubbele accolades bevatten. Vlak voordat het script draait, vervangt Vimonto Deploy ze door de waarden van de server waarop het draait. De editor toont ze onder **Variabelen, per server ingevuld**.

| Variabele | Waarde |
| --- | --- |
| `{{server_id}}` | Het ID van de server in Vimonto Deploy. |
| `{{server_name}}` | De naam van de server. |
| `{{server_type}}` | Het servertype, zoals `app` of `database`. |
| `{{ip_address}}` | Het publieke IP-adres. |
| `{{private_ip_address}}` | Het privé-IP-adres, als dat er is; anders leeg. |
| `{{user}}` | De eigen gebruiker van de server. |
| `{{db_password}}` | Het databasewachtwoord, zolang Vimonto Deploy het nog voor de server bewaart. |

Variabelen met namen die niet in deze lijst staan, blijven staan zoals je ze schreef.

Voorbeeld:

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

## Een recept uitvoeren

1. Klik op **Uitvoeren** naast het recept.
2. Vink onder **Servers** elke server aan waarop het moet draaien. De lijst toont de servers waar je toegang toe hebt; alleen actieve servers kun je kiezen.
3. Laat **Mail me een verslag** aan als je één e-mail wilt zodra elke server klaar is, met de laatste regels output van elke server. Zet het uit als je dat niet nodig hebt.
4. Klik op **Recept uitvoeren**.

Het recept start tegelijk op elke gekozen server, elk als eigen taak. Je kunt de pagina verlaten; de output staat onder **Activiteit**.

Als elke server klaar is, krijg je de melding **Recept klaar** in de bel (en per e-mail, als je dat hebt aangezet). Alleen degene die de uitvoering startte krijgt die. Zie [meldingen](https://ops.vimonto.com/docs/nl/more/notifications).

## Een uitvoering volgen en de output lezen

De lijst **Recente uitvoeringen** onderaan de pagina Recepten toont de laatste tien uitvoeringen, met wie ze startte en wanneer. Elke server in een uitvoering heeft een eigen chip met zijn status. Klik op een server om zijn taak te openen en de volledige output te lezen. Een lid dat beperkt is tot de servers van zijn [teams](https://ops.vimonto.com/docs/nl/organization/teams) ziet alleen uitvoeringen op die servers, en in elke uitvoering alleen zijn eigen servers.

Een uitvoering op een server **mislukt** als het script eindigt met een andere exitcode dan 0. De taak vertelt dan met welke exitcode het recept stopte. Begin je script met `set -e` als je wilt dat het stopt bij het eerste commando dat mislukt.

Een recept kan per server tot ongeveer een uur draaien. Langere scripts worden gestopt.

## Een recept uitvoeren vanuit een script of CI

De [API](https://ops.vimonto.com/docs/nl/more/api) toont de recepten van de organisatie (`GET /api/v1/orgs/{organization}/recipes`) en voert er een uit op een lijst servers (`POST /api/v1/orgs/{organization}/recipes/{recipe}/run`), met een token dat de scope **Schrijven** heeft. Elke server krijgt een eigen taak, die je ook via de API kunt volgen.

## Een recept bewerken of verwijderen

Open het menu naast het recept en kies:

- **Bewerken** om de naam, de gebruiker of het script te wijzigen. Eerdere uitvoeringen houden het script waarmee ze draaiden.
- **Verwijderen** om het recept voor iedereen in de organisatie te verwijderen. Eerdere uitvoeringen blijven in de activiteit staan.

## Wie kan recepten gebruiken?

Elk lid ziet de recepten en hun uitvoeringen. Voor aanmaken, bewerken, uitvoeren en verwijderen van recepten heb je de rol eigenaar, beheerder, manager of developer nodig. Zie [leden en rollen](https://ops.vimonto.com/docs/nl/organization/members-and-roles). Als je organisatie [teams](https://ops.vimonto.com/docs/nl/organization/teams) gebruikt, kun je een recept alleen uitvoeren op de servers waar je teams je toegang toe geven.

> [!WARNING]
> Een recept kan elk commando op je servers uitvoeren, als root als het zo is ingesteld. Controleer een script zorgvuldig voordat je het op meerdere servers uitvoert, en test het eerst op één server.

## Veelgestelde vragen

### Kan ik een recept in één keer op al mijn servers uitvoeren?

Ja. Vink elke server aan in de lijst **Servers** als je de uitvoering start. Elke server krijgt een eigen taak, en ze draaien tegelijk.

### Wat is het verschil tussen root en de servergebruiker?

**root** kan alles op de server, zoals pakketten installeren en systeeminstellingen wijzigen. De **Servergebruiker** is de gebruiker die eigenaar is van je sites en je deploys uitvoert; gebruik die voor werk in de mappen van je sites, zodat bestanden de juiste eigenaar houden.

### Kan ik hetzelfde recept twee keer tegelijk op één server uitvoeren?

Ja. Vimonto Deploy houdt je niet tegen als je een recept uitvoert op een server waar nog een ander recept draait. Wees dus voorzichtig met scripts die niet mogen overlappen.

### Hoe lang worden uitvoeringen van recepten bewaard?

Uitvoeringen en hun output worden 90 dagen bewaard, net als andere [activiteit](https://ops.vimonto.com/docs/nl/organization/activity).

### Kan ik losse commando's uitvoeren zonder een recept op te slaan?

Gebruik de [terminal in de browser](https://ops.vimonto.com/docs/nl/servers/terminal) voor losse commando's op één server.
