# Planifier un Job Template AWX via l'API

L'interface graphique d'AWX (Tower) peut parfois s'avérer capricieuse ou peu intuitive pour configurer des tâches planifiées complexes. Utiliser l'API REST via une simple commande `curl` permet de créer des planifications précises, rapides et reproductibles.

---

## 1. Le Script de Planification

Copiez ce code dans un terminal Linux (ou dans un script bash) pour créer la planification. **Attention à bien modifier les variables avant de l'exécuter.**

```bash
#!/bin/bash

# ==========================================
# Variables de configuration
# ==========================================
AWX_HOST="https://awx.numericare.fr"
TOKEN="ton_token_api_ici"
TEMPLATE_ID="42"

# ==========================================
# Appel API
# ==========================================
curl -X POST "$AWX_HOST/api/v2/job_templates/$TEMPLATE_ID/schedules/" \
    -H "Authorization: Bearer $TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
        "name": "Conversion Media Quotidienne",
        "description": "Exécution automatique 2 fois par jour",
        "rrule": "DTSTART:20240101T030000Z RRULE:FREQ=DAILY;INTERVAL=1;BYHOUR=3,15;BYMINUTE=0",
        "extra_data": {},
        "inventory": null
    }'

```

---

## 2. Explication des Variables

Voici comment récupérer et adapter les valeurs nécessaires pour que la commande fonctionne avec votre environnement :

<table id="bkmrk-variable-description" style="width: 100%; border-collapse: collapse;"><thead><tr><th style="border: 1px solid #ddd; padding: 8px; text-align: left;">Variable</th><th style="border: 1px solid #ddd; padding: 8px; text-align: left;">Description &amp; Comment la trouver</th></tr></thead><tbody><tr><td style="border: 1px solid #ddd; padding: 8px;">`AWX_HOST`</td><td style="border: 1px solid #ddd; padding: 8px;">L'URL de base de votre serveur AWX. *Exemple : https://awx.mon-homelab.lan*</td></tr><tr><td style="border: 1px solid #ddd; padding: 8px;">`TOKEN`</td><td style="border: 1px solid #ddd; padding: 8px;">Votre jeton d'accès personnel. Pour le générer dans AWX : allez dans **Users** &gt; Cliquez sur votre utilisateur &gt; Onglet **Tokens** &gt; **Add** (Cochez "Write" ou "All").</td></tr><tr><td style="border: 1px solid #ddd; padding: 8px;">`TEMPLATE_ID`</td><td style="border: 1px solid #ddd; padding: 8px;">L'identifiant unique du playbook à lancer. Pour le trouver, ouvrez votre Job Template dans AWX et regardez l'URL : `/templates/job_template/<strong>42</strong>/details`. Ici, l'ID est 42.</td></tr></tbody></table>

---

## 3. Comprendre la syntaxe `rrule` (La Planification)

Le paramètre le plus complexe de la requête JSON est le `rrule` (Recurrence Rule). Il utilise le standard iCalendar. Voici comment le décoder et le modifier :

> **Syntaxe utilisée :** `DTSTART:20240101T030000Z RRULE:FREQ=DAILY;INTERVAL=1;BYHOUR=3,15;BYMINUTE=0`

- **DTSTART:** Définit la date et l'heure de début de validité de la règle (au format UTC, indiqué par le `Z`). Mettre une date dans le passé fonctionne très bien pour que la règle soit active immédiatement.
- **FREQ=DAILY :** La fréquence de base. Peut être remplacé par `HOURLY` (Toutes les heures), `WEEKLY` (Toutes les semaines), ou `MONTHLY` (Tous les mois).
- **INTERVAL=1 :** S'applique tous les *X* jours (car FREQ=DAILY). Si on met 2, le script tournera un jour sur deux.
- **BYHOUR=3,15 :** Exécute la tâche à 03h00 et à 15h00 **(Heure UTC)**. Attention au décalage horaire selon votre fuseau !
- **BYMINUTE=0 :** S'assure que l'exécution se fait à l'heure pile (00 minute).

### Autres exemples de `rrule` utiles :

<table id="bkmrk-toutes-les-4-heures-" style="width: 100%; border-collapse: collapse;"><tbody><tr><td style="border: 1px solid #ddd; padding: 8px;">**Toutes les 4 heures :**</td><td style="border: 1px solid #ddd; padding: 8px;">`... RRULE:FREQ=HOURLY;INTERVAL=4`</td></tr><tr><td style="border: 1px solid #ddd; padding: 8px;">**Tous les lundis à 2h du matin :**</td><td style="border: 1px solid #ddd; padding: 8px;">`... RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO;BYHOUR=2;BYMINUTE=0`</td></tr></tbody></table>