> For the complete documentation index, see [llms.txt](https://docs.verge.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.verge.io/learn-the-platform/fr/module-8-developpeur-et-devops/lab.md).

# Laboratoire : Automatisation de l’infrastructure

## Objectif

Automatisez les opérations d’infrastructure VergeOS à l’aide de l’API REST, du fournisseur Terraform et d’outils de script (pyvergeos ou PowerShell). À la fin de ce lab, vous aurez provisionné des VM et des locataires par programme et comprendrez comment intégrer VergeOS dans des workflows CI/CD et d’automatisation.

## Prérequis

* Module 1 terminé : Fondamentaux de l'architecture
* Module 6 terminé : Machines virtuelles
* Module 7 terminé : Multitenance
* Lecture du module 8 terminée (API REST, Terraform, Python/PowerShell, Cloud-Init)
* Un cluster VergeOS en cours d’exécution avec l’accès à l’API activé
* Terraform installé localement (v1.5+)
* Python 3.9+ ou PowerShell 7+ installés localement
* Accès au [vergeos-terraform-playground](https://github.com/verge-io/vergeos-terraform-playground) dépôt

## Difficulté

**Intermédiaire** -- Nécessite une familiarité avec les API REST, les concepts d’infrastructure as code et le scripting de base

## Temps estimé

**2 heures**

## Étapes

### Partie 1 : exploration de l’API REST

Authentifiez-vous auprès de l’API VergeOS et effectuez des opérations de base.

1. Obtenez une clé API dans l’interface VergeOS (Système > Utilisateurs > \[votre utilisateur] > Clés API)
2. Utilisez `curl` ou un client REST pour s’authentifier :

   ```bash
   curl -X GET https://<your-vergeos-host>/api/v4/vms \
     -H "Authorization: Bearer <your-api-key>"
   ```
3. Répertoriez toutes les VM à l’aide du `/api/v4/vms` point de terminaison
4. Créez une nouvelle VM via l’API :
   * POST vers `/api/v4/vms` avec un corps JSON spécifiant le nom, le CPU, la mémoire et le disque
5. Démarrez et arrêtez la VM à l’aide de l’API
6. Supprimez la VM via l’API
7. Explorez des points de terminaison supplémentaires : réseaux (`/api/v4/vnets` — la table s’appelle `vnets` tandis que le nom dans l’interface/objet est « Networks »), locataires (`/api/v4/tenants`)

### Partie 2 : fournisseur Terraform

Utilisez le fournisseur Terraform VergeOS pour gérer l’infrastructure de manière déclarative.

1. Clonez le dépôt vergeos-terraform-playground :

   ```bash
   git clone https://github.com/verge-io/vergeos-terraform-playground.git
   cd vergeos-terraform-playground
   ```
2. Examinez la configuration du fournisseur dans `main.tf`
3. Copiez et personnalisez un fichier exemple `.tfvars` pour votre environnement
4. Exécutez `terraform init` pour télécharger le fournisseur VergeOS
5. Exécutez `terraform plan` pour prévisualiser les modifications de l’infrastructure
6. Exécutez `terraform apply` pour provisionner les ressources
7. Vérifiez les ressources créées dans l’interface VergeOS
8. Modifiez une ressource dans la configuration Terraform et réappliquez
9. Exécutez `terraform destroy` pour nettoyer

### Partie 3 : automatisation par script

Automatisez un flux de travail à l’aide de pyvergeos (Python) ou du module PowerShell.

1. Installez pyvergeos :

   ```bash
   pip install pyvergeos
   ```
2. Écrivez un script qui :
   * Se connecte à votre cluster VergeOS
   * Répertorie toutes les VM et leur état actuel
   * Crée une nouvelle VM à partir d’une recette/modèle
   * Attend que la VM soit en cours d’exécution
   * Affiche l’adresse IP de la VM et les détails de connexion
3. Étendez le script pour :
   * Créer un locataire avec des allocations de ressources prédéfinies
   * Déployer une VM à l’intérieur du locataire
   * Vérifier l’isolation du locataire en contrôlant la connectivité réseau

### Partie 4 : Cloud-Init

Configurez un provisionnement de VM sans intervention à l’aide de cloud-init.

1. Créez un fichier de configuration cloud-init avec :
   * Paramètres de nom d’hôte et de réseau
   * Comptes utilisateur et clés SSH
   * Commandes d’installation des paquets
   * Scripts post-démarrage
2. Attachez la configuration cloud-init à une nouvelle VM via l’API ou l’interface
3. Démarrez la VM et vérifiez que la configuration cloud-init a été appliquée :
   * Vérifiez le nom d’hôte et les paramètres réseau
   * Vérifiez que les comptes utilisateur existent
   * Confirmez que les paquets ont été installés

## Vérification

Votre lab d’automatisation d’infrastructure est terminé lorsque vous pouvez répondre **oui** à tout ce qui suit :

* [ ] Authentifié avec succès auprès de l’API REST VergeOS et effectué des opérations CRUD sur les VM
* [ ] Provisionné l’infrastructure à l’aide du fournisseur Terraform depuis le dépôt playground
* [ ] Modifié et réappliqué la configuration Terraform, en observant des changements incrémentaux
* [ ] Créé un script (Python ou PowerShell) qui automatise le provisionnement de VM et/ou de locataires
* [ ] Configuré une VM avec cloud-init pour une configuration sans intervention et vérifié que la configuration a été appliquée
* [ ] Nettoyé toutes les ressources du lab (VM, locataires, état Terraform)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.verge.io/learn-the-platform/fr/module-8-developpeur-et-devops/lab.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
