# ark dans un script

> Un jeton en variable, des réponses en JSON, aucune question et un code de sortie franc. Ce qu’il faut savoir pour automatiser avec ark.

Source : https://docs.arkya.gg/cli/scripts

## Le jeton

Dans un script, pose le jeton dans `ARKYA_TOKEN`. `ark` s’en sert sans fichier sur le poste.

```bash
export ARKYA_TOKEN="ark_xxxxxxxxxxxxxxxx"
ark whoami
```

Pour `ark push` et `ark deploy`, Docker doit aussi être connecté au registre. `ark login` le fait, et lit le jeton dans `ARKYA_TOKEN` :

```bash
ark login
```

Sur une machine partagée, isole les fichiers d’`ark` avec `ARKYA_HOME` :

```bash
export ARKYA_HOME="$RUNNER_TEMP/arkya"
```

## Aucune question

| Option | Effet |
| --- | --- |
| `--yes` | répond oui aux confirmations : appliquer un plan, supprimer, restaurer |
| `--demarrage-immediat` | donne l’accord au démarrage immédiat quand la commande crée une application ou une base |

`ark init` pose aussi ses questions de nom et de projet. Donne-les en options :

```bash
ark init --app mon-api --project Production --demarrage-immediat
```

## Lire la réponse en JSON

`--json` rend la réponse brute de l’API, la même que celle de l’espace client.

```bash
ark ls --json | jq -r '.[] | select(.rangeCode == "ACS") | .name'
ark info mon-api --json | jq -r '.status'
```

Les commandes qui le comprennent sont listées dans [Toutes les commandes](https://docs.arkya.gg/cli/commandes#partout). `ark status` ne le comprend pas : pour un script, lis `ark info`.

## Le code de sortie

`ark` sort avec `0` quand tout s’est bien passé, et `1` sinon, avec le message d’erreur et une piste sur la sortie standard.

```bash
ark backup create ma-base "nuit-$(date +%Y%m%d)" || echo "la sauvegarde n’est pas partie"
```

## L’ordre des mots

Mets toujours le nom du service avant les options. Une option suivie d’un mot prend ce mot comme valeur :

```bash
ark rm mon-api --yes
```

> **Attention**
>
> Placé avant le nom, `--yes` prend le nom comme valeur. `ark` se rabat alors sur le service par défaut, ou sur l’application du `arkya.json` du dossier, et le supprime sans rien demander.

## Une tâche planifiée

Une sauvegarde chaque nuit, depuis une machine qui tourne déjà :

```bash
0 4 * * * ARKYA_TOKEN=ark_xxxxxxxxxxxxxxxx /usr/local/bin/ark backup create ma-base "nuit-$(date +\%Y\%m\%d)"
```

Dans une crontab, échappe les `%` : sinon, la ligne est coupée et la sauvegarde ne part jamais. Une base peut aussi se sauvegarder seule : voir [Sauvegardes d’une base](https://docs.arkya.gg/bases-de-donnees/sauvegardes).
