Skip to content

Commit 864e2ce

Browse files
committed
feat(opcp): create guide how to use terraform
1 parent c08c7c2 commit 864e2ce

4 files changed

Lines changed: 240 additions & 0 deletions

File tree

Lines changed: 238 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,238 @@
1+
---
2+
title: "OPCP - Comment utiliser Terraform avec OPCP"
3+
excerpt: "Découvrez comment générer une Application Credential depuis Horizon et automatiser le déploiement de vos ressources OPCP avec Terraform"
4+
updated: 2026-04-29
5+
---
6+
7+
## Objectif
8+
9+
[Terraform](https://www.terraform.io/) est un outil open source d'**Infrastructure as Code (IaC)** développé par [HashiCorp](https://www.hashicorp.com/). Il permet de décrire et de provisionner votre infrastructure de manière déclarative à partir de fichiers de configuration, écrits en *HashiCorp Configuration Language* (HCL).
10+
11+
L'offre **OPCP** reposant sur **OpenStack**, vous pouvez utiliser le **provider Terraform OpenStack** afin d'automatiser le déploiement de vos ressources : instances, réseaux, volumes, paires de clés, etc.
12+
13+
**Ce guide détaille les étapes nécessaires pour générer une *Application Credential* depuis Horizon, configurer Terraform et déployer un premier serveur sur votre infrastructure OPCP.**
14+
15+
## Prérequis
16+
17+
- Disposer d'un service [OPCP](/links/hosted-private-cloud/onprem-cloud-platform) actif.
18+
- Posséder un **compte utilisateur** avec les droits suffisants pour se connecter à Horizon sur l'offre OPCP.
19+
- Avoir [installé Terraform](https://developer.hashicorp.com/terraform/install) (version >= 1.0) sur votre poste de travail.
20+
- Disposer d'une **paire de clés SSH** sur votre poste local pour accéder à votre instance.
21+
- Avoir préalablement créé un **réseau privé** dans votre projet OPCP (voir le guide [Comment installer une instance depuis l'interface Horizon](/pages/hosted_private_cloud/opcp/opcp-setup-instance)).
22+
23+
## En pratique
24+
25+
### 1. Création d'une Application Credential depuis Horizon
26+
27+
Pour permettre à Terraform de communiquer avec votre infrastructure OPCP, il est nécessaire de générer un couple **Application Credential** (`id` / `secret`) depuis l'interface Horizon. Ce mécanisme évite l'utilisation directe de vos identifiants Keycloak et fournit une authentification dédiée à vos automatisations, avec un périmètre de droits limité au projet courant.
28+
29+
#### Connexion à Horizon
30+
31+
Connectez-vous à l'interface **Horizon** de votre environnement OPCP, puis sélectionnez le **projet** dans lequel vous souhaitez déployer vos ressources via Terraform. Pour plus d'informations, consultez le guide [Mise en route de votre OPCP](/pages/hosted_private_cloud/opcp/opcp-getting-started).
32+
33+
#### Création de l'Application Credential
34+
35+
Dans le menu de gauche, cliquez sur `Identity`{.action}, puis sur `Application Credentials`{.action}.<br><br>
36+
![horizon-identity-application-credentials](images/01-application-credential-step01.png){.thumbnail}
37+
38+
Cliquez sur `+ Create Application Credential`{.action}.<br><br>
39+
![horizon-create-application-credential](images/01-application-credential-step02.png){.thumbnail}
40+
41+
Renseignez les champs suivants :
42+
43+
| Champ | Description |
44+
|--------|--------------|
45+
| **Name** | Saisissez un nom pour votre Application Credential (ex. : *terraform-cred*). |
46+
| **Description** | Optionnel. Ajoutez une description si nécessaire. |
47+
| **Secret** | Optionnel. Si non renseigné, un secret sera généré automatiquement. |
48+
| **Expiration Date / Expiration Time** | Optionnel. Définissez une date d'expiration. |
49+
| **Roles** | Sélectionnez les rôles à associer à la credential (ex. : *member*). |
50+
| **Access Rules** | Optionnel. Permet de restreindre les actions autorisées. |
51+
| **Unrestricted** | Laissez décoché pour limiter les actions possibles. |
52+
53+
Cliquez sur `Create Application Credential`{.action}.
54+
55+
> [!warning]
56+
> Une fois la fenêtre fermée, le **secret ne sera plus accessible**. Téléchargez le fichier `clouds.yaml` ou `openrc` proposé par Horizon, ou copiez les valeurs `id` et `secret` dans un emplacement sécurisé.
57+
58+
![horizon-application-credential-download](images/02-application-credential-step03.png){.thumbnail}
59+
60+
> [!primary]
61+
> Pour la suite de ce tutoriel, **téléchargez le fichier `openrc`** : il sera utilisé à l'étape suivante pour authentifier Terraform auprès de votre infrastructure OPCP.
62+
63+
### 2. Préparation de l'environnement Terraform
64+
65+
#### Création du dossier de travail
66+
67+
Créez un répertoire dédié à votre projet Terraform :
68+
69+
```bash
70+
mkdir terraform-opcp && cd terraform-opcp
71+
```
72+
73+
#### Définition du provider OpenStack
74+
75+
Dans un fichier nommé `provider.tf`, ajoutez les lignes suivantes :
76+
77+
```hcl
78+
terraform {
79+
required_version = ">= 1.0"
80+
required_providers {
81+
openstack = {
82+
source = "terraform-provider-openstack/openstack"
83+
version = ">= 3.0.0"
84+
}
85+
}
86+
}
87+
88+
provider "openstack" {}
89+
```
90+
91+
Aucun paramètre n'est nécessaire dans le bloc `provider`{.action} : le provider OpenStack récupère automatiquement les informations d'authentification depuis les variables d'environnement `OS_*`.
92+
93+
#### Chargement des variables d'environnement OpenStack
94+
95+
Lors de la création de votre Application Credential, Horizon vous a proposé le téléchargement d'un fichier `clouds.yaml` ou `openrc`. Le plus simple est de charger ce fichier `openrc.sh` dans votre shell avant d'exécuter Terraform :
96+
97+
```bash
98+
source openrc.sh
99+
```
100+
101+
> [!primary]
102+
> Le fichier `openrc.sh` exporte notamment `OS_AUTH_URL`, `OS_REGION_NAME`, `OS_APPLICATION_CREDENTIAL_ID` et `OS_APPLICATION_CREDENTIAL_SECRET`. Ces variables seront automatiquement utilisées par le provider OpenStack de Terraform.
103+
104+
#### Initialisation
105+
106+
Téléchargez les plugins du provider OpenStack :
107+
108+
```bash
109+
terraform init
110+
```
111+
112+
### 3. Création d'un serveur
113+
114+
Dans un fichier `main.tf`, déclarez les ressources nécessaires pour créer une instance attachée à un réseau privé existant :
115+
116+
```hcl
117+
# Variables liées à l'instance
118+
variable "instance_name" {
119+
description = "Nom de l'instance qui sera créée dans OPCP"
120+
type = string
121+
default = "instance-terraform-name"
122+
}
123+
124+
variable "image_name" {
125+
description = "Nom de l'image à utiliser pour l'instance (ex: Debian 12 OPCP)"
126+
type = string
127+
default = "Debian 12 OPCP"
128+
}
129+
130+
variable "flavor_name" {
131+
description = "Flavor baremetal définissant les ressources matérielles de l'instance (ex: scale-1, scale-2, etc.)"
132+
type = string
133+
default = "scale-1"
134+
}
135+
136+
variable "network_name" {
137+
description = "Nom du réseau existant auquel l'instance sera rattachée"
138+
type = string
139+
default = "<your-network-name>"
140+
}
141+
142+
variable "key_name" {
143+
description = "Nom de la paire de clés SSH à associer à l'instance"
144+
type = string
145+
default = "terraform-key"
146+
}
147+
148+
# Création d'une instance
149+
resource "openstack_compute_instance_v2" "terraform_instance" {
150+
name = var.instance_name
151+
image_name = var.image_name
152+
flavor_name = var.flavor_name
153+
key_pair = var.key_name
154+
155+
network {
156+
name = var.network_name
157+
}
158+
159+
lifecycle {
160+
# Évite que Terraform détecte une dérive lorsque l'image de base est mise à jour
161+
ignore_changes = [
162+
image_name
163+
]
164+
}
165+
166+
# Métadonnées utiles
167+
metadata = {
168+
environment = "production"
169+
managed_by = "terraform"
170+
}
171+
172+
# Timeouts plus longs (le provisioning baremetal est lent)
173+
timeouts {
174+
create = "60m"
175+
delete = "30m"
176+
}
177+
}
178+
179+
# Sorties utiles après création
180+
output "instance_id" {
181+
value = openstack_compute_instance_v2.terraform_instance.id
182+
}
183+
184+
output "instance_ip" {
185+
value = openstack_compute_instance_v2.terraform_instance.access_ip_v4
186+
}
187+
```
188+
189+
> [!primary]
190+
> Les noms d'images, de flavors et de réseaux disponibles peuvent être listés depuis Horizon ou avec la CLI OpenStack (`openstack image list`, `openstack flavor list`, `openstack network list`). Pour configurer la CLI, consultez le guide [Comment utiliser les API et obtenir les informations d'identification](/pages/hosted_private_cloud/opcp/opcp-use-api-get-credentials).
191+
192+
#### Vérification du plan
193+
194+
Avant tout déploiement, prévisualisez les actions qui seront effectuées :
195+
196+
```bash
197+
terraform plan
198+
```
199+
200+
#### Application de la configuration
201+
202+
Déployez l'instance avec la commande suivante :
203+
204+
```bash
205+
terraform apply
206+
```
207+
208+
Confirmez avec `yes` lorsque Terraform vous le demande. Une fois la création terminée, l'instance est visible dans l'interface Horizon, dans la section `Compute`{.action} > `Instances`{.action}.
209+
210+
### 4. Suppression de l'infrastructure
211+
212+
Pour supprimer l'ensemble des ressources créées via Terraform :
213+
214+
```bash
215+
terraform destroy
216+
```
217+
218+
### 5. Dépannage (Troubleshooting)
219+
220+
| Problème | Cause possible | Solution |
221+
|-----------|----------------|-----------|
222+
| `Authentication failed` | Mauvais `application_credential_id` ou `secret` | Vérifiez les identifiants dans Horizon (`Identity`{.action} > `Application Credentials`{.action}). |
223+
| `Could not find image` | Le nom de l'image ne correspond pas | Listez les images disponibles via `openstack image list` ou depuis Horizon. |
224+
| `No suitable endpoint could be found` | Mauvaise URL `auth_url` ou région inexistante | Vérifiez l'URL Keystone et la région dans `Project`{.action} > `API Access`{.action}. |
225+
| `Network not found` | Réseau privé absent dans le projet | Créez un réseau privé au préalable depuis Horizon (`Network`{.action} > `Networks`{.action}). |
226+
227+
### 6. Références
228+
229+
- [Documentation officielle Terraform](https://developer.hashicorp.com/terraform)
230+
- [Provider Terraform OpenStack](https://registry.terraform.io/providers/terraform-provider-openstack/openstack/latest/docs)
231+
- [Ressource openstack_compute_instance_v2](https://registry.terraform.io/providers/terraform-provider-openstack/openstack/latest/docs/resources/compute_instance_v2)
232+
- [OpenStack Application Credentials](https://docs.openstack.org/keystone/latest/user/application_credentials.html)
233+
234+
## Aller plus loin
235+
236+
Si vous avez besoin d'une formation ou d'une assistance technique pour la mise en œuvre de nos solutions, contactez votre commercial ou cliquez sur [ce lien](/links/professional-services) pour obtenir un devis et demander une analyse personnalisée de votre projet à nos experts de l'équipe Professional Services.
237+
238+
Échangez avec notre [communauté d'utilisateurs](/links/community).
43.1 KB
Loading
130 KB
Loading
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
id: f76dfc14-146f-4579-8643-cb25b6e162ec
2+
full_slug: opcp-how-to-use-terraform

0 commit comments

Comments
 (0)