# OpenStack avec DevStack et la CLI OpenStack pour DevOps

### 1. Qu'est-ce que DevStack ?

DevStack est un outil open source conçu pour simplifier le déploiement d'OpenStack dans un environnement de développement ou de test. Il installe rapidement tous les composants d’OpenStack sur une seule machine ou un cluster minimal.

**Objectif principal** : Fournir un environnement prêt à l'emploi pour expérimenter OpenStack.

**Avantages** :

* Installation rapide.
* Configuration simplifiée.
* Idéal pour les développeurs et DevOps qui veulent se former.

***

### 2. Architecture d’OpenStack

OpenStack est une plateforme composée de plusieurs services modulaires qui fonctionnent ensemble pour offrir des fonctionnalités de gestion de cloud.

#### 2.1. Les composants majeurs

1. **Keystone** (Authentification et autorisation) : Service central d'authentification.
2. **Nova** (Gestion des instances) : Responsable du cycle de vie des machines virtuelles.
3. **Glance** (Service d'images) : Gère les images disque pour les instances.
4. **Neutron** (Réseautage) : Gère les réseaux, sous-réseaux et routeurs.
5. **Cinder** (Stockage en bloc) : Fournit des volumes persistants pour les instances.
6. **Swift** (Stockage d’objets) : Système de stockage d’objets distribué.
7. **Horizon** (Interface graphique) : Tableau de bord web pour interagir avec OpenStack.
8. **Heat** (Orchestration) : Outil d’IaC pour déployer des stacks de ressources OpenStack.

#### 2.2. Communication entre les composants

Les services d’OpenStack interagissent via des **APIs REST** :

* Keystone agit comme point d'entrée central pour l'authentification.
* Chaque service possède un gestionnaire API exposant ses fonctionnalités.
* Les composants Nova, Neutron, et Cinder collaborent pour déployer une instance.

***

### 3. Introduction à la CLI OpenStack

#### Pourquoi utiliser la CLI ?

La CLI (Command Line Interface) est un outil puissant pour gérer OpenStack. Elle permet de :

* **Automatiser les tâches courantes** comme la création d'instances, de volumes ou de réseaux.
* **Récupérer des informations détaillées** sur l’état des ressources.
* **Dépanner efficacement** en accédant aux logs ou aux statuts des services.

#### Fonctionnement de la CLI

* La CLI interagit avec les APIs REST des services OpenStack.
* Les commandes suivent une structure logique : `openstack <ressource> <action>`.

**Actions disponibles** :

* `list` : Lister les ressources.
* `create` : Créer une ressource.
* `delete` : Supprimer une ressource.
* `show` : Afficher les détails d’une ressource spécifique.
* `update` : Modifier une ressource existante.

#### Chargement des variables d'environnement

Avant d'exécuter des commandes, chargez les variables nécessaires :

```bash
source openrc admin admin
```

***

### 4. Commandes de base pour la gestion OpenStack

#### 4.1. Gestion des projets (tenants)

* Lister les projets :

```bash
openstack project list
```

* Créer un projet :

```bash
openstack project create --domain default myproject
```

* Supprimer un projet :

```bash
openstack project delete myproject
```

#### 4.2. Gestion des utilisateurs

* Lister les utilisateurs :

```bash
openstack user list
```

* Créer un utilisateur :

```bash
openstack user create --password mypassword myuser
```

* Attribuer un rôle :

```bash
openstack role add --project myproject --user myuser member
```

#### 4.3. Gestion des instances

* Lister les instances :

```bash
openstack server list
```

* Créer une instance :

```bash
openstack server create --image Ubuntu20.04 --flavor m1.small --network mynetwork --key-name mykey myvm
```

***

### 5. Résolution de problèmes avec la CLI

#### 5.1. Vérifier le statut des services

* Lister les services :

```bash
openstack service list
```

* Logs des services :

```bash
journalctl -u devstack@n-api
```

#### 5.2. Inspecter les ressources

* Afficher les détails d’une instance :

```bash
openstack server show myvm
```

* Vérifier les quotas :

```bash
openstack quota show myproject
```

***

### 6. Automatisation avec IaC (Terraform)

#### Pourquoi Terraform avec OpenStack ?

Terraform permet de définir des ressources cloud sous forme de code, garantissant la reproductibilité et la gestion centralisée.

#### Exemple de fichier Terraform

Voici un fichier `main.tf` :

```hcl
provider "openstack" {
  auth_url    = "http://<OPENSTACK_AUTH_URL>/v3"
  region      = "RegionOne"
  domain_name = "Default"
  username    = "admin"
  password    = "admin"
  tenant_name = "admin"
}
resource "openstack_compute_instance_v2" "myvm" {
  name = "myvm"
  flavor_name = "m1.small"
  image_name = "Ubuntu20.04"
}
```

***

### 7. Bonnes pratiques

1. **Automatisation** : Intégrez les commandes CLI dans des scripts CI/CD.
2. **Monitoring** : Utilisez des outils comme Prometheus.
3. **Documentation** : Gardez une trace des configurations versionnées.

***

### 8. Conclusion

Ce cours vous a guidé dans la découverte d’OpenStack avec DevStack, depuis les concepts fondamentaux jusqu’à l’automatisation avec Terraform. Vous êtes maintenant capable de gérer et automatiser une infrastructure OpenStack.


---

# Agent Instructions: 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:

```
GET https://tribucloud.gitbook.io/openstack-avec-devstack/openstack-avec-devstack-et-la-cli-openstack-pour-devops.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
