TP : Gestion d’Openstack par Terraform
1. Installer terraform
[Link]
2. créer un dossier terraform par mkdir ~/terraform
3. Acceder à ce dossier par cd ~/terraform
4. Créer un cloud openstack
5. télécharger les fichiers [Link] et [Link] depuis openstack, voir la figure ci-dessous
6. copier les fichiers [Link] et [Link] vers le dossier ~/terraform
7. Installer OpenStack client
# apt install python-dev python-pip
# pip install python-openstackclient
8. Ajouter dans le fichier /etc/hosts
@IP-de-ctl ctl
9. Apres, taper la commande suivante pour ce connecter au cloud openstack par cli
source [Link]
10. Uiliser les commandes suivantes pour afficher les informations sur openstack
openstack image list
openstack flavor list
openstack keypair list
openstack network list
11. Dans le dossier ~/terraform, créer le fichier [Link] qui permit à terraform de ce connecter
à openstack:
terraform {
required_version = ">= 0.14.0"
required_providers {
openstack = {
source = "terraform-provider-openstack/openstack"
version = "~> 1.48.0"
}
}
}
provider "openstack" {
cloud = "openstack"
}
12. Tester le par terraform init. Cette commande permet d’initialiser le répertoire de travail et
préparer le terrain en y installant les providers nécessaires et en configurant le backend pour le
state file.
khalid@PC:~/terraform/openstack3$ terraform init
Initializing the backend...
Initializing provider plugins...
- Finding terraform-provider-openstack/openstack versions matching "~> 1.48.0"...
- Installing terraform-provider-openstack/openstack v1.48.0...
- Installed terraform-provider-openstack/openstack v1.48.0 (self-signed, key ID 4F80527A391BEFD2)
Partner and community providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here:
[Link]
Terraform has created a lock file .[Link] to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.
Terraform has been successfully initialized!
13. Apres on va créer un fichier [Link] qui va permettre de créer une VM dans openstack , le
contenu de [Link] est :
resource "openstack_compute_instance_v2" "votrenome-VM1" {
name = "votrenome-VM1"
image_id = "403ba7e6-d94e-4b25-87da-3385fe7223c7"
flavor_id = "2"
security_groups = ["default"]
network {
uuid = "8673acca-381a-496b-a2f7-ef756b3c8953"
}}
• Remplacer votrenome par votre réel nom
• les informations image_id, flavor_id et uuid de network sont determinés par les
commandes
openstack image list ⇒ choisir l’ID de l’image bionic-server
openstack flavor list ⇒ choisir l’ID de flavor small
openstack network list ⇒ choisir l’ID de network flat-lan-1-net
14. Taper les commandes suivant et vérifier les résultats
• terraform validate
• terraform plan
15. lancer le création de la VM par terraform apply
• vérifier que terraform a téléchargé les fichiers [Link] et [Link]
• vérifier que la VM est créée dans opesntack par la commande openstack server list
• taper la commande suivante pour afficher les détails de la VM :
openstack server show myvm
16. La VM créée n’a pas accessible à l’extérieur. Pour l’exposer à l’extérieur on doit l’assigner une
adresse flottante qui est une adresse public
Une IP flottante
16. Par défaut, les machines virtuelles (instances) dans OpenStack n'ont que des adresses IP
privées. Une IP flottante est une adresse IP publique temporaire. Elle nous permettra d'accéder à
la VM via une IP publique.
Ajoutez ce qui suit au fichier [Link] en conservant le contenu existant :
resource "openstack_networking_floatingip_v2" "myvm_fip" {
pool = "ext-net"
}
resource "openstack_compute_floatingip_associate_v2" "myvm_fip" {
floating_ip = openstack_networking_floatingip_v2.myvm_fip.address
instance_id = openstack_compute_instance_v2. [Link]
}
L'exécution de terraform plan montrera qu'une adresse IP flottante doit être créée
17. Executer terraform apply et verifier que openstack a attribué une ip publique à la VM
18. Pour acceder à la VM par ssh nous avons besoin de la clé ssh. Supoosons que vous avez déjà la
clé ssh id_rsa dans le repertoire ~/.ssh, pour l’utiliser nous devrons copie la clé publique ~/.ssh/id-
[Link] vers le cloud opesntack. Ajouter les lignes suivantes dans le fichier [Link]
resource "openstack_compute_keypair_v2" "my-keypair" {
name = "my-keypair"
public_key = file("~/.ssh/id_rsa_ansible.pub")
}
resource "openstack_compute_instance_v2" "myvm" {
name = "myvm"
image_id = "0c00703a-fa2b-400e-b8ba-b807f47f235e"
flavor_id = "2"
key_pair = "my-keypair"
security_groups = ["default"]
network {
uuid = "385ea150-aa75-424c-a7f2-573f364eccf8"
}
}
19. pour créer un volume et l’attacher à une VM :
# créer Volume
resource "openstack_blockstorage_volume_v2" "my-volume" {
name = "my-volume"
size = "10"
}
# Attacher volume
resource "openstack_compute_volume_attach_v2" "volumes" {
instance_id = openstack_compute_instance_v2.[Link]
volume_id = openstack_blockstorage_volume_v2.my_volume.id
}
Verifier que le volume est créer par openstack volume list
20. Construire un serveur Web simple
Commencez par tout raser :
terraform destroy
cette commande détruira toutes les machines virtuelles créées. pour détruire une VM spécifique,
par exemple myvm, utiliser :
terraform destroy -target=openstack_compute_instance_v2.myvm
Ensuite, créez un nouveau fichier appelé [Link] avec le contenu suivant :
#!/bin/bash
apt-get update
apt-get install -y apache2
Modifiez maintenant « [Link] » pour qu'elle ressemble à ce qui suit :
resource "openstack_compute_instance_v2" "vm2" {
name = "vm2"
image_id = "c80fd967-b6c0-4970-8c6e-1b4b654b1d24"
flavor_id = "2"
key_pair = "my-keypair"
security_groups = ["default"]
user_data = "${file("[Link]")}"
network {
uuid = "82315ada-3802-4f57-98a3-6f7fc6b0b3f9"
}}
ou sans script sh :
user_data = <<-EOF
#!/bin/bash
echo "*** Installing apache2"
sudo apt update -y
sudo apt install apache2 -y
echo "*** Completed Installing apache2"
EOF
La section ‘‘user_data’’» lira le contenu de « [Link] » et l'exécutera sur l'instance
nouvellement créée.
Executer la commande et verifier le resultat
$ terraform apply
Détruire les instances :
terraform destroy,
References:
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]