Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
openstack [Le 15/07/2012, 10:57] xavier4811 |
openstack [Le 22/05/2023, 19:03] (Version actuelle) lyondif02 [Pré-requis] typo. +reformulation mineure |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | {{tag>Precise virtualisation serveur tutoriel BROUILLON}} | + | {{tag>Precise virtualisation serveur tutoriel}} |
---- | ---- | ||
====== OpenStack ====== | ====== OpenStack ====== | ||
- | OpenStack est un logiciel libre (license Apache 2.0) qui permet la construction de cloud privé et public. OpenStack est aussi une communauté et un projet en plus d'un logiciel qui à pour but d'aider les organisations à mettre en oeuvre un système de serveur et de stockage virtuel. OpenStack est composé d'une série de logiciels et de projets au code source libre qui sont maintenu par la communauté incluant: OpenStack Compute (nommé Nova), OpenStack Object Storage (nommé Swift), et OpenStack Image Service (nommé Glance). | + | OpenStack est un logiciel libre((license Apache 2.0)) qui permet la construction de [[:cloud]] privé et public. C’est aussi le nom d’une communauté et d’un projet qui ont pour but d’aider les organisations à mettre en œuvre un système de serveur et de stockage virtuel. |
- | Ce document présente l'installation des composant d'identité, d'images et virtualisation sur une seule machine.\\ | + | |
- | Il s'agit plutôt d'une configuration de développement mais néanmoins fonctionnelle. les services réseau(Quantum) et stockage(Swift) ne sont pas abordés(du moins pour l'instant). | + | OpenStack est composé d’une série de logiciels et de projets au code source libre qui sont maintenus par la communauté. Il comprend notamment les composants OpenStack Compute, nommé Nova, OpenStack Object Storage, nommé Swift, et OpenStack Image Service, nommé Glance. |
+ | |||
+ | Ce document présente l’installation des composants d’identité, d’images et de virtualisation, sur une seule machine. Cela correspond davantage à une configuration de développement. Elle est néanmoins fonctionnelle. Les services réseau avancé, nommé Neutron (ex-Quantum), et stockage objet, nommé Swift, ne sont pas abordés ici. | ||
===== Pré-requis ===== | ===== Pré-requis ===== | ||
- | + | ||
+ | Dispositions générales : | ||
* Disposer des [[:sudo|droits d'administration]]. | * Disposer des [[:sudo|droits d'administration]]. | ||
- | * Disposer d'une connexion à Internet configurée et activée. | + | * Disposer d’une connexion à Internet configurée et activée. |
- | * Un processeur supportant la virtualisation matérielle ([[kvm#mise_en_place|test sur la page KVM]]) | + | * Avoir activé les [[:dépôts]] logiciels. |
- | * Disposer d'un disque dur ou d'une partition non formatée pour LVM | + | * Disposer d’un processeur supportant la virtualisation matérielle ([[:kvm#mise_en_place|test sur la page KVM]]). |
- | * Ne pas avoir peur de la ligne de commande | + | * Disposer d’un disque dur ou d’une partition non formatée pour [[:LVM]]. |
- | * Avoir [[:tutoriel:comment_installer_un_paquet|installé les paquet]] **[[apt>kvm|kvm]] [[apt>libvirt-bin|libvirt-bin]] [[apt>virtinst|virtinst]]**. | + | * Ne pas avoir peur de la [[:commande_shell|ligne de commande]]. |
- | * Avoir [[:tutoriel:comment_installer_un_paquet|installé les paquet]] **[[apt>mysql-server|mysql-server]] [[apt>python-mysqldb|python-mysqldb]]** | + | * [[:tutoriel:comment_installer_un_paquet|Avoir installé les paquets]] suivants : |
- | * Avoir [[:tutoriel:comment_installer_un_paquet|installé les paquet]] **[[apt>bridge-utils|bridge-utils]]** | + | * **[[apt>kvm,libvirt-bin,virtinst]]** |
- | * Il est nécéssaire de configurer le réseau en IP Fixe. Supprimez les paquets Network-Manager ou Wicd et resolvconf. | + | * **[[apt>mysql-server,python-mysqldb]]** |
+ | * **[[apt>bridge-utils|bridge-utils]]**. | ||
+ | * Avoir configuré le réseau avec un adressage IP statique. Supprimer les paquets Network-Manager ou Wicd et resolvconf. | ||
- | Les paquets OpenStack utilisés sont ceux des dépots Ubuntu.\\ | + | Notes particulières : |
- | Tous les services OpenStack seront installés sur la même machine.\\ | + | * Tous les services OpenStack seront installés sur la même machine ; |
- | La configuration abordée suppose l'utilisation de 2 interfaces réseau\\ | + | * La configuration abordée considère l’utilisation de 2 interfaces réseau. |
- | Toutes les éditions de fichier, sans precision contraire, sont faites avec les droits de root(sudo). Donc avant de commencer,choisissez votre méthode d'édition : [[:tutoriel:comment_modifier_un_fichier|Modifier un fichier]] | + | |
+ | ===== Préparation du système ===== | ||
- | ===== Préparation du système ===== | + | ==== Réseau ==== |
- | + | ||
- | === Réseau === | + | |
- | <note important>l'utilisation d'une interface wifi pour les bridges peut se réveler très complexe voire impossible. Préferez une interface virtuelle</note> | + | |
- | [[:tutoriel:comment_modifier_un_fichier|Modifiez votre fichier]] **/etc/network/interfaces** comme ci-dessous en adaptant a votre configuration.\\ | + | |
- | <code> | + | <note important>l'utilisation d'une interface wifi pour les bridges peut se révéler très complexe voire impossible. Préférez une interface virtuelle</note> |
+ | [[:tutoriel:comment_modifier_un_fichier|Modifiez avec les droits d'administration]] votre fichier **/etc/network/interfaces** comme ci-dessous en adaptant a votre configuration. | ||
+ | |||
+ | <file> | ||
auto lo | auto lo | ||
iface lo inet loopback | iface lo inet loopback | ||
Ligne 43: | Ligne 47: | ||
auto br0 | auto br0 | ||
- | iface inet br0 static | + | iface br0 inet static |
bridge_ports eth0 | bridge_ports eth0 | ||
address 192.168.1.250 | address 192.168.1.250 | ||
Ligne 51: | Ligne 55: | ||
auto br1 | auto br1 | ||
- | iface inet br1 manual | + | iface br1 inet manual |
bridge_ports eth1 | bridge_ports eth1 | ||
- | </code> | + | </file> |
- | [[:tutoriel:comment_modifier_un_fichier|Modifiez votre fichier]] **/etc/resolv.conf** comme ci-dessous et ajoutez vos DNS habituels.\\ | + | [[:tutoriel:comment_modifier_un_fichier|Modifiez avec les droits d'administration]] votre fichier **/etc/resolv.conf** comme ci-dessous et ajoutez vos [[wpfr>Domain_Name_System|DNS]] habituels.\\ |
Les DNS ci dessous sont ceux de Google | Les DNS ci dessous sont ceux de Google | ||
- | <code> | + | <file> |
nameserver 8.8.8.8 | nameserver 8.8.8.8 | ||
nameserver 8.8.4.4 | nameserver 8.8.4.4 | ||
+ | </file> | ||
+ | |||
+ | Relancez les cartes réseau pour que les modifications soient prises en compte.\\ | ||
+ | <code> | ||
+ | for a in `ifconfig | awk '/Link/ { if ($1 != "lo") print $1 }'`; do sudo ifdown $a ; done | ||
+ | sudo ifup -e lo -av | ||
</code> | </code> | ||
- | Redémarrez pour que les modifications réseau soit prisent en compte.\\ | + | <note tip> Assurez-vous d'avoir décommenté l'option permettant le forward des paquets en IPV4 dans le fichier /etc/sysctl.conf |
+ | : | ||
+ | <file> | ||
+ | net.ipv4.ip_forward=1 | ||
+ | </file> | ||
+ | puis lancez la commande : | ||
+ | <code>sysctl -p</code> | ||
+ | </note> | ||
+ | ==== Serveur NTP ==== | ||
- | === Serveur NTP === | + | Le serveur [[:ntp|NTP]] étant nécessaire à la bonne synchronisation du cloud, [[:tutoriel:comment_installer_un_paquet|installez le paquet]] **[[apt>ntp|ntp]]**.\\ |
+ | Ensuite, [[:tutoriel:comment_modifier_un_fichier|ouvrez avec les droits d'administration]] le fichier **/etc/ntp.conf** et ajoutez les lignes | ||
- | Le serveur [[ntp|NTP]] est nécéssaires a la bonne synchronisation du cloud.\\ | + | <file> |
- | Installez le paquet **[[apt>ntp|ntp]]**.\\ | + | server ntp.ubuntu.com iburst |
- | [[:tutoriel:comment_modifier_un_fichier|Ouvrez le fichier]] **/etc/ntp.conf** et ajoutez les lignes | + | server 127.127.1.0 |
- | + | ||
- | <code> | + | |
- | serveur ntp.ubuntu.com iburst | + | |
- | serveur 127.127.1.0 | + | |
fudge 127.127.1.0 stratum 10 | fudge 127.127.1.0 stratum 10 | ||
- | </code> | + | </file> |
- | redémarrez le service | + | redémarrez le service |
<code> | <code> | ||
sudo service ntp restart | sudo service ntp restart | ||
</code> | </code> | ||
- | === LVM === | + | ==== LVM ==== |
- | Les volumes [[lvm|LVM]] serviront de disques durs supplémentaires pour les serveurs virtuels.\\ | + | Les volumes [[:lvm|LVM]] serviront de disques durs supplémentaires pour les serveurs virtuels. |
- | Installez les paquets **[[apt>tgt|tgt]] [[apt>open-iscsi|open-iscsi]] [[apt>open-iscsi-utils|open-iscsi-utils]] [[apt>lvm2|lvm2]]** \\ | + | |
- | Cette commande suppose que vous ayez un disque dur /dev/sdc vide sans partition. Adaptez en fonction de votre configuration.Si vous utilisez [[gparted|Gparted]], créez une partition non formatée.\\ | + | [[:tutoriel:comment_installer_un_paquet|Installez les paquets]] **[[apt>tgt,open-iscsi,open-iscsi-utils,lvm2]]** \\ |
- | Créez une partion de 100Giga sur /dev/sdc | + | |
+ | Les commandes qui suivent supposent que vous avez un disque dur **/dev/sdc** vide sans [[:partitions|partition]]. Adaptez les commandes en fonction de votre configuration.\\ | ||
+ | Créez une [[:partitions|partition]] non formatée de 100Gigas sur **/dev/sdc** en adaptant à votre configuration: | ||
<code> | <code> | ||
sudo fdisk /dev/sdc | sudo fdisk /dev/sdc | ||
n p 1 <return> +100G w | n p 1 <return> +100G w | ||
</code> | </code> | ||
- | Vous avez maintenant une partition primaire vide de 100 Gigas /dev/sdc1,créez maintenant le volume LVM. Attention, le nom **nova-volumes** doit être respecté.\\ | + | Vous avez maintenant une partition primaire vide de 100 Gigas **/dev/sdc1**.\\ |
+ | Créez maintenant le volume LVM. Attention, le nom **nova-volumes** doit être respecté: | ||
<code> | <code> | ||
sudo pvcreate /dev/sdc1 | sudo pvcreate /dev/sdc1 | ||
Ligne 98: | Ligne 116: | ||
</code> | </code> | ||
- | === RabbitMQ === | + | ==== RabbitMQ ==== |
- | RabbitMQ est un broker de messages se basant sur le standard AMQP afin d'échanger avec différents clients.\\ | + | RabbitMQ est un courtier de messages se basant sur le standard [[wpfr>Advanced_Message_Queuing_Protocol|AMQP]] afin d'échanger avec différents clients.\\ |
- | C'est le service qui permet aux composants OpenStack de communiquer entre eux(pour faire simple).\\ | + | Pour faire simple: c'est le service qui permet aux composants OpenStack de communiquer entre eux. |
- | Installez les paquets **[[apt>rabbitmq-server|rabbitmq-server]] [[apt>memcached|memcached]] [[apt>python-memcache|python-memcache]]** | + | [[:tutoriel:comment_installer_un_paquet|Installez les paquets]] **[[apt>rabbitmq-server,memcached,python-memcache]]** |
- | === Mysql === | + | ==== Mysql ==== |
- | Chaque composant possède sa base de données [[mysql|MySQL]], contenant toutes les données modifiables a chaud(ID des images disques, des instances virtuelles, réseaux, identités...). Les données de configuration fixes sont stockées dans des fichiers texte.\\ | + | Chaque composant possède sa base de données [[:mysql|MySQL]], contenant toutes les données modifiables à chaud (ID des images disques, des instances virtuelles, réseaux, identités...). Les données de configuration fixes sont stockées dans des fichiers texte.\\ |
- | Il est possible d'utiliser un autre [[sgbd|SGBD]], MySQL étant recommandé dans la documentation OpenStack.\\ | + | <note tip>Il est possible d'utiliser un autre [[:sgbd|SGBD]], MySQL étant recommandé dans la documentation OpenStack.</note> |
- | Modifiez la configuration de Mysql.\\ | + | |
- | [[:tutoriel:comment_modifier_un_fichier|modifiez le fichier]] **/etc/mysql/my.cnf** pour indiquer a MySQL que le serveur doit écouter sur toutes les adresses, pas seulement sur la boucle locale. | + | Pour indiquer a MySQL que le serveur doit écouter sur toutes les adresses et pas seulement sur la boucle locale, modifiez sa configuration en [[:tutoriel:comment_modifier_un_fichier|ouvrant avec les droits d'administration]] le fichier **/etc/mysql/my.cnf** pour remplacer: |
- | Remplacez | + | <file> |
- | <code> | + | |
bind-address = 127.0.0.1 | bind-address = 127.0.0.1 | ||
- | </code> | + | </file> |
par | par | ||
- | <code> | + | <file> |
bind-address = 0.0.0.0 | bind-address = 0.0.0.0 | ||
- | </code> | + | </file> |
et redémarrez MySQL | et redémarrez MySQL | ||
<code> | <code> | ||
Ligne 123: | Ligne 140: | ||
===== Keystone ===== | ===== Keystone ===== | ||
- | ===Installation du module de gestion d'identités Keystone=== | ||
- | Le composant Keystone est chargé de la gestion des utilisateurs et des services.\\ | ||
- | ==Gestion des utilisateurs. Users, roles & tenants== | ||
- | La gestion des utilisateurs s'articule autour de 3 objets\\ | ||
- | l'objet User représentant l'utilisateur final.\\ | ||
- | L'objet Tenant qui l'on peut représenter par un projet, une organisation au sein duquel les instances seront regroupées et administrées par les utilisateurs.\\ | ||
- | L'objet Role qui définit le rôle de l'utilisateur sur un Tenant. Un utilisateur peut avoir un ou plusieurs rôles sur différents Tenants.\\ | ||
- | ==Gestion des services et points d'accès== | + | Le composant Keystone est chargé de la gestion des utilisateurs et des services. |
- | La gestion des différents services, comme Glance pour les images ou Swift pour le stockage.\\ | + | |
- | La définition des points d'accès a ces différents services, les url et ports pour y accéder\\ | + | === Gestion des utilisateurs === |
+ | La gestion des utilisateurs s’articule autour de 3 objets : | ||
+ | * l’objet //[[#Création_des_utilisateurs|User]]// représentant l’utilisateur final ; | ||
+ | * l’objet //[[#Création des Tenants|Tenant]]// que l’on peut représenter par un projet ou une organisation au sein desquels les instances seront regroupées et administrées par les utilisateurs ; | ||
+ | * l’objet //[[#Création des rôles|Role]]// qui définit le rôle de l’utilisateur sur un //Tenant//. Un utilisateur peut être associé à un ou plusieurs rôles sur différents Tenants. | ||
+ | |||
+ | === Gestion des services et points d'accès === | ||
+ | La gestion des différents services s’applique notamment aux : | ||
+ | * composant //Glance// pour les images, | ||
+ | * composant //Swift// pour le stockage objet. | ||
- | ===Préparation de la base de données Mysql=== | + | La définition des points d’accès à ces différents services porte en l’occurrence sur : |
- | Commençons par créer la base MySQL. | + | * des adresses de type URL, |
+ | * des ports réseau. | ||
+ | |||
+ | ==== Préparation de la base de données Mysql ==== | ||
+ | Commencez par créer la base MySQL.\\ | ||
+ | La commande suivante crée un utilisateur et sa base de données nommés "keystone". Changez SQLPASSWD par un mot de passe de votre choix. | ||
<code> | <code> | ||
mysql -u root -p <<EOF | mysql -u root -p <<EOF | ||
CREATE DATABASE keystone; | CREATE DATABASE keystone; | ||
- | GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'qhKz6YYg'; | + | GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'SQLPASSWD'; |
FLUSH PRIVILEGES; | FLUSH PRIVILEGES; | ||
EOF | EOF | ||
</code> | </code> | ||
- | ===Installation=== | ||
- | Installez les paquets **[[apt>keystone|keystone]] [[apt>python-keystone|python-keystone]] [[apt>python-keystoneclient|python-keystoneclient]]**\\ | + | ==== Installation ==== |
- | ===Configuration=== | + | [[:tutoriel:comment_installer_un_paquet|Installez les paquets]] **[[apt>keystone,python-keystone,python-keystoneclient,python-mysqldb]]**. |
- | [[:tutoriel:comment_modifier_un_fichier|Ouvrez le fichier]] **/etc/keystone/keystone.conf** dans un éditeur et modifier les sections suivantes\\ | + | Puis supprimez la base de données SQLite : |
+ | <code> | ||
+ | rm /var/lib/keystone/keystone.db | ||
+ | </code> | ||
+ | ==== Configuration ==== | ||
- | <code> | + | [[:tutoriel:comment_modifier_un_fichier|Ouvrez avec les droits d'administration]] le fichier **/etc/keystone/keystone.conf** pour modifier les sections suivantes : |
+ | |||
+ | Remplacez ADMPASSWD par un mot de passe de votre choix et SQLPASSWD par le mot de passe MySQL précédemment défini. | ||
+ | <file> | ||
[DEFAULT] | [DEFAULT] | ||
- | bind_host = 0.0.0.0 | + | bind_host = 0.0.0.0 |
- | public_port = 5000 | + | public_port = 5000 |
- | admin_port = 35357 | + | admin_port = 35357 |
- | admin_token = 2BSpUaPV | + | # Mot de passe d'administration |
- | compute_port = 8774 | + | admin_token = ADMPASSWD |
- | verbose = True | + | compute_port = 8774 |
- | debug = True | + | verbose = True |
- | log_config = /etc/keystone/logging.conf | + | debug = True |
+ | log_config = /etc/keystone/logging.conf | ||
[sql] | [sql] | ||
- | connection = mysql://keystone:qhKz6YYg@192.168.1.250:3306/keystone | + | connection = mysql://keystone:SQLPASSWD@192.168.1.250:3306/keystone |
idle_timeout = 200 | idle_timeout = 200 | ||
- | </code> | + | </file> |
- | + | ||
- | Redémarrez keystone | + | |
+ | Redémarrez le service //keystone// : | ||
<code> | <code> | ||
sudo service keystone restart | sudo service keystone restart | ||
</code> | </code> | ||
- | et synchronisez la base de données | + | Synchronisez la base de données : |
<code> | <code> | ||
sudo keystone-manage db_sync | sudo keystone-manage db_sync | ||
</code> | </code> | ||
- | ===Création des utilisateurs=== | + | et donnez les droits en lecture / écriture à l’utilisateur / au groupe //keystone// : |
- | Chaque commande ci-dessous contient l'authentification définie dans le fichier keystone.conf et utilisée par le client python sous la forme --token admin_token (jeton d'authentification de l'admin) --endpoint url_du_service_keystone (adresse du serveur:port/directory/).\\ | + | <code> |
- | Il est bien sur possible d'envoyer des commandes à partir de n'importe quel autre ordinateur ou python-keystoneclient est installé.\\ | + | chown keystone:keystone /var/lib/keystone/keystone.db |
- | Création du compte admin | + | </code> |
+ | ==== Création des utilisateurs ==== | ||
+ | Chaque commande ci-dessous contient l’authentification définie dans le fichier **keystone.conf** et utilisée par le client Python sous la forme suivante : | ||
+ | <code> | ||
+ | --token admin_token # mot de passe d'administration | ||
+ | --endpoint url_du_service_keystone # adresse du serveur:port/dossier/ | ||
+ | </code> | ||
+ | |||
+ | === Création du compte administrateur === | ||
+ | Commande à exécuter après adaptation : | ||
+ | <code> | ||
+ | keystone --token ADMPASSWD --endpoint http://192.168.1.250:35357/v2.0/ user-create --name=admin --pass=ADMPASSWD --email=admin@example.com | ||
+ | </code> | ||
+ | Réponse obtenue de manière approximative : | ||
<code> | <code> | ||
- | keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ user-create --name=admin --pass=2BSpUaPV --email=admin@example.com | ||
+----------+-------------------------------------------------------------------------------------------------------------------------+ | +----------+-------------------------------------------------------------------------------------------------------------------------+ | ||
| Property | Value | | | Property | Value | | ||
Ligne 199: | Ligne 240: | ||
+----------+-------------------------------------------------------------------------------------------------------------------------+ | +----------+-------------------------------------------------------------------------------------------------------------------------+ | ||
</code> | </code> | ||
- | Le compte interne du service Glance | + | |
+ | === Création du compte interne du service Glance == | ||
+ | Commande à exécuter après adaptation : | ||
+ | <code> | ||
+ | keystone --token ADMPASSWD --endpoint http://192.168.1.250:35357/v2.0/ user-create --name=glance --pass=ADMPASSWD --email=glance@example.com | ||
+ | </code> | ||
+ | Réponse obtenue de manière approximative : | ||
<code> | <code> | ||
- | keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ user-create --name=glance --pass=2BSpUaPV --email=glance@example.com | ||
+----------+-------------------------------------------------------------------------------------------------------------------------+ | +----------+-------------------------------------------------------------------------------------------------------------------------+ | ||
| Property | Value | | | Property | Value | | ||
Ligne 213: | Ligne 259: | ||
+----------+-------------------------------------------------------------------------------------------------------------------------+ | +----------+-------------------------------------------------------------------------------------------------------------------------+ | ||
</code> | </code> | ||
- | Le compte interne du service Nova | + | |
+ | === Création du compte interne du service Nova === | ||
+ | Commande à exécuter après adaptation : | ||
+ | <code> | ||
+ | keystone --token ADMPASSWD --endpoint http://192.168.1.250:35357/v2.0/ user-create --name=nova --pass=ADMPASSWD --email=nova@example.com | ||
+ | </code> | ||
+ | Réponse obtenue de manière approximative : | ||
<code> | <code> | ||
- | keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ user-create --name=nova --pass=2BSpUaPV --email=nova@example.com | ||
+----------+-------------------------------------------------------------------------------------------------------------------------+ | +----------+-------------------------------------------------------------------------------------------------------------------------+ | ||
| Property | Value | | | Property | Value | | ||
Ligne 227: | Ligne 278: | ||
+----------+-------------------------------------------------------------------------------------------------------------------------+ | +----------+-------------------------------------------------------------------------------------------------------------------------+ | ||
</code> | </code> | ||
- | ===Création des rôles=== | + | |
- | Pour les rôles utilisateurs vous avez le choix entre :\\ | + | ==== Création des rôles ==== |
- | -admin, donnant le droit de modifier la configuration des services(ex. allouer une plage d'adresse IP, un quota d'espace disque pour un projet etc...)\\ | + | |
- | -Member, permet de gérer le contenu du projet(création d'instances de machines, ajout d'un disque virtuel a l'une d'elles etc...)\\ | + | Chaque utilisateur peut être associé à un des deux rôles suivants : |
- | Les rôles KeystoneAdmin et KeystoneServiceAdmin sont des rôles internes nécéssaires.\\ | + | - //[[#Role_admin|admin]]// : ce rôle donne le droit de modifier la configuration des services. Exemples : allouer une plage d’adresses IP, définir un quota d’espace disque pour un projet, etc. |
+ | - //[[#Role_Membre|Member]]// : ce rôle permet de gérer le contenu d’un projet. Exemples : créer une instance de machine, ajouter un disque virtuel à une machine, etc. | ||
+ | |||
+ | Les rôles //[[#Role_KeystoneAdmin|KeystoneAdmin]]// et //[[#Role_KeystoneServiceAdmin|KeystoneServiceAdmin]]// sont des rôles internes et __nécessaires__. | ||
+ | |||
+ | Par la suite, les commandes proposées intègrent l’authentification et l’accès au service sur le même modèle que pour la création des utilisateurs supra. | ||
+ | |||
+ | === Rôle admin === | ||
+ | Commande à exécuter de manière adaptée : | ||
+ | <code> | ||
+ | keystone --token ADMPASSWD --endpoint http://192.168.1.250:35357/v2.0/ role-create --name=admin | ||
+ | </code> | ||
+ | Réponse obtenue de manière approximative : | ||
<code> | <code> | ||
- | keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ role-create --name=admin | ||
+----------+----------------------------------+ | +----------+----------------------------------+ | ||
| Property | Value | | | Property | Value | | ||
Ligne 240: | Ligne 302: | ||
| name | admin | | | name | admin | | ||
+----------+----------------------------------+ | +----------+----------------------------------+ | ||
- | keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ role-create --name=Member | + | </code> |
+ | |||
+ | === Rôle Membre === | ||
+ | Commande à exécuter de manière adaptée : | ||
+ | <code> | ||
+ | keystone --token ADMPASSWD --endpoint http://192.168.1.250:35357/v2.0/ role-create --name=Member | ||
+ | </code> | ||
+ | Réponse obtenue de manière approximative : | ||
+ | <code> | ||
+----------+----------------------------------+ | +----------+----------------------------------+ | ||
| Property | Value | | | Property | Value | | ||
Ligne 247: | Ligne 317: | ||
| name | Member | | | name | Member | | ||
+----------+----------------------------------+ | +----------+----------------------------------+ | ||
- | keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ role-create --name=KeystoneAdmin | + | </code> |
+ | |||
+ | === Rôle KeystoneAdmin === | ||
+ | Commande à exécuter de manière adaptée : | ||
+ | <code> | ||
+ | keystone --token ADMPASSWD --endpoint http://192.168.1.250:35357/v2.0/ role-create --name=KeystoneAdmin | ||
+ | </code> | ||
+ | Réponse obtenue de manière approximative : | ||
+ | <code> | ||
+----------+----------------------------------+ | +----------+----------------------------------+ | ||
| Property | Value | | | Property | Value | | ||
Ligne 254: | Ligne 332: | ||
| name | KeystoneAdmin | | | name | KeystoneAdmin | | ||
+----------+----------------------------------+ | +----------+----------------------------------+ | ||
- | keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ role-create --name=KeystoneServiceAdmin | + | </code> |
+ | |||
+ | === Rôle KeystoneServiceAdmin === | ||
+ | Commande à exécuter de manière adaptée : | ||
+ | <code> | ||
+ | keystone --token ADMPASSWD --endpoint http://192.168.1.250:35357/v2.0/ role-create --name=KeystoneServiceAdmin | ||
+ | </code> | ||
+ | Réponse obtenue de manière approximative : | ||
+ | <code> | ||
+----------+----------------------------------+ | +----------+----------------------------------+ | ||
| Property | Value | | | Property | Value | | ||
Ligne 262: | Ligne 348: | ||
+----------+----------------------------------+ | +----------+----------------------------------+ | ||
</code> | </code> | ||
- | ===Création des "tenants"=== | + | |
- | En premier le "tenant" admin qui permet a ses membres d'administrer les services.\\ | + | ==== Création des Tenants ==== |
- | Ensuite le "tenant" interne des services.\\ | + | Par la suite, les commandes proposées intègrent l’authentification et l’accès au service sur le même modèle que pour la création des utilisateurs supra. |
+ | |||
+ | === Tenant admin === | ||
+ | Le //Tenant admin// permet à ses membres d’administrer les services. | ||
+ | |||
+ | Commande à exécuter de manière adaptée : | ||
+ | <code> | ||
+ | keystone --token ADMPASSWD --endpoint http://192.168.1.250:35357/v2.0/ tenant-create --name=admin | ||
+ | </code> | ||
+ | Réponse obtenue de manière approximative : | ||
<code> | <code> | ||
- | keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ tenant-create --name=admin | ||
+-------------+----------------------------------+ | +-------------+----------------------------------+ | ||
| Property | Value | | | Property | Value | | ||
Ligne 275: | Ligne 369: | ||
| name | admin | | | name | admin | | ||
+-------------+----------------------------------+ | +-------------+----------------------------------+ | ||
- | keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ tenant-create --name=service | + | </code> |
+ | |||
+ | === Tenant service === | ||
+ | Le //Tenant service// permet à ses membres d’accéder au service. | ||
+ | |||
+ | Commande à exécuter de manière adaptée : | ||
+ | <code> | ||
+ | keystone --token ADMPASSWD --endpoint http://192.168.1.250:35357/v2.0/ tenant-create --name=service | ||
+ | </code> | ||
+ | Réponse obtenue de manière approximative : | ||
+ | <code> | ||
+-------------+----------------------------------+ | +-------------+----------------------------------+ | ||
| Property | Value | | | Property | Value | | ||
Ligne 285: | Ligne 389: | ||
+-------------+----------------------------------+ | +-------------+----------------------------------+ | ||
</code> | </code> | ||
- | ===Définition des rôles=== | + | |
- | Il faut pour cela utiliser les ID affichés lors de la création des users, roles & tenants.\\ | + | ==== Définition des rôles ==== |
- | L'utilisateur admin a un rôle admin sur le "tenant" admin.\\ | + | |
+ | Il faut pour cela utiliser les ID affichés lors de la création des //[[#Création_des_utilisateurs|Users]]((utilisateurs)), [[#Création_des_rôles|Roles]]((rôles))// et //[[# Création_des_Tenants|Tenants]]//.\\ | ||
+ | L'//User// "admin" a un //Role// admin sur le //Tenant// "admin".\\ | ||
<code> | <code> | ||
- | keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ user-role-add --user c97c87b3ed894401975dd6d757b40330 --role 3d945f41e08e4e2db1584fdb8f05d333 --tenant_id 0f71e86d30e247d3b1216fe5f2f3aa50 | + | keystone --token ADMPASSWD --endpoint http://192.168.1.250:35357/v2.0/ user-role-add --user-id c97c87b3ed894401975dd6d757b40330 --role-id 3d945f41e08e4e2db1584fdb8f05d333 --tenant_id 0f71e86d30e247d3b1216fe5f2f3aa50 |
</code> | </code> | ||
- | Comme ce n'est pas pratique de recopier les IDs, on vas s'éviter les erreurs de frappe avec awk\\ | + | Comme ce n'est pas pratique de recopier les IDs, les erreurs de frappe seront évitées grâce à l'outil //awk//. Il s'agira de définir les rôles ainsi: |
- | L'utilisateur admin a un rôle KeystoneAdmin sur le "tenant" admin.\\ | + | * L'//User// "admin" a un //Role// "KeystoneAdmin" sur le //Tenant// "admin". |
- | L'utilisateur admin a un rôle KeystoneServiceAdmin sur le "tenant" admin.\\ | + | * L'//User// "admin" a un //Role// "KeystoneServiceAdmin" sur le //Tenant// "admin". |
- | L'utilisateur glance a un rôle admin sur le "tenant" service.\\ | + | * L'//User// "glance" a un //Role// "admin" sur le //Tenant// "service". |
- | L'utilisateur nova a un rôle admin sur le "tenant" service.\\ | + | * L'//User// "nova" a un //Role// "admin" sur le //Tenant// "service". |
Voici les commandes correspondantes : | Voici les commandes correspondantes : | ||
<code> | <code> | ||
- | keystone user-role-add --user `keystone user-list | awk '/ admin / { print $2 }'` --role `keystone role-list | awk '/ KeystoneAdmin / { print $2 }'` --tenant_id `keystone tenant-list | awk '/ admin / { print $2 }'` | + | keystone user-role-add --user-id `keystone user-list | awk '/ admin / { print $2 }'` --role-id `keystone role-list | awk '/ KeystoneAdmin / { print $2 }'` --tenant_id `keystone tenant-list | awk '/ admin / { print $2 }'` |
- | keystone user-role-add --user `keystone user-list | awk '/ admin / { print $2 }'` --role `keystone role-list | awk '/ KeystoneServiceAdmin / { print $2 }'` --tenant_id `keystone tenant-list | awk '/ admin / { print $2 }'` | + | keystone user-role-add --user-id `keystone user-list | awk '/ admin / { print $2 }'` --role-id `keystone role-list | awk '/ KeystoneServiceAdmin / { print $2 }'` --tenant_id `keystone tenant-list | awk '/ admin / { print $2 }'` |
- | keystone user-role-add --user `keystone user-list | awk '/ glance / { print $2 }'` --role `keystone role-list | awk '/ admin / { print $2 }'` --tenant_id `keystone tenant-list | awk '/ service / { print $2 }'` | + | keystone user-role-add --user-id `keystone user-list | awk '/ glance / { print $2 }'` --role-id `keystone role-list | awk '/ admin / { print $2 }'` --tenant_id `keystone tenant-list | awk '/ service / { print $2 }'` |
- | keystone user-role-add --user `keystone user-list | awk '/ nova / { print $2 }'` --role `keystone role-list | awk '/ admin / { print $2 }'` --tenant_id `keystone tenant-list | awk '/ service / { print $2 }'` | + | keystone user-role-add --user-id `keystone user-list | awk '/ nova / { print $2 }'` --role-id `keystone role-list | awk '/ admin / { print $2 }'` --tenant_id `keystone tenant-list | awk '/ service / { print $2 }'` |
</code> | </code> | ||
- | ===Création d'un utilisateur supplémentaire=== | + | |
- | Création d'un compte utilisateur, d'un projet supplémentaire et définition du role avec la variable d'environnement $USER (remplacer par ce que vous voulez, c'est juste un exemple) | + | ==== Création d'un utilisateur supplémentaire ==== |
- | Le rôle "Member" est suffisant. | + | Il s'agira dans l'exemple qui suit de la création d'un compte utilisateur, d'un projet supplémentaire et définition du role avec la variable d'environnement $USER (remplacer par ce que vous voulez, c'est juste un exemple)\\ |
+ | Le rôle "Member" est suffisant. Remplacez USRPASSWD par un mot de passe de votre choix. | ||
+ | L'User $USER (xavier ici) a un Role "Member" sur le Tenant $USER (xavier ici). | ||
+ | |||
+ | === User === | ||
+ | <code> | ||
+ | keystone --token ADMPASSWD --endpoint http://192.168.1.250:35357/v2.0/ user-create --name=$USER --pass=USRPASSWD --email=$USER@example.com | ||
+ | </code> | ||
<code> | <code> | ||
- | keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ user-create --name=$USER --pass=STRONGPWD --email=$USER@example.com | ||
+----------+-------------------------------------------------------------------------------------------------------------------------+ | +----------+-------------------------------------------------------------------------------------------------------------------------+ | ||
| Property | Value | | | Property | Value | | ||
Ligne 319: | Ligne 431: | ||
| tenantId | None | | | tenantId | None | | ||
+----------+-------------------------------------------------------------------------------------------------------------------------+ | +----------+-------------------------------------------------------------------------------------------------------------------------+ | ||
- | keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ tenant-create --name=$USER | + | </code> |
+ | === Tenant === | ||
+ | <code> | ||
+ | keystone --token ADMPASSWD --endpoint http://192.168.1.250:35357/v2.0/ tenant-create --name=$USER | ||
+ | </code> | ||
+ | <code> | ||
+-------------+----------------------------------+ | +-------------+----------------------------------+ | ||
| Property | Value | | | Property | Value | | ||
Ligne 328: | Ligne 445: | ||
| name | xavier | | | name | xavier | | ||
+-------------+----------------------------------+ | +-------------+----------------------------------+ | ||
- | keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ user-role-add --user 13247a59ad844458ad36c0bd06451376 --role 84697b61736c439288900904bdf4a48d --tenant_id c6f05a03b4aa482c91b61a2230356618 | ||
</code> | </code> | ||
- | ===Création des services et leurs points d'accès=== | + | === Rôle === |
+ | <code> | ||
+ | keystone --token ADMPASSWD --endpoint http://192.168.1.250:35357/v2.0/ user-role-add --user-id 13247a59ad844458ad36c0bd06451376 --role-id 84697b61736c439288900904bdf4a48d --tenant_id c6f05a03b4aa482c91b61a2230356618 | ||
+ | </code> | ||
+ | |||
+ | |||
+ | |||
+ | ==== Création des services et leurs points d'accès ==== | ||
- | En premier le service Keystone | + | === Le service Keystone === |
+ | <code> | ||
+ | keystone --token ADMPASSWD --endpoint http://192.168.1.250:35357/v2.0/ service-create --name=keystone --type=identity --description='Keystone Identity Service' | ||
+ | </code> | ||
<code> | <code> | ||
- | keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ service-create --name=keystone --type=identity --description='Keystone Identity Service' | ||
+-------------+----------------------------------+ | +-------------+----------------------------------+ | ||
| Property | Value | | | Property | Value | | ||
Ligne 345: | Ligne 470: | ||
+-------------+----------------------------------+ | +-------------+----------------------------------+ | ||
</code> | </code> | ||
- | Le point d'accès correspondant | + | === Le point d'accès Keystone === |
+ | <code> | ||
+ | keystone --token ADMPASSWD --endpoint http://192.168.1.250:35357/v2.0/ endpoint-create --region RegionOne --service_id=41905e02540d48228166c6d06ddcd9f0 --publicurl=http://192.168.1.250:5000/v2.0 --internalurl=http://192.168.1.250:5000/v2.0 --adminurl=http://192.168.1.250:35357/v2.0 | ||
+ | </code> | ||
<code> | <code> | ||
- | keystone --token 2BSpUaPV --endpoint http://192.168.1.250:35357/v2.0/ endpoint-create --region RegionOne --service_id=41905e02540d48228166c6d06ddcd9f0 --publicurl=http://192.168.1.250:5000/v2.0 --internalurl=http://192.168.1.250:5000/v2.0 --adminurl=http://192.168.1.250:35357/v2.0 | ||
+-------------+----------------------------------+ | +-------------+----------------------------------+ | ||
| Property | Value | | | Property | Value | | ||
+-------------+----------------------------------+ | +-------------+----------------------------------+ | ||
- | | adminurl | http://192.168.1.250:35357/v2.0 | | + | | adminurl | http://192.168.2.250:35357/v2.0 | |
| id | f1c517d5754a493fa67fc21b3f4264c4 | | | id | f1c517d5754a493fa67fc21b3f4264c4 | | ||
- | | internalurl | http://192.168.1.250:5000/v2.0 | | + | | internalurl | http://192.168.2.250:5000/v2.0 | |
- | | publicurl | http://192.168.1.250:5000/v2.0 | | + | | publicurl | http://192.168.2.250:5000/v2.0 | |
| region | RegionOne | | | region | RegionOne | | ||
| service_id | 41905e02540d48228166c6d06ddcd9f0 | | | service_id | 41905e02540d48228166c6d06ddcd9f0 | | ||
+-------------+----------------------------------+ | +-------------+----------------------------------+ | ||
</code> | </code> | ||
- | Les services et points d'accès des autes services seront ajoutés après l'installation du composant bien qu'il soit possible de les définir dès maintenant.\\ | ||
- | ===Utilisation=== | + | Les services et points d'accès des autres services seront ajoutés après l'installation du composant bien qu'il soit possible de les définir dès maintenant. |
- | Il y plusieurs façon possible de s'identifier en lançant une commande keystone.\\ | + | ==== Utilisation ==== |
- | La méthode d'identification avec le token de l'administrateur avec les arguments, utilisable dès que le fichier de configuration de Keystone est renseigné\\ | + | Il y a plusieurs façons possibles de s'identifier en lançant une commande keystone. |
+ | * La méthode d'identification utilisée précédemment avec le mot de passe d'administration (variable //admin_token// définie dans le fichier **keystone.conf**) avec les arguments ''%%--%%endpoint'' et ''%%--%%token'' | ||
<code> | <code> | ||
- | keystone --endpoint http://localhost:35357/v2.0 --token 2BSpUaPV user-list | + | keystone --endpoint http://localhost:35357/v2.0 --token ADMPASSWD user-list |
</code> | </code> | ||
- | + | * La méthode user/password avec les arguments ''%%--%%username'', ''%%--%%tenant_name'', ''%%--%%password'', après définition des utilisateurs, rôles et projets, et l'argument ''%%--%%auth_url''. | |
- | la méthode user/password avec les arguments, après définition des utilisateurs, rôles et projets. | + | |
<code> | <code> | ||
- | keystone --username admin --password 2BSpUaPV --tenant_name admin --auth_url http://localhost:5000/v2.0 user-list | + | keystone --username admin --password ADMPASSWD --tenant_name admin --auth_url http://localhost:5000/v2.0 user-list |
</code> | </code> | ||
- | Pour les deux méthodes, il est possible d'utiliser des variables d'environnement pour éviter de ressaisir tous les arguments a chaque commande.\\ | + | Pour les deux méthodes, il est possible d'utiliser des variables d'environnement pour éviter de ressaisir tous les arguments à chaque commande. |
- | 1ère méthode | + | __1ère méthode__: |
<code> | <code> | ||
export SERVICE_ENDPOINT=http://localhost:5000/v2.0/ | export SERVICE_ENDPOINT=http://localhost:5000/v2.0/ | ||
- | export SERVICE_TOKEN=2BSpUaPV | + | export SERVICE_TOKEN=ADMPASSWD |
keystone user-list | keystone user-list | ||
</code> | </code> | ||
- | 2ème méthode | + | __2ème méthode__: |
<code> | <code> | ||
export OS_TENANT_NAME=admin | export OS_TENANT_NAME=admin | ||
export OS_USERNAME=admin | export OS_USERNAME=admin | ||
- | export OS_PASSWORD=2BSpUaPV | + | export OS_PASSWORD=ADMPASSWD |
export OS_AUTH_URL="http://localhost:5000/v2.0/" | export OS_AUTH_URL="http://localhost:5000/v2.0/" | ||
keystone user-list | keystone user-list | ||
</code> | </code> | ||
- | Pour éviter de refaire un export des variables a chaque ouverture de terminal, vous pouvez les exporter automatiquement.\\ | + | Pour éviter de refaire un export des variables à chaque ouverture de terminal, vous pouvez les exporter automatiquement.\\ |
- | Il suffit de créer un fichier .novarc contenant les lignes suivantes a la racine de votre dossier personnel | + | Il suffit de [[:tutoriel:comment_modifier_un_fichier|créer]] un fichier **.novarc** dans votre //Dossier Personnel// contenant les lignes suivantes |
- | <code> | + | <file> |
export OS_TENANT_NAME=admin | export OS_TENANT_NAME=admin | ||
export OS_USERNAME=admin | export OS_USERNAME=admin | ||
- | export OS_PASSWORD=2BSpUaPV | + | export OS_PASSWORD=ADMPASSWD |
export OS_AUTH_URL="http://192.168.1.250:5000/v2.0/" | export OS_AUTH_URL="http://192.168.1.250:5000/v2.0/" | ||
- | </code> | + | </file> |
- | Ajoutez ensuite la ligne suivante a la fin de votre fichier .bashrc | + | Ajoutez ensuite la ligne suivante a la fin de votre fichier **.bashrc** |
<code> | <code> | ||
source ~/.novarc | source ~/.novarc | ||
</code> | </code> | ||
- | Les variables seront exportées comme variables d'environnement et vous pourrez utiliser toutes les commandes sous la forme simple sans ressaisir les informations d'authentification.\\ | + | Les variables seront exportées comme variables d'environnement et vous pourrez utiliser toutes les commandes sous la forme simple sans ressaisir les informations d'authentification. |
<code> | <code> | ||
keystone user-list | keystone user-list | ||
+ | </code> | ||
+ | <code> | ||
+----------------------------------+---------+--------------------------+--------+ | +----------------------------------+---------+--------------------------+--------+ | ||
| id | enabled | email | name | | | id | enabled | email | name | | ||
Ligne 417: | Ligne 545: | ||
| c97c87b3ed894401975dd6d757b40330 | True | admin@example.com | admin | | | c97c87b3ed894401975dd6d757b40330 | True | admin@example.com | admin | | ||
+----------------------------------+---------+--------------------------+--------+ | +----------------------------------+---------+--------------------------+--------+ | ||
- | keystone role-list | ||
- | +----------------------------------+----------------------+ | ||
- | | id | name | | ||
- | +----------------------------------+----------------------+ | ||
- | | 3d945f41e08e4e2db1584fdb8f05d333 | admin | | ||
- | | 46590e32dbbe40f29253b5b928b83d1b | KeystoneServiceAdmin | | ||
- | | 84697b61736c439288900904bdf4a48d | Member | | ||
- | | d4d6482b0ec04e0fa24aa8263c182d08 | KeystoneAdmin | | ||
- | +----------------------------------+----------------------+ | ||
- | keystone tenant-list | ||
- | +----------------------------------+---------+---------+ | ||
- | | id | name | enabled | | ||
- | +----------------------------------+---------+---------+ | ||
- | | 0f71e86d30e247d3b1216fe5f2f3aa50 | admin | True | | ||
- | | 1a3515e468f14e0ebb4a4e83447e7bf7 | service | True | | ||
- | | c6f05a03b4aa482c91b61a2230356618 | xavier | True | | ||
- | +----------------------------------+---------+---------+ | ||
</code> | </code> | ||
+ | Les commandes ''keystone role-list'' et '' keystone tenant-list'' affichent respectivement la liste des rôles et tenants. | ||
- | Pour voir la liste des commandes disponibles et les détails utilisez : | + | |
+ | Il est bien sûr possible d'envoyer des commandes à partir de n'importe quel autre ordinateur où le paquet **[[apt>python-keystoneclient|python-keystoneclient]]** est installé.\\ | ||
+ | |||
+ | Pour voir la liste des commandes disponibles et les détails utilisez : | ||
<code> | <code> | ||
keystone help [NOM DE LA COMMANDE] | keystone help [NOM DE LA COMMANDE] | ||
Ligne 444: | Ligne 559: | ||
===== Glance ===== | ===== Glance ===== | ||
La prochaine étape est l'installation du service d'images Glance.\\ | La prochaine étape est l'installation du service d'images Glance.\\ | ||
- | C'est le service chargé de distribuer les images de disque dur système utilisées par les machines virtuelles\\ | + | C'est le service chargé de distribuer les images de disque dur système utilisées par les machines virtuelles. |
- | ===préparation de la base de données Mysql=== | + | ==== Préparation de la base de données Mysql ==== |
+ | La commande suivante crée un utilisateur et sa base de données nommés "glance". Changez SQLPASSWD par un mot de passe de votre choix. | ||
<code> | <code> | ||
mysql -u root -p <<EOF | mysql -u root -p <<EOF | ||
CREATE DATABASE glance; | CREATE DATABASE glance; | ||
- | GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY '4Wh7g9GE'; | + | GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'SQLPASSWD'; |
FLUSH PRIVILEGES; | FLUSH PRIVILEGES; | ||
EOF | EOF | ||
</code> | </code> | ||
- | ===Installation=== | + | ==== Installation ==== |
- | installez les paquets **[[apt>glance|glance]] [[apt>glance-api|glance-api]] [[apt>glance-client|glance-client]] [[apt>glance-common|glance-common]] [[apt>glance-registry|glance-registry]] [[apt>python-glance|python-glance]]**\\ | + | [[:tutoriel:comment_installer_un_paquet|Installez les paquets]] **[[apt>glance,glance-api,glance-client,glance-common,glance-registry,python-glance]]** |
- | ===Configuration=== | + | ==== Configuration ==== |
- | Il faut aussi créer les services et points d'accès correspondants Keystone | + | Il faut aussi créer les services et points d'accès correspondants pour Keystone |
<code> | <code> | ||
keystone service-create --name=glance --type=image --description='Glance Image Service' | keystone service-create --name=glance --type=image --description='Glance Image Service' | ||
+ | </code> | ||
+ | <code> | ||
+-------------+----------------------------------+ | +-------------+----------------------------------+ | ||
| Property | Value | | | Property | Value | | ||
Ligne 473: | Ligne 591: | ||
| type | image | | | type | image | | ||
+-------------+----------------------------------+ | +-------------+----------------------------------+ | ||
+ | </code> | ||
+ | <code> | ||
keystone endpoint-create --region RegionOne --service_id=39bbd3107c4c4153a408a3b6a34ef931 --publicurl=http://192.168.1.250:9292/v1 --internalurl=http://192.168.1.250:9292/v1 --adminurl=http://192.168.1.250:9292/v1 | keystone endpoint-create --region RegionOne --service_id=39bbd3107c4c4153a408a3b6a34ef931 --publicurl=http://192.168.1.250:9292/v1 --internalurl=http://192.168.1.250:9292/v1 --adminurl=http://192.168.1.250:9292/v1 | ||
+ | </code> | ||
+ | <code> | ||
+-------------+----------------------------------+ | +-------------+----------------------------------+ | ||
| Property | Value | | | Property | Value | | ||
Ligne 487: | Ligne 608: | ||
</code> | </code> | ||
+ | Dans les fichiers ci-dessous, SQLPASSWD est le mot de passe MySQL [[#Glance|Glance]], ADMPASSWD le mot de passe du [[#Création_du_compte_interne_du_service_Glance|compte de service Glance]] | ||
- | [[:tutoriel:comment_modifier_un_fichier|Ouvrez le fichier]] **/etc/glance/glance-api-paste.ini** dans un éditeur et allez a la fin. modifiez ces lignes avec les valeurs correctes pour votre installation.\\ | + | [[:tutoriel:comment_modifier_un_fichier|Ouvrez avec les droits d'administration]] le fichier **/etc/glance/glance-api-paste.ini**, allez à la fin pour modifier ces lignes avec les valeurs correspondant à votre installation: |
- | <code> | + | <file> |
admin_tenant_name = service | admin_tenant_name = service | ||
admin_user = glance | admin_user = glance | ||
- | admin_password = 2BSpUaPV | + | admin_password = ADMPASSWD |
- | </code> | + | </file> |
La section [pipeline:glance-api] doit contenir | La section [pipeline:glance-api] doit contenir | ||
- | <code> | + | <file> |
[pipeline:glance-api] | [pipeline:glance-api] | ||
pipeline = versionnegotiation authtoken auth-context apiv1app | pipeline = versionnegotiation authtoken auth-context apiv1app | ||
- | </code> | + | </file> |
- | [[:tutoriel:comment_modifier_un_fichier|Ouvrez le fichier]] **/etc/glance/glance-api.conf**. Ajoutez les lignes suivantes\\ | + | [[:tutoriel:comment_modifier_un_fichier|Ouvrez avec les droits d'administration]] le fichier **/etc/glance/glance-api.conf** pour y ajouter les lignes suivantes: |
- | <code> | + | <file> |
[paste_deploy] | [paste_deploy] | ||
flavor = keystone | flavor = keystone | ||
- | </code> | + | </file> |
- | [[:tutoriel:comment_modifier_un_fichier|Ouvrez le fichier]] **/etc/glance/glance-registry.conf** dans un éditeur. modifiez les lignes suivantes\\ | + | [[:tutoriel:comment_modifier_un_fichier|Ouvrez avec les droits d'administration]] le fichier **/etc/glance/glance-registry.conf** et modifiez la ligne suivante: |
- | <code> | + | <file> |
- | sql_connection = mysql://glance:4Wh7g9GE@192.168.1.250:3306/glance | + | sql_connection = mysql://glance:SQLPASSWD@192.168.1.250:3306/glance |
- | </code> | + | </file> |
- | et ajoutez a la fin | + | et ajoutez à la fin |
- | <code> | + | <file> |
[paste_deploy] | [paste_deploy] | ||
flavor = keystone | flavor = keystone | ||
- | </code> | + | </file> |
- | [[:tutoriel:comment_modifier_un_fichier|Ouvrez le fichier]] **/etc/glance/glance-scrubber.conf**. Ajoutez les lignes suivantes\\ | + | [[:tutoriel:comment_modifier_un_fichier|Ouvrez avec les droits d'administration]] le fichier **/etc/glance/glance-scrubber.conf** pour ajouter les lignes suivantes: |
- | <code> | + | <file> |
- | sql_connection = mysql://glance:4Wh7g9GE@192.168.1.250:3306/glance | + | sql_connection = mysql://glance:SQLPASSWD@192.168.1.250:3306/glance |
sql_idle_timeout = 3600 | sql_idle_timeout = 3600 | ||
- | </code> | + | </file> |
- | [[:tutoriel:comment_modifier_un_fichier|Ouvrez le fichier]] **/etc/glance/glance-registry-paste.ini**.Modifiez les lignes suivantes\\ | + | [[:tutoriel:comment_modifier_un_fichier|Ouvrez avec les droits d'administration]] le fichier **/etc/glance/glance-registry-paste.ini** et modifiez les lignes suivantes: |
- | <code> | + | <file> |
admin_tenant_name = service | admin_tenant_name = service | ||
admin_user = glance | admin_user = glance | ||
- | admin_password = 2BSpUaPV | + | admin_password = ADMPASSWD |
- | </code> | + | </file> |
- | et la section | + | et la section |
- | <code> | + | <file> |
[pipeline:glance-registry] | [pipeline:glance-registry] | ||
pipeline = authtoken auth-context context registryapp | pipeline = authtoken auth-context context registryapp | ||
- | </code> | + | </file> |
Synchronisez maintenant la base de données MySQL | Synchronisez maintenant la base de données MySQL | ||
Ligne 541: | Ligne 663: | ||
sudo glance-manage version_control 0 | sudo glance-manage version_control 0 | ||
sudo glance-manage db_sync | sudo glance-manage db_sync | ||
+ | </code> | ||
+ | |||
+ | Si message d'erreur "CRITICAL glance [-] ValueError: Tables "migrate_version" have non utf8 collation, please make sure all tables are CHARSET=utf8" : | ||
+ | |||
+ | <code> | ||
+ | mysql -u root -p glance | ||
+ | alter table migrate_version convert to character set utf8 collate utf8_unicode_ci; | ||
+ | flush privileges; | ||
+ | quit | ||
</code> | </code> | ||
Ligne 548: | Ligne 679: | ||
</code> | </code> | ||
- | ===Utilisation=== | + | ==== Utilisation ==== |
- | vérifiez maintenant si tous fonctionne correctement, téléchargez une première image pour tester. | + | Vérifiez maintenant si tout fonctionne correctement. Téléchargez une première [[wpfr>Image_disque|image]] pour tester: |
<code> | <code> | ||
Ligne 556: | Ligne 687: | ||
</code> | </code> | ||
- | ajoutez maintenant l'image téléchargée aux images Glance | + | Ajoutez maintenant l'image téléchargée aux images Glance |
<code> | <code> | ||
glance add name="Ubuntu 12.04 cloudimg amd64" is_public=true container_format=ovf disk_format=qcow2 < ubuntu-12.04-server-cloudimg-amd64-disk1.img | glance add name="Ubuntu 12.04 cloudimg amd64" is_public=true container_format=ovf disk_format=qcow2 < ubuntu-12.04-server-cloudimg-amd64-disk1.img | ||
+ | </code> | ||
+ | <code> | ||
Uploading image 'Ubuntu 12.04 cloudimg amd64' | Uploading image 'Ubuntu 12.04 cloudimg amd64' | ||
=====================================================================================================================================================================================================================================[100%] 136.648660M/s, ETA 0h 0m 0s | =====================================================================================================================================================================================================================================[100%] 136.648660M/s, ETA 0h 0m 0s | ||
Added new image with ID: d1b7defa-0c35-4e8c-aef5-0d58c8d80a52 | Added new image with ID: d1b7defa-0c35-4e8c-aef5-0d58c8d80a52 | ||
- | glance index | ||
- | ID Name Disk Format Container Format Size | ||
- | ------------------------------------ ------------------------------ -------------------- -------------------- -------------- | ||
- | d1b7defa-0c35-4e8c-aef5-0d58c8d80a52 Ubuntu 12.04 cloudimg amd64 qcow2 ovf 230490112 | ||
- | glance details | ||
- | ================================================================================ | ||
- | URI: http://192.168.1.250:9292/v1/images/d1b7defa-0c35-4e8c-aef5-0d58c8d80a52 | ||
- | Id: d1b7defa-0c35-4e8c-aef5-0d58c8d80a52 | ||
- | Public: Yes | ||
- | Protected: No | ||
- | Name: Ubuntu 12.04 cloudimg amd64 | ||
- | Status: active | ||
- | Size: 230490112 | ||
- | Disk format: qcow2 | ||
- | Container format: ovf | ||
- | Minimum Ram Required (MB): 0 | ||
- | Minimum Disk Required (GB): 0 | ||
- | Owner: 0f71e86d30e247d3b1216fe5f2f3aa50 | ||
- | ================================================================================ | ||
</code> | </code> | ||
- | La commande glance index donne une liste des images\\ | + | La commande ''glance index'' donne une liste des images: |
- | La commande glance details affiche des infos détaillées sur toutes les images.\\ | + | |
<code> | <code> | ||
glance index | glance index | ||
+ | </code> | ||
+ | <code> | ||
ID Name Disk Format Container Format Size | ID Name Disk Format Container Format Size | ||
------------------------------------ ------------------------------ -------------------- -------------------- -------------- | ------------------------------------ ------------------------------ -------------------- -------------------- -------------- | ||
d1b7defa-0c35-4e8c-aef5-0d58c8d80a52 Ubuntu 12.04 cloudimg amd64 qcow2 ovf 230490112 | d1b7defa-0c35-4e8c-aef5-0d58c8d80a52 Ubuntu 12.04 cloudimg amd64 qcow2 ovf 230490112 | ||
+ | </code> | ||
+ | La commande ''glance details'' affiche des informations détaillées sur toutes les images. | ||
+ | <code> | ||
glance details | glance details | ||
+ | </code> | ||
+ | <code> | ||
================================================================================ | ================================================================================ | ||
URI: http://192.168.1.250:9292/v1/images/d1b7defa-0c35-4e8c-aef5-0d58c8d80a52 | URI: http://192.168.1.250:9292/v1/images/d1b7defa-0c35-4e8c-aef5-0d58c8d80a52 | ||
Ligne 608: | Ligne 729: | ||
</code> | </code> | ||
- | La syntaxe de la commande **glance add** est la suivante :\\ | + | La syntaxe de la commande **glance add** est la suivante : |
- | glance add name="%Image name%" is_public=true container_format=%container_format% disk_format=%disk_format% < %filename% | + | <code> |
+ | glance add name="<Image name>" is_public=true container_format=<container_format> disk_format=<disk_format> < <filename> | ||
+ | </code> | ||
+ | où: | ||
+ | * <Image name> :Nom que l'on veut donner a l'image | ||
+ | * is_public=true :L'image est visible (true) ou non (false) dans tous les projets | ||
+ | * <container_format> :Container Type de container bare pas de container, ovf OVF Container, aki ari ami Amazon kernel ramdisk ou machine | ||
+ | * <disk_format> :Format de l'image raw, qcow2, vmdk, iso etc... | ||
+ | * %%<filename>%% :Le nom de l'image a uploader | ||
- | %Image name% Nom que l'on veut donner a l'image\\ | + | Pour voir la liste des commandes disponibles et les détails utilisez : |
- | is_public=true L'image est elle visible dans tous les projets\\ | + | <code> |
- | %container_format% Container Type de container bare pas de container, ovf OVF Container, aki ari ami Amazon kernel ramdisk ou machine \\ | + | glance help [NOM DE LA COMMANDE] |
- | %disk_format% Format de l'image raw, qcow2, vmdk, iso etc...\\ | + | </code> |
- | %filename% Le nom de l'image a uploader\\ | + | |
===== Nova ===== | ===== Nova ===== | ||
- | Passez maintenant a l'installation de Nova, la gestion des instances des machines virtuelles, de leur espace disque et du réseau.\\ | + | Passez maintenant à l'installation de Nova, la gestion des instances des machines virtuelles, de leur espace disque et du réseau. |
- | ===Préparation de la base de données Mysql=== | + | ==== Préparation de la base de données Mysql ==== |
+ | La commande suivante crée un utilisateur et sa base de données nommés "nova". Changez SQLPASSWD par un mot de passe de votre choix | ||
<code> | <code> | ||
mysql -u root -p <<EOF | mysql -u root -p <<EOF | ||
CREATE DATABASE nova; | CREATE DATABASE nova; | ||
- | GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' | + | GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'SQLPASSWD'; |
- | IDENTIFIED BY '5DTSDdzj'; | + | |
EOF | EOF | ||
</code> | </code> | ||
- | ===Installation=== | ||
- | installez les paquets [[apt>nova-api|nova-api]] [[apt>nova-cert|nova-cert]] [[apt>nova-common|nova-common]] [[apt>nova-compute|nova-compute]] [[apt>nova-compute-kvm|nova-compute-kvm]] [[apt>nova-doc|nova-doc]] [[apt>nova-network|nova-network]] [[apt>nova-objectstore|nova-objectstore]] [[apt>nova-scheduler|nova-scheduler]] [[apt>novnc|novnc]] [[apt>nova-consoleauth|nova-consoleauth]] [[apt>nova-volume|nova-volume]] [[apt>python-nova|python-nova]] [[apt>python-novaclient|python-novaclient]].\\ | ||
- | ===Configuration=== | + | ==== Installation ==== |
- | Création des services et points d'accès pour Keystone, au nombre de 2, les services compute et volume. | + | [[:tutoriel:comment_installer_un_paquet|Installez les paquets]] **[[apt>nova-api,nova-cert,nova-common,nova-compute,nova-compute-kvm,nova-doc,nova-network,nova-objectstore,nova-scheduler,novnc,nova-consoleauth,nova-volume,python-nova,python-novaclient|nova-api nova-cert nova-common nova-compute nova-compute-kvm nova-doc nova-network nova-objectstore nova-scheduler novnc nova-consoleauth nova-volume python-nova python-novaclient]]**. |
+ | |||
+ | ==== Configuration ==== | ||
+ | |||
+ | Création des services et points d'accès pour Keystone, au nombre de 2: les services de type [[#service compute|compute]] (auquel on donne le nom de "nova") et de type [[#service volume|volume]] (auquel on donne le nom de "volume"). | ||
+ | == Service compute == | ||
<code> | <code> | ||
keystone service-create --name=nova --type=compute --description='OpenStack Compute Service' | keystone service-create --name=nova --type=compute --description='OpenStack Compute Service' | ||
+ | </code> | ||
+ | <code> | ||
+-------------+----------------------------------+ | +-------------+----------------------------------+ | ||
| Property | Value | | | Property | Value | | ||
Ligne 647: | Ligne 780: | ||
| type | compute | | | type | compute | | ||
+-------------+----------------------------------+ | +-------------+----------------------------------+ | ||
+ | </code> | ||
+ | <code> | ||
keystone endpoint-create --region RegionOne --service_id=4ba6c7149dd1421f8c429afc0c8dbdfe --publicurl='http://192.168.1.250:8774/v2/%(tenant_id)s' --internalurl='http://192.168.1.250:8774/v2/%(tenant_id)s' --adminurl='http://192.168.1.250:8774/v2/%(tenant_id)s' | keystone endpoint-create --region RegionOne --service_id=4ba6c7149dd1421f8c429afc0c8dbdfe --publicurl='http://192.168.1.250:8774/v2/%(tenant_id)s' --internalurl='http://192.168.1.250:8774/v2/%(tenant_id)s' --adminurl='http://192.168.1.250:8774/v2/%(tenant_id)s' | ||
+ | </code> | ||
+ | <code> | ||
+-------------+--------------------------------------------+ | +-------------+--------------------------------------------+ | ||
| Property | Value | | | Property | Value | | ||
Ligne 658: | Ligne 795: | ||
| service_id | 4ba6c7149dd1421f8c429afc0c8dbdfe | | | service_id | 4ba6c7149dd1421f8c429afc0c8dbdfe | | ||
+-------------+--------------------------------------------+ | +-------------+--------------------------------------------+ | ||
+ | </code> | ||
+ | |||
+ | == Service volume == | ||
+ | <code> | ||
keystone service-create --name=volume --type=volume --description='OpenStack Volume Service' | keystone service-create --name=volume --type=volume --description='OpenStack Volume Service' | ||
+ | </code> | ||
+ | <code> | ||
+-------------+----------------------------------+ | +-------------+----------------------------------+ | ||
| Property | Value | | | Property | Value | | ||
Ligne 667: | Ligne 810: | ||
| type | volume | | | type | volume | | ||
+-------------+----------------------------------+ | +-------------+----------------------------------+ | ||
+ | </code> | ||
+ | <code> | ||
keystone endpoint-create --region RegionOne --service_id=de65a68c5ae34737bc6678f6c7bc884a --publicurl='http://192.168.1.250:8776/v1/%(tenant_id)s' --internalurl='http://192.168.1.250:8776/v1/%(tenant_id)s' --adminurl='http://192.168.1.250:8776/v1/%(tenant_id)s' | keystone endpoint-create --region RegionOne --service_id=de65a68c5ae34737bc6678f6c7bc884a --publicurl='http://192.168.1.250:8776/v1/%(tenant_id)s' --internalurl='http://192.168.1.250:8776/v1/%(tenant_id)s' --adminurl='http://192.168.1.250:8776/v1/%(tenant_id)s' | ||
+ | </code> | ||
+ | <code> | ||
+-------------+--------------------------------------------+ | +-------------+--------------------------------------------+ | ||
| Property | Value | | | Property | Value | | ||
Ligne 679: | Ligne 826: | ||
+-------------+--------------------------------------------+ | +-------------+--------------------------------------------+ | ||
</code> | </code> | ||
+ | \\ | ||
- | [[:tutoriel:comment_modifier_un_fichier|ouvrez le fichier]] **/etc/nova/api-paste.ini** et modifiez les lignes: | + | Dans les fichiers ci-dessous, SQLPASSWD est le mot de passe MySQL [[#Nova|Nova]], ADMPASSWD le mot de passe du [[#Création_du_compte_interne_du_service_Nova|compte de service Nova]] |
- | <code> | + | |
+ | [[:tutoriel:comment_modifier_un_fichier|Ouvrez avec les droits d'administration]] le fichier **/etc/nova/api-paste.ini** et modifiez les lignes: | ||
+ | <file> | ||
admin_tenant_name = service | admin_tenant_name = service | ||
admin_user = nova | admin_user = nova | ||
- | admin_password = 2BSpUaPV | + | admin_password = ADMPASSWD |
- | </code> | + | </file> |
- | [[:tutoriel:comment_modifier_un_fichier|ouvrez le fichier]] **/etc/nova/nova.conf** et remplacer tout avec les lignes ci dessous.\\ | + | [[:tutoriel:comment_modifier_un_fichier|Ouvrez avec les droits d'administration]] le fichier **/etc/nova/nova.conf** et remplacer tout avec les lignes ci dessous.\\ |
- | La configuration obtenue utilisera le mode Dhcp. La ligne "nova.scheduler.simple.SimpleScheduler" défini une utilisation avec un seul serveur.\\ | + | La configuration obtenue utilisera le mode DHCP. La ligne "nova.scheduler.simple.SimpleScheduler" définit une utilisation avec un seul serveur.\\ |
- | Pour un mode Vlan, pour utiliser plusieurs serveurs ou d'autres options, reportez vous a la documentation OpenStack.\\ | + | Pour un mode VLAN, pour utiliser plusieurs serveurs ou d'autres options, reportez-vous à la [[http://docs.openstack.org/|documentation OpenStack]] **(en)**. |
- | <code> | + | <file> |
# LOGS/STATE | # LOGS/STATE | ||
--verbose | --verbose | ||
Ligne 706: | Ligne 856: | ||
--keystone_ec2_url=http://192.168.1.250:5000/v2.0/ec2tokens | --keystone_ec2_url=http://192.168.1.250:5000/v2.0/ec2tokens | ||
--scheduler_driver=nova.scheduler.simple.SimpleScheduler | --scheduler_driver=nova.scheduler.simple.SimpleScheduler | ||
+ | #root_helper est deprecie, rootwrap_config=/etc/nova/rootwrap.conf | ||
--root_helper=sudo nova-rootwrap | --root_helper=sudo nova-rootwrap | ||
# AUTHENTICATION | # AUTHENTICATION | ||
Ligne 713: | Ligne 864: | ||
--iscsi_ip_prefix=172.16.0 | --iscsi_ip_prefix=172.16.0 | ||
# DATABASE | # DATABASE | ||
- | --sql_connection=mysql://nova:5DTSDdzj@192.168.1.250/nova | + | --sql_connection=mysql://nova:SQLPASSWD@192.168.1.250/nova |
# COMPUTE | # COMPUTE | ||
--libvirt_type=kvm | --libvirt_type=kvm | ||
Ligne 738: | Ligne 889: | ||
--flat_injected=False | --flat_injected=False | ||
--my_ip=192.168.1.250 | --my_ip=192.168.1.250 | ||
- | --floating_range=192.168.1.0/24 | + | --floating_range=192.168.1.0/24 |
--force_dhcp_release | --force_dhcp_release | ||
--public_interface=br0 | --public_interface=br0 | ||
Ligne 746: | Ligne 897: | ||
--vncserver_proxyclient_address=127.0.0.1 | --vncserver_proxyclient_address=127.0.0.1 | ||
--vncserver_listen=127.0.0.1 | --vncserver_listen=127.0.0.1 | ||
- | </code> | + | </file> |
+ | |||
+ | Toutes les entrées //%%--%%flat...// correspondent au réseau privé(172.16.0.0/24, début 172.16.0.2), destiné aux communications entre les VMs (pour Virtual Machine ou machines virtuelles), les autres serveurs Nova ou de stockage s'il y a...\\ | ||
- | toutes les entrées --flat... correspondent au réseau privé (172.16.0.0/24, début 172.16.0.2)\\ | + | //%%--%%floating_range// est le réseau public (LAN ou Internet) sur lequel est branché l'interface br0, pour attribuer une adresse aux VMs sur le réseau public. L'adresse 192.168.1.250 est celle de l'interface br0, ne remplacez pas par 127.0.0.1, ça ne fonctionnera pas.\\ |
- | --floating_range est le réseau public(LAN) sur lequel est branché l'interface br0, pour attribuer une adresse aux VMs sur le réseau public. L'adresse 192.168.1.250 est celle de l'interface br0, ne remplacez pas par 127.0.0.1, ça ne fonctionnera pas.\\ | + | |
- | Modifiez les droits sur le répertoire /etc/nova | + | Modifiez les [[:droits]] sur le répertoire **/etc/nova** |
<code> | <code> | ||
Ligne 770: | Ligne 922: | ||
</code> | </code> | ||
- | + | Redémarrez de nouveau tous les services | |
- | Redémarrez de nouveau tous les service | + | |
<code> | <code> | ||
Ligne 777: | Ligne 928: | ||
for a in libvirt-bin nova-network nova-compute nova-api nova-objectstore nova-scheduler nova-volume nova-cert nova-consoleauth novnc; do sudo service "$a" start; done | for a in libvirt-bin nova-network nova-compute nova-api nova-objectstore nova-scheduler nova-volume nova-cert nova-consoleauth novnc; do sudo service "$a" start; done | ||
</code> | </code> | ||
+ | ==== Utilisation ==== | ||
- | Vous pouvez maintenant vérifier que tous les services fonctionnent, le résultat dans la colonne STATE doit être un smiley :-) pour OK. Si c'est un XXX, quelque chose n'as pas fonctionné, consultez les logs dans /var/log/nova/nova-le_nom_du_service_KO.\\ | + | Vous pouvez maintenant vérifier que tous les services fonctionnent, le résultat dans la colonne //STATE// doit être |
+ | * un smiley, représenté par %%:-)%%, pour "OK". | ||
+ | * un XXX :quelque chose n'as pas fonctionné, consultez les logs dans **/var/log/nova/nova-le_nom_du_service_KO**. | ||
<code> | <code> | ||
sudo nova-manage service list | sudo nova-manage service list | ||
+ | </code> | ||
+ | <code> | ||
2012-05-16 00:20:09 DEBUG nova.utils [req-527f4f50-f02e-41da-bc96-43d3d9070807 None None] backend <module 'nova.db.sqlalchemy.api' from '/usr/lib/python2.7/dist-packages/nova/db/sqlalchemy/api.pyc'> from (pid=9869) __get_backend /usr/lib/python2.7/dist-packages/nova/utils.py:658 | 2012-05-16 00:20:09 DEBUG nova.utils [req-527f4f50-f02e-41da-bc96-43d3d9070807 None None] backend <module 'nova.db.sqlalchemy.api' from '/usr/lib/python2.7/dist-packages/nova/db/sqlalchemy/api.pyc'> from (pid=9869) __get_backend /usr/lib/python2.7/dist-packages/nova/utils.py:658 | ||
Binary Host Zone Status State Updated_At | Binary Host Zone Status State Updated_At | ||
Ligne 792: | Ligne 948: | ||
</code> | </code> | ||
- | <note important>L'affichage du résultat d'une commande est beaucoup plus rapide que son exécution réelle. Si vous n'obtenez pas de message d'erreur, patientez quelques instants et vérifiez avec une commande d'affichage que l'action a bien été prise en compte. Relancer une commande ou demander son annulation alors qu'elle est en cours d'exécution peut rendre le composant Nova instable et empêcher la suppression de l'action demandée ou laisser des entrées indésirables dans la base de données.\\ | + | <note important>L'affichage du résultat d'une commande est beaucoup plus rapide que son exécution réelle. Si vous n'obtenez pas de message d'erreur, patientez quelques instants et vérifiez avec une commande d'affichage que l'action a bien été prise en compte.\\ |
- | Exemples: l'atribution d'une adresse IP publique ou la création d'un disque virtuel.\\ | + | Relancer une commande ou demander son annulation alors qu'elle est en cours d'exécution peut rendre le composant Nova instable et empêcher la suppression de l'action demandée ou laisser des entrées indésirables dans la base de données. Exemples: l'attribution d'une adresse IP publique ou la création d'un disque virtuel.\\ |
N'hésitez pas à... patienter</note> | N'hésitez pas à... patienter</note> | ||
+ | |||
+ | === Images disques === | ||
Listez les images disque fournies par le service Glance | Listez les images disque fournies par le service Glance | ||
Ligne 800: | Ligne 958: | ||
<code> | <code> | ||
nova image-list | nova image-list | ||
+ | </code> | ||
+ | <code> | ||
+--------------------------------------+-----------------------------+--------+--------+ | +--------------------------------------+-----------------------------+--------+--------+ | ||
| ID | Name | Status | Server | | | ID | Name | Status | Server | | ||
Ligne 807: | Ligne 967: | ||
</code> | </code> | ||
- | Profitons en pour créer les réseaux privés et publics, les adresses seront enregistrées dans la base MySQL.\\ | + | === Réseaux === |
+ | Profitez-en pour créer les réseaux privés et publics. Les adresses seront enregistrées dans la base MySQL. | ||
+ | Le réseau public | ||
<code> | <code> | ||
- | sudo nova-manage network create private --fixed_range_v4=172.16.0.0/24 --num_networks=1 --bridge=br1 --bridge_interface=eth1 --network_size=256 | ||
sudo nova-manage floating create --ip_range=192.168.1.0/24 | sudo nova-manage floating create --ip_range=192.168.1.0/24 | ||
</code> | </code> | ||
+ | Le réseau privé, destiné aux communications entre les VMs, les autres serveurs Nova ou de stockage s'il y a... | ||
+ | <code> | ||
+ | sudo nova-manage network create private --fixed_range_v4=172.16.0.0/24 --num_networks=1 --bridge=br1 --bridge_interface=eth1 --network_size=256 | ||
+ | </code> | ||
+ | |||
+ | === Parefeu === | ||
- | Par défaut, les règles de parefeu bloquent les paquets entrants sur l'interface publique a destination des VMs. Il est possible de créer des ensembles de règles. L'ensemble de règles utilisée devra être spécifié au lancement de chaque instance. Ci dessous un exemple de création de règles sur l'ensemble "default" créé automatiquement a l'installation, si vous voulez autoriser le ping et SSH pour toutes les VMs sur l'interface publique.( icmp -1 correspond a tout ) | + | Par défaut, les règles de parefeu bloquent les paquets entrants sur l'interface publique à destination des VMs. Il est possible de créer des ensembles de règles. L'ensemble des règles utilisées devra être spécifié au lancement de chaque instance. Ci-dessous un exemple de création de règles sur l'ensemble "default" créé automatiquement à l'installation, si vous voulez autoriser le ping et [[:SSH]] pour toutes les VMs sur l'interface publique ( icmp -1 correspond a tout ). |
<code> | <code> | ||
nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0 | nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0 | ||
+ | </code> | ||
+ | <code> | ||
+-------------+-----------+---------+-----------+--------------+ | +-------------+-----------+---------+-----------+--------------+ | ||
| IP Protocol | From Port | To Port | IP Range | Source Group | | | IP Protocol | From Port | To Port | IP Range | Source Group | | ||
Ligne 823: | Ligne 992: | ||
| icmp | -1 | -1 | 0.0.0.0/0 | | | | icmp | -1 | -1 | 0.0.0.0/0 | | | ||
+-------------+-----------+---------+-----------+--------------+ | +-------------+-----------+---------+-----------+--------------+ | ||
+ | </code> | ||
+ | <code> | ||
nova secgroup-add-rule default tcp 22 22 0.0.0.0/0 | nova secgroup-add-rule default tcp 22 22 0.0.0.0/0 | ||
+ | </code> | ||
+ | <code> | ||
+-------------+-----------+---------+-----------+--------------+ | +-------------+-----------+---------+-----------+--------------+ | ||
| IP Protocol | From Port | To Port | IP Range | Source Group | | | IP Protocol | From Port | To Port | IP Range | Source Group | | ||
Ligne 835: | Ligne 1008: | ||
<code> | <code> | ||
nova secgroup-list-rules default | nova secgroup-list-rules default | ||
+ | </code> | ||
+ | <code> | ||
+-------------+-----------+---------+-----------+--------------+ | +-------------+-----------+---------+-----------+--------------+ | ||
| IP Protocol | From Port | To Port | IP Range | Source Group | | | IP Protocol | From Port | To Port | IP Range | Source Group | | ||
Ligne 844: | Ligne 1019: | ||
- | ===== Première machine virtuelle ===== | + | ==== Première machine virtuelle ==== |
- | Maintenant que tout fonctionne, vous allez pouvoir créez votre première VM | + | Maintenant que tout fonctionne, vous allez pouvoir créez votre première VM.\\ |
- | Assurez vous d'avoir créé une clé SSH | + | Assurez-vous d'avoir créé une clé [[:SSH]]: |
<code> | <code> | ||
Ligne 852: | Ligne 1027: | ||
</code> | </code> | ||
- | ajoutez la au serveur | + | Ajoutez-la au serveur |
<code> | <code> | ||
Ligne 858: | Ligne 1033: | ||
</code> | </code> | ||
- | il faut définir les spécifications de la future VM, pour voir les possibilités, utilisez la commande ci-dessous. la création de vos propres définitions est bien sur possible. | + | Il faut définir les spécifications de la future VM, pour voir les possibilités, utilisez la commande ci-dessous, la création de vos propres définitions étant bien sûr possible: |
<code> | <code> | ||
nova flavor-list | nova flavor-list | ||
+ | </code> | ||
+ | <code> | ||
+----+-----------+-----------+------+-----------+------+-------+-------------+ | +----+-----------+-----------+------+-----------+------+-------+-------------+ | ||
| ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | | | ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | | ||
Ligne 873: | Ligne 1050: | ||
</code> | </code> | ||
- | Utilisons l'ID 1 correspondant a une machine disposant de 512 Mb de RAM, 1 CPU virtuel et aucun disque supplémentaire. | + | Pour la suite, il sera utilisé l'ID 1 correspondant à une machine disposant de 512 Mb de RAM, 1 CPU virtuel et aucun disque supplémentaire. |
- | lancez votre première VM avec la commande nova boot, le paramètre --flavor indique quelles spécifications, --image l'ID de l'image fournie par glance, vient ensuite le nom et la clé ssh utilisée. Indiquez aussi l'ensemble de règles de parfeu, sinon c'est l'ensemble "default" qui est appliqué. | + | Lancez votre première VM avec la commande ''nova boot'', le paramètre //%%--%%flavor// indique les spécifications choisies, //%%--%%image// l'ID de l'image fournie par glance, vient ensuite le nom et la clé ssh utilisée. Indiquez aussi l'ensemble de règles de [[#Parefeu|parefeu]], sinon c'est l'ensemble "default" qui est appliqué. |
<code> | <code> | ||
nova boot --flavor 1 --image d1b7defa-0c35-4e8c-aef5-0d58c8d80a52 myfirstvm --key_name key1 & | nova boot --flavor 1 --image d1b7defa-0c35-4e8c-aef5-0d58c8d80a52 myfirstvm --key_name key1 & | ||
+ | </code> | ||
+ | <code> | ||
[1] 5472 | [1] 5472 | ||
+-------------------------------------+--------------------------------------+ | +-------------------------------------+--------------------------------------+ | ||
Ligne 913: | Ligne 1092: | ||
</code> | </code> | ||
- | Un récapitulatif des propriétés de la machine s'affiche. Pour le réafficher, utilisez la commande | + | Un récapitulatif des propriétés de la machine s'affiche. Pour le réafficher, utilisez la commande |
<code> | <code> | ||
Ligne 923: | Ligne 1102: | ||
<code> | <code> | ||
nova list | nova list | ||
+ | </code> | ||
+ | <code> | ||
+--------------------------------------+-----------+--------+--------------------+ | +--------------------------------------+-----------+--------+--------------------+ | ||
| ID | Name | Status | Networks | | | ID | Name | Status | Networks | | ||
Ligne 930: | Ligne 1111: | ||
</code> | </code> | ||
- | Connectez vous sur la VM | + | Connectez-vous sur la VM |
<code> | <code> | ||
ssh ubuntu@172.16.0.2 | ssh ubuntu@172.16.0.2 | ||
+ | </code> | ||
+ | <code> | ||
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-25-virtual x86_64) | Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-25-virtual x86_64) | ||
Ligne 939: | Ligne 1122: | ||
System information as of Mon Jul 9 17:10:53 UTC 2012 | System information as of Mon Jul 9 17:10:53 UTC 2012 | ||
- | + | . | |
- | System load: 0.56 Processes: 65 | + | . |
- | Usage of /: 33.4% of 1.98GB Users logged in: 0 | + | . |
- | Memory usage: 10% IP address for eth0: 172.16.0.2 | + | |
- | Swap usage: 0% | + | |
- | + | ||
- | Graph this data and manage this system at https://landscape.canonical.com/ | + | |
- | + | ||
- | 0 packages can be updated. | + | |
- | 0 updates are security updates. | + | |
- | + | ||
- | Get cloud support with Ubuntu Advantage Cloud Guest | + | |
- | http://www.ubuntu.com/business/services/cloud | + | |
- | + | ||
- | The programs included with the Ubuntu system are free software; | + | |
- | the exact distribution terms for each program are described in the | + | |
- | individual files in /usr/share/doc/*/copyright. | + | |
- | + | ||
- | Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by | + | |
- | applicable law. | + | |
To run a command as administrator (user "root"), use "sudo <command>". | To run a command as administrator (user "root"), use "sudo <command>". | ||
See "man sudo_root" for details. | See "man sudo_root" for details. | ||
Ligne 974: | Ligne 1139: | ||
</code> | </code> | ||
- | Attachez le à la VM | + | Attachez-le à la VM |
<code> | <code> | ||
nova volume-attach myfirstvm 1 /dev/vdb | nova volume-attach myfirstvm 1 /dev/vdb | ||
+ | </code> | ||
+ | Vérifiez le rattachement | ||
+ | <code> | ||
nova volume-list | nova volume-list | ||
+ | </code> | ||
+ | <code> | ||
+----+--------+--------------+------+-------------+--------------------------------------+ | +----+--------+--------------+------+-------------+--------------------------------------+ | ||
| ID | Status | Display Name | Size | Volume Type | Attached to | | | ID | Status | Display Name | Size | Volume Type | Attached to | | ||
Ligne 987: | Ligne 1157: | ||
</code> | </code> | ||
- | Vous pouvez maintenant vous reconnecter a la Vm pour partitionner ce disque et l'utiliser. | + | Vous pouvez maintenant vous reconnecter à la VM pour partitionner ce disque et l'utiliser. |
- | Connectez maintenant cette instance virtuelle a votre LAN.\\ | + | Connectez maintenant cette instance virtuelle à votre LAN.\\ |
- | Il faut tout d'abord allouer une adresse IP | + | Il faut tout d'abord allouer une adresse IP |
<code> | <code> | ||
nova floating-ip-create | nova floating-ip-create | ||
+ | </code> | ||
+ | <code> | ||
+-------------+-------------+----------+------+ | +-------------+-------------+----------+------+ | ||
| Ip | Instance Id | Fixed Ip | Pool | | | Ip | Instance Id | Fixed Ip | Pool | | ||
Ligne 1001: | Ligne 1173: | ||
</code> | </code> | ||
- | Puis attachez cette adresse a la VM | + | Puis attachez cette adresse à la VM |
<code> | <code> | ||
nova add-floating-ip myfirstvm 192.168.1.1 | nova add-floating-ip myfirstvm 192.168.1.1 | ||
</code> | </code> | ||
- | Patientez quelques secondes et vérifiez la présence sur votre LAN d'une mchine a cette adresse | + | Patientez quelques secondes et vérifiez la présence sur votre LAN d'une machine à cette adresse |
+ | <code> | ||
+ | ping -c 2 192.168.1.1 | ||
+ | </code> | ||
<code> | <code> | ||
- | ping 192.168.1.1 | ||
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data. | PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data. | ||
64 bytes from 192.168.1.1: icmp_req=1 ttl=64 time=0.589 ms | 64 bytes from 192.168.1.1: icmp_req=1 ttl=64 time=0.589 ms | ||
64 bytes from 192.168.1.1: icmp_req=2 ttl=64 time=0.452 ms | 64 bytes from 192.168.1.1: icmp_req=2 ttl=64 time=0.452 ms | ||
- | ^C | + | |
--- 192.168.1.1 ping statistics --- | --- 192.168.1.1 ping statistics --- | ||
2 packets transmitted, 2 received, 0% packet loss, time 999ms | 2 packets transmitted, 2 received, 0% packet loss, time 999ms | ||
Ligne 1020: | Ligne 1194: | ||
<code> | <code> | ||
nova list | nova list | ||
+ | </code> | ||
+ | <code> | ||
+--------------------------------------+-----------+--------+---------------------------------+ | +--------------------------------------+-----------+--------+---------------------------------+ | ||
| ID | Name | Status | Networks | | | ID | Name | Status | Networks | | ||
Ligne 1027: | Ligne 1203: | ||
</code> | </code> | ||
+ | Il est bien sûr possible d'envoyer des commandes à partir de n'importe quel autre ordinateur où les paquets **[[apt>python-novaclient,python-nova-adminclient]]** sont installés.\\ | ||
+ | |||
+ | Pour voir la liste des commandes disponibles et les détails utilisez : | ||
+ | <code> | ||
+ | nova help [NOM DE LA COMMANDE] | ||
+ | </code> | ||
===== Dashboard Horizon ===== | ===== Dashboard Horizon ===== | ||
- | Passons a l'interface graphique, le dashboard Horizon\\ | + | L'interface graphique, le Dashboard Horizon, a été développée pour simplifier l'administration du serveur et des projets. L'accès se fait à partir d'un [[:navigateur]] web pointant à l'adresse du serveur.\\ |
+ | Les différents services doivent être installés et configurés avant de pouvoir l'utiliser. Une grande partie des commandes est alors à portée d'un clic de souris.\\ | ||
+ | |||
+ | ==== Installation ==== | ||
- | Installez les paquets [[apt>apache2|apache2]] [[apt>libapache2-mod-wsgi|libapache2-mod-wsgi]] [[apt>openstack-dashboard|openstack-dashboard]] | + | [[:tutoriel:comment_installer_un_paquet|Installez les paquets]] **[[apt>apache2,libapache2-mod-wsgi,openstack-dashboard]]** |
- | redémarrez le serveur web Apache pour vérifier que tout est OK | + | Redémarrez le serveur web [[:Apache2|Apache]] pour vérifier que tout est OK |
<code> | <code> | ||
Ligne 1039: | Ligne 1224: | ||
</code> | </code> | ||
- | Ouvrez votre navigateur favori à l'adresse de votre interface publique ou 127.0.0.1\\ | + | ==== Utilisation ==== |
- | {{ ::dashboard.png?600 |}}\\ | + | Ouvrez votre [[:navigateur]] favori à l'adresse de votre interface publique ou 127.0.0.1\\ |
- | <note important>L'affichage du résultat d'une commande est beaucoup plus rapide que son exécution réelle. Si vous n'obtenez pas de message d'erreur, patientez quelques instants et vérifiez avec une commande d'affichage que l'action a bien été prise en compte. Relancer une commande ou demander son annulation alors qu'elle est en cours d'exécution peut rendre le composant Nova instable et empêcher la suppression de l'action demandée ou laisser des entrées indésirables dans la base de données.\\ | + | {{ ::dashboard.png?600 |Interface de dashboard Horizon}} |
- | Exemples: l'atribution d'une adresse IP publique ou la création d'un disque virtuel.\\ | + | |
+ | <note important>Comme pour les commandes shell, l'affichage du résultat d'une commande ne garantit pas qu'elle soit entièrement exécutée. Si vous n'obtenez pas de message d'erreur, la mise à jour de la page peut demander quelques secondes supplémentaires.\\ | ||
+ | Relancer une commande ou demander son annulation alors qu'elle est en cours d'exécution peut rendre le composant Nova instable et empêcher la suppression de l'action demandée ou laisser des entrées indésirables dans la base de données. Exemple: lors de la suppression d'un disque virtuel, les données sont supprimées avant que l'espace ne soit libéré.\\ | ||
N'hésitez pas à... patienter</note> | N'hésitez pas à... patienter</note> | ||
- | Les identifiants de connexion de l'admin sont les mêmes que ceux du fichier **.novarc**\\ | + | <note important>L'url par défaut est http://IP/horizon</note> |
- | Si vous avez suivi ce document sans rien changer c'est\\ | + | |
- | Username : admin Password: 2BSpUaPV pour le compte d'administration. | + | Les identifiants de connexion de l'administrateur sont les mêmes que ceux du fichier **.novarc**. Si vous avez suivi ce document sans rien changer, il s'agit donc pour le compte d'administration de:\\ |
- | Les comptes qui ont pour role "admin" ont accès a l'interface d'administration sur le Dashboard, ainsi qu'a leur(s) projet(s). Les roles Member n'ont accès qu'a leur(s) projet(s).\\ | + | //Username //:%% %%[[#Création_du_compte_administrateur|admin]]%% %%//Password//:%% %%[[#Création_du_compte_administrateur|ADMPASSWD]].\\ |
+ | Les comptes qui ont pour rôle "admin" ont accès à l'interface d'administration sur le Dashboard, ainsi qu'à leur(s) projet(s). Les rôles "Member" n'ont accès qu'à leur(s) projet(s). | ||
+ | |||
+ | === Accès Admin === | ||
+ | |||
+ | Dans l'ordre les différents menus : | ||
+ | * //Overview// :Récapitulatif de l'usage des serveurs par projet, utilisation actuelle en nombre de CPU virtuels, RAM et Disques puis compteur en CPU et espace disque(GB) par heures. | ||
+ | * //Instances// :Liste des instances de machines virtuelles actuelles plus quelques infos globales comme le projet auquel elles appartiennent, le serveur hôte, l'adresse IP, la taille, le statut et les actions en cours. | ||
+ | * //Services// :Liste des services activés et le serveur hôte. | ||
+ | * //Flavors// :La liste des types d'instances disponibles, leurs spécifications en nombre de CPUs, mémoire, espace disque. La création de nouvelles définitions d'instance est possible. | ||
+ | * //Images// :Les images disques stockées par le service Glance. | ||
+ | * //Projects// :les projets existants et leur statut. Il est possible de créer de nouveaux projets. | ||
+ | * //Users// :La liste des utilisateurs enregistrés, avec la possibilité d'ajouter ou d'éditer les détails mais pas d'ajouter l'utilisateur à plusieurs projets. | ||
+ | * //Quotas// :Les quotas définis sur les ressources des serveurs, pas de modification possible. | ||
+ | |||
+ | === Accès projets === | ||
+ | |||
+ | Un bouton permet de basculer entre les différents projets dont l'utilisateur est membre, si il y a. | ||
+ | Puis viennent les menus : | ||
+ | * //Overview// :Récapitulatif, comme dans la partie Admin, mais ne concernant que le projet sélectionné. | ||
+ | * //Instances & Volumes// :La liste des instances existantes et les possibilités de les éditer, la création ou modification des volumes disques virtuels. | ||
+ | * //Images & Snapshots// :Liste des images autorisées pour le projet, sert a lancer de nouvelles instances. Regroupe aussi les instantanés disponibles, instances et volumes disques. | ||
+ | * //Acces & Security// :Les adresses IP disponibles pour connecter les instances au réseau public avec possibilité de création, les groupes de règles de pare-feu et leur interface d'édition, et enfin la liste des clés SSH avec l'import ou la création de certificat. | ||
+ | ===== Créez vos propres images ===== | ||
+ | |||
+ | L'intérêt d'OpenStack étant de déployer rapidement des instances de machines virtuelles, ça ne servirait à rien de devoir passer ensuite des heures à les configurer. La création de vos propres images vous permettra de gagner un temps précieux.\\ | ||
+ | Plusieurs grandes distributions ont été testées avec succès, dont Ubuntu et Debian, RedHat et Centos mais aussi Mandriva. D'autres systèmes peuvent aussi servir comme FreeBSD ou encore Windows.\\ | ||
+ | Pour un système Linux, les pré-requis sont :un système à jour, Curl et un serveur SSH. Pour FreeBSD ou Windows, prévoyez l'installation du pilote //Virtio//.(driver Windows signé disponible [[http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/|ici]]).\\ | ||
+ | |||
+ | Installez et configurez une VM avec [[:KVM]], installez les logiciels et services voulus et les comptes utilisateurs. Gardez à l'esprit que tout ce que vous faites sur cette image se retrouvera sur chaque instance. Et à l'inverse, tout ce que vous n'aurez pas fait sera aussi à refaire à chaque nouvelle VM.\\ | ||
+ | |||
+ | Pour simplifier l'administration des comptes sur les instances, l'utilisation d'un annuaire LDAP facilite grandement le travail. Il suffira ensuite de faire les changements sur l'annuaire pour ne pas être obligé de remettre ses images à jour.\\ | ||
+ | Pour finir, pour les images Linux, [[:tutoriel:comment_modifier_un_fichier|ouvrez avec les droits d'administration]] le fichier **/etc/rc.local** et ajoutez les lignes suivantes avant la ligne "exit 0" (ou avant "/var/lock/subsys/local" pour Centos). Ceci permettra à l'instance de récupérer les clés SSH au lancement. | ||
+ | |||
+ | <file> | ||
+ | echo >> /root/.ssh/authorized_keys | ||
+ | curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys | ||
+ | echo "AUTHORIZED_KEYS:" | ||
+ | echo "************************" | ||
+ | cat /root/.ssh/authorized_keys | ||
+ | echo "************************" | ||
+ | </file> | ||
+ | |||
+ | Une dernière précaution à prendre pour éviter les conflits de nommage des interfaces réseau: effacer la règle [[:udev]] y faisant référence: | ||
+ | <code> | ||
+ | sudo rm -rf /etc/udev/rules.d/70-persistent-net.rules | ||
+ | </code> | ||
+ | |||
+ | Votre image disque est maintenant prête à être exportée sur le serveur Glance. | ||
===== Désinstallation ===== | ===== Désinstallation ===== | ||
Pour supprimer cette application, [[:tutoriel:comment_supprimer_un_paquet|supprimer les paquets]]. Selon la méthode choisie, la configuration globale de l'application est conservée ou supprimée. Les journaux du système, et les fichiers de préférence des utilisateurs dans leurs dossiers personnels sont toujours conservés.\\ | Pour supprimer cette application, [[:tutoriel:comment_supprimer_un_paquet|supprimer les paquets]]. Selon la méthode choisie, la configuration globale de l'application est conservée ou supprimée. Les journaux du système, et les fichiers de préférence des utilisateurs dans leurs dossiers personnels sont toujours conservés.\\ | ||
- | Supprimez ensuite les bases de données keystone, glance et nova\\ | + | Supprimez ensuite les bases de données keystone, glance et nova |
===== Voir aussi ===== | ===== Voir aussi ===== | ||
- | * **(en)** [[http://openstack.org/]] | + | * **(en)** [[http://openstack.org/|Le site du Projet]] |
- | | + | |
+ | ---- | ||
+ | //Contributeurs principaux :[[utilisateurs:xavier4811|Xavier4811]].// | ||
- | //Contributeurs principaux : [[utilisateurs:xavier4811|Xavier4811]].\\ |