{"id":28913757,"url":"https://github.com/thystips/openstack","last_synced_at":"2026-02-02T11:11:18.813Z","repository":{"id":120465611,"uuid":"194920624","full_name":"thystips/openstack","owner":"thystips","description":null,"archived":false,"fork":false,"pushed_at":"2019-09-09T15:54:05.000Z","size":401,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-06-21T21:11:34.343Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thystips.png","metadata":{"files":{"readme":"docs/README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-07-02T19:09:37.000Z","updated_at":"2019-09-09T15:54:07.000Z","dependencies_parsed_at":null,"dependency_job_id":"68b05830-9791-4a90-a338-7b83038ee239","html_url":"https://github.com/thystips/openstack","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/thystips/openstack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thystips%2Fopenstack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thystips%2Fopenstack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thystips%2Fopenstack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thystips%2Fopenstack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thystips","download_url":"https://codeload.github.com/thystips/openstack/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thystips%2Fopenstack/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29010832,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-02T10:37:29.253Z","status":"ssl_error","status_checked_at":"2026-02-02T10:37:28.644Z","response_time":58,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-06-21T21:10:14.234Z","updated_at":"2026-02-02T11:11:18.805Z","avatar_url":"https://github.com/thystips.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Projet OpenStack\n\nPour ma période de stage de l'année 2018 - 2019 un de mes objectifs est de réaliser et documenter une installation complète d'**OpenStack**.\nCette page constitue donc la documentation à réaliser.\n\n_Toute la documentation a été réalisé avec les droit `root`, toutes les commandes commençant `#` doivent être exécutées soit en utilisant la commande `sudo` (`man sudo` pour plus d'explication) soit depuis l'utilisateur `root`(méthode à éviter pour raison de sécurité)._\n\nDéploiement \"All In One\" d'OpenStack avec Ansible [ici](./openstack-ansible-aio.md).\n\nDéploiement \"All In One\" d'OpenStack avec Ansible et Kolla sur des conteneurs Docker [ici](./kolla.md)\n\n## 1) Topologie\n\nCette installation va être réalisé sur 6 machines virtuelles. Une qui sera le controlleur, deux pour l'execution des instances, une pour le stockage de block et deux autre pour le stockage d'objets.\n\n|   Hostname   | RAM | vCPU | interface 1 |  interface 2   | Disque 1 | Disque 2 | Disque 3 |\n|:------------:|:---:|:----:|:-----------:|:--------------:|:--------:|:--------:|:--------:|\n| `controller` |  8  |  2   | 10.10.10.10 | 192.168.20.181 |    50    |          |          |\n|  `compute`   |  4  |  2   | 10.10.10.20 | 192.168.20.182 |    50    |          |          |\n|  `compute2`  |  4  |  2   | 10.10.10.22 | 192.168.20.183 |    50    |          |          |\n|  `storage1`  |  2  |  1   | 10.10.10.30 | 192.168.20.184 |    50    |   100    |          |\n\n![Photo Topologie](./topo.svg)\n\nLe fichier `/etc/hosts` est complété sur chaque machine.\nPour le bon fonctionnement du réseau un pfsense fait le lien entre le réseau LAN et le réseau réservé à openstack.\n\n## 2) Installation\n\n### 2.1) Environnement\n\n#### 2.1.1) Serveur de temps\n\nUn des pré requis pour avoir un OpenStack fonctionnel est d'avoir des machines ayant la même heure et pour ça on va installer un serveur de temps (ntp) sur `controller` et définir les autres machines comme clients.\n\nSur toutes les machines il faut installer le paquet `ntp` puis il faut remplacer dans `/etc/ntp.conf` `server 0.ubuntu.pool.ntp.org` par `server controller` sur toutes sauf le `controller` qui lui reste inchangé.\n\n```bash\n# sudo apt install ntp\n```\n\n#### 2.1.2) Installation des dépôts OpenStack\n\nSur toutes les machines il faut installer les dépôts OpenStack\n\n```bash\n# apt install software-properties-common\n# add-apt-repository cloud-archive:stein\n# apt update \u0026\u0026 apt dist-upgrade\n# apt install python3-openstackclient\n```\n\n#### 2.1.3) Installation de la BDD sur `controller`\n\nMaintenant il faut installer le service de bases de données sur `controller` qui seront nécessaire au bon fonctionnement de l'installation.\n\nOn commence par le serveur `mariadb`\n\n```bash\n# apt install mariadb-server python-pymysql\n```\n\nOn édite le fichier de configuration `/etc/mysql/conf.d/mysqld_openstack.cnf` pour y mettre :\n\n```conf\n[mysqld]\nbind-address = 10.10.10.10\ndefault-storage-engine = innodb\ninnodb_file_per_table = on\nmax_connections = 4096\ncollation-server = utf8_general_ci\ncharacter-set-server = utf8\n```\n\nPuis on redémarre le service\n\n```bash\n# systemctl restart mysql\n# systemctl enable mysql\n```\n\n#### 2.1.4) Installation de `RabbitMQ` sur `controller`\n\nEnsuite on install RabbitMQ\n\n```bash\n# apt-get install rabbitmq-server\n```\n\nEt on ajoute l’utilisateur openstack et on positionne ses droits:\n\n```bash\n# rabbitmqctl add_user openstack RABBIT_PASS\n# rabbitmqctl set_permissions openstack \".*\" \".*\" \".*\"\n```\n\n#### 2.1.5) Installation de `memcached` sur `controller`\n\nLe service de d'identité utilise memcached afin de mettre en cache les jetons, il faut donc installer ce dernier.\n\n```bash\n# apt install memcached python-memcache\n```\n\nPour que les autres machines puissent accéder au service il faut modifier l'adresse IP d'écoute dans le fichier `/etc/memcached.conf`\n\n```conf\n-l 10.10.10.10\n```\n\nEt on redémarre le service\n\n```bash\n# systemctl enable memcached\n# systemctl restart memcached\n\n```\n\n#### 2.1.6) Installation de `etcd` sur `controller`\n\nCertains services utilisent etcd pour un stockage clé-valeur sécurisé, il faut donc l'installer.\n\n```bash\n# apt install etcd\n```\n\nEnsuite on édite le fichier `/etc/default/etcd` avec ces informations :\n\n```code\nETCD_NAME=\"controller\"\nETCD_DATA_DIR=\"/var/lib/etcd\"\nETCD_INITIAL_CLUSTER_STATE=\"new\"\nETCD_INITIAL_CLUSTER_TOKEN=\"etcd-cluster-01\"\nETCD_INITIAL_CLUSTER=\"controller=http://10.10.10.10:2380\"\nETCD_INITIAL_ADVERTISE_PEER_URLS=\"http://10.10.10.10:2380\"\nETCD_ADVERTISE_CLIENT_URLS=\"http://10.10.10.10:2379\"\nETCD_LISTEN_PEER_URLS=\"http://0.0.0.0:2380\"\nETCD_LISTEN_CLIENT_URLS=\"http://10.10.10.10:2379\"\n```\n\n```bash\n# systemctl enable etcd\n# systemctl start etcd\n```\n\n### 2.2) Installation de Keystone\n\nMaintenant on va installer et configurer le service d'identité Keystone.\n\n#### 2.2.1) SQL\n\n```bash\n# mysql\n```\n\n```mysql\nMariaDB [(none)]\u003e CREATE DATABASE keystone;\nMariaDB [(none)]\u003e GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \\\nIDENTIFIED BY 'MOT_DE_PASSE';\nMariaDB [(none)]\u003e GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \\\nIDENTIFIED BY 'MOT_DE_PASSE';\nMariaDB [(none)]\u003e exit\n```\n\n#### 2.2.2) Installation du service\n\n```bash\n# apt install keystone\n```\n\nEnsuite il faut donner au service la possibilité de se connecter à la base de donnée en éditant le fichier `/etc/keystone/keystone.conf`\n\n```config\n[database]\n ...\nconnection = mysql+pymysql://keystone:MOT_DE_PASSE@controller/keystone\n\n[token]\n ...\nprovider = fernet\n```\n\nMaintenant il faut initialiser le service\n\n```bash\n# su -s /bin/sh -c \"keystone-manage db_sync\" keystone\n# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone\n# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone\n# keystone-manage bootstrap --bootstrap-password ADMIN_PASS \\\n  --bootstrap-admin-url http://controller:5000/v3/ \\\n  --bootstrap-internal-url http://controller:5000/v3/ \\\n  --bootstrap-public-url http://controller:5000/v3/ \\\n  --bootstrap-region-id RegionOne\n```\n\n#### 2.2.3) Configuration d'Apache\n\nPour le bon fonctionnement du service http il faut configurer le nom du serveur dans le fichier `/etc/apache2/apache2.conf`\n\n```config\nServerName controller\n```\n\n#### 2.2.4) Finalisation de l'installation\n\nRedémarrage du service\n\n```bash\n# service apache2 restart\n```\n\nExportation des variables du compte administrateur\n\n```bash\n$ export OS_USERNAME=admin\n$ export OS_PASSWORD=ADMIN_PASS\n$ export OS_PROJECT_NAME=admin\n$ export OS_USER_DOMAIN_NAME=Default\n$ export OS_PROJECT_DOMAIN_NAME=Default\n$ export OS_AUTH_URL=http://controller:5000/v3\n$ export OS_IDENTITY_API_VERSION=3\n```\n\n#### 2.2.5) Création du domaine, projets, utilisateurs et rôles\n\nPour assurer l'identification le service d'authentification utilise une combinaison de domaines, projets, utilisateurs et rôles.\n\nLe domaine :\n\n```bash\n$ openstack domain create --description \"Domaine Exemple\" exemple\n```\n\nLe projet :\n\n```bash\n$ openstack project create --domain Default \\\n  --description \"Service Project\" service\n```\n\nIl faut également créer un projet pour les tâches sans droits administrateurs :\n\n```bash\n$ openstack project create --domain Default \\\n  --description \"Demo Project\" myproject\n```\n\nUn utilisateur :\n\n```bash\n$ openstack user create --domain Default \\\n  --password-prompt myuser\n```\n\nEt un rôle :\n\n```bash\n$ openstack role create myrole\n```\n\nOn termine en ajoutant le role à l'utilisateur et au projet :\n\n```bash\n$ openstack role add --project myproject --user myuser myrole\n```\n\n#### 2.2.6) Création des scripts client OpenStack\n\nPour simplififer la connexion nous allons créer deux scripts pour une connexion avec et sans les droits administrateur \n\n`admin-openrc` :\n\n```conf\nexport OS_PROJECT_DOMAIN_NAME=Default\nexport OS_USER_DOMAIN_NAME=Default\nexport OS_PROJECT_NAME=admin\nexport OS_USERNAME=admin\nexport OS_PASSWORD=ADMIN_PASS\nexport OS_AUTH_URL=http://controller:5000/v3\nexport OS_IDENTITY_API_VERSION=3\nexport OS_IMAGE_API_VERSION=2\n```\n\n`demo-openrc` :\n\n```conf\nexport OS_PROJECT_DOMAIN_NAME=Default\nexport OS_USER_DOMAIN_NAME=Default\nexport OS_PROJECT_NAME=myproject\nexport OS_USERNAME=myuser\nexport OS_PASSWORD=USER_PASS\nexport OS_AUTH_URL=http://controller:5000/v3\nexport OS_IDENTITY_API_VERSION=3\nexport OS_IMAGE_API_VERSION=2\n```\n\nPour utiliser un des scripts pour se connecter il suffit d'exécuter cette commande :\n\n```bash\n$ . admin-openrc\n```\n\nEt ensuite de demander un token au service :\n\n```bash\n$ openstack token issue\n```\n\n### 2.3) Installation de Glance sur `controller`\n\nL'étape suivante est l'installation du service d'image (Glance) sur `controller`.\n\n#### 2.3.1) Pré requis\n\n##### 2.3.1.1) Préparation de la base de données\n\nIl faut commencer par créer la base de données :\n\n```bash\n# mysql\n```\n\n```mysql\nMariaDB [(none)]\u003e CREATE DATABASE glance;\nMariaDB [(none)]\u003e GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \\\n  IDENTIFIED BY 'GLANCE_DBPASS';\nMariaDB [(none)]\u003e GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \\\n  IDENTIFIED BY 'GLANCE_DBPASS';\n```\n\n##### 2.3.1.2) Création du compte pour le service\n\nEnsuite on se connect avec les droits administrateurs à l'aide du script.\n\n```bash\n$ . admin-openrc\n```\n\nCréation de l'utilisateur :\n\n```bash\n$ openstack user create --domain default --password-prompt glance\n```\n\nAjout du rôle administrateur à l'utilisateur glance et projet service :\n\n```bash\n$ openstack role add --project service --user glance admin\n```\n\nCréation du service :\n\n```bash\n$ openstack service create --name glance \\\n  --description \"OpenStack Image\" image\n```\n\n##### 2.3.1.3) création des points de terminaison de l'API\n\n```bash\n$ openstack endpoint create --region RegionOne \\\n  image public http://controller:9292\n$ openstack endpoint create --region RegionOne \\\n  image internal http://controller:9292\n$ openstack endpoint create --region RegionOne \\\n  image admin http://controller:9292\n```\n\n#### 2.3.2) Installation et configuration du composant\n\nInstallation du paquet :\n\n```bash\n# apt install glance\n```\n\nEnsuite il faut éditer le fichier `/etc/glance/glance-api.conf` :\n\n* Dans la section [database], on configure la connexion à la BDD :\n\n```conf\n[database]\n# ...\nconnection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance\n```\n\n* Et dans les sections [keystone_authtoken] et [paste_deploy], on configure l'accès au service d'identité :\n\n```conf\n[keystone_authtoken]\n# ...\nwww_authenticate_uri = http://controller:5000\nauth_url = http://controller:5000\nmemcached_servers = controller:11211\nauth_type = password\nproject_domain_name = Default\nuser_domain_name = Default\nproject_name = service\nusername = glance\npassword = GLANCE_PASS\n\n[paste_deploy]\n# ...\nflavor = keystone\n```\n\n* Enfin dans la section [glance_store], on configure le stockage des fichiers d'image :\n\n```conf\n[glance_store]\n# ...\nstores = file,http\ndefault_store = file\nfilesystem_store_datadir = /var/lib/glance/images/\n```\n\nIl faut également modifier le fichier `/etc/glance/glance-registry.conf` :\n\n* Dans la section [database], on configure l'accès à la BDD :\n\n```conf\n[database]\n# ...\nconnection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance\n```\n\n* Et dans les sections [keystone_authtoken] et [paste_deploy], on configure l'accès au service d'identité :\n\n```conf\n[keystone_authtoken]\n# ...\nwww_authenticate_uri = http://controller:5000\nauth_url = http://controller:5000\nmemcached_servers = controller:11211\nauth_type = password\nproject_domain_name = Default\nuser_domain_name = Default\nproject_name = service\nusername = glance\npassword = GLANCE_PASS\n\n[paste_deploy]\n# ...\nflavor = keystone\n```\n\nAprès il faut initialiser la BDD :\n\n```bash\n# su -s /bin/sh -c \"glance-manage db_sync\" glance\n```\n\n#### 2.3.3) Finalisation de l'installation\n\n```bash\n# service glance-registry restart\n# service glance-api restart\n```\n\n### 2.4 Installation de Placement sur `controller`\n\n#### 2.4.1) Pré requis\n\n##### 2.4.1.1) Préparation de la base de données\n\nIl faut commencer par créer la base de données :\n\n```bash\n# mysql\n```\n\n```mysql\nMariaDB [(none)]\u003e CREATE DATABASE placement;\nMariaDB [(none)]\u003e GRANT ALL PRIVILEGES ON glance.* TO 'placement'@'localhost' \\\n  IDENTIFIED BY 'PLACEMENT_DBPASS';\nMariaDB [(none)]\u003e GRANT ALL PRIVILEGES ON glance.* TO 'placement'@'%' \\\n  IDENTIFIED BY 'PLACEMENT_DBPASS';\n```\n\n##### 2.4.1.2) Création du compte pour le service\n\nEnsuite on se connect avec les droits administrateurs à l'aide du script.\n\n```bash\n$ . admin-openrc\n```\n\nCréation de l'utilisateur :\n\n```bash\n$ openstack user create --domain default --password-prompt placement\n```\n\nAjout du rôle administrateur à l'utilisateur glance et projet service :\n\n```bash\n$ openstack role add --project service --user placement admin\n```\n\nCréation du service :\n\n```bash\n$ openstack service create --name placement \\\n  --description \"Placement API\" placement\n```\n\n##### 2.4.1.3) création des points de terminaison de l'API\n\n```bash\n$ openstack endpoint create --region RegionOne \\\n  placement public http://controller:8778\n$ openstack endpoint create --region RegionOne \\\n  placement internal http://controller:8778\n$ openstack endpoint create --region RegionOne \\\n  placement admin http://controller:8778\n```\n\n#### 2.4.2) Installation et configuration du composant\n\nInstallation du paquet :\n\n```bash\n# apt install placement-api\n```\n\nEnsuite on édit le fichier `/etc/placement/placement.conf` :\n\n* Dans la section [placement_database], on configure la connexion à la BDD :\n\n```conf\n[placement_database]\n# ...\nconnection = mysql+pymysql://placement:PLACEMENT_DBPASS@controller/placement\n```\n\n* Et dans les sections [api] et [keystone_authtoken], la connexion au service d'identité :\n\n```conf\n[api]\n# ...\nauth_strategy = keystone\n\n[keystone_authtoken]\n# ...\nauth_url = http://controller:5000/v3\nmemcached_servers = controller:11211\nauth_type = password\nproject_domain_name = default\nuser_domain_name = default\nproject_name = service\nusername = placement\npassword = PLACEMENT_PASS\n```\n\nIl faut après initialiser la base de données :\n\n```bash\n# su -s /bin/sh -c \"placement-manage db sync\" placement\n```\n\n#### 2.4.3) Finalisation de l'installation\n\n```bash\n# service apache2 restart\n```\n\n### 2.5) Installation de Nova\n\n#### 2.5.1) Partie sur `controller`\n\n##### 2.5.1.1) Pré requis\n\n###### 2.5.1.1.1) Préparation de la base de données\n\nIl faut commencer par créer la base de données :\n\n```bash\n# mysql\n```\n\n```mysql\nMariaDB [(none)]\u003e CREATE DATABASE nova_api;\nMariaDB [(none)]\u003e CREATE DATABASE nova;\nMariaDB [(none)]\u003e CREATE DATABASE nova_cell0;\n\nMariaDB [(none)]\u003e GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \\\n  IDENTIFIED BY 'NOVA_DBPASS';\nMariaDB [(none)]\u003e GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \\\n  IDENTIFIED BY 'NOVA_DBPASS';\n\nMariaDB [(none)]\u003e GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \\\n  IDENTIFIED BY 'NOVA_DBPASS';\nMariaDB [(none)]\u003e GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \\\n  IDENTIFIED BY 'NOVA_DBPASS';\n\nMariaDB [(none)]\u003e GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \\\n  IDENTIFIED BY 'NOVA_DBPASS';\nMariaDB [(none)]\u003e GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \\\n  IDENTIFIED BY 'NOVA_DBPASS';\n```\n\n##### 2.5.1.1.2) Création du compte pour le service\n\nEnsuite on se connect avec les droits administrateurs à l'aide du script.\n\n```bash\n$ . admin-openrc\n```\n\nCréation de l'utilisateur :\n\n```bash\n$ openstack user create --domain default --password-prompt nova\n```\n\nAjout du rôle administrateur à l'utilisateur glance et projet service :\n\n```bash\n$ openstack role add --project service --user nova admin\n```\n\nCréation du service :\n\n```bash\n$ openstack service create --name nova \\\n  --description \"OpenStack Compute\" compute\n```\n\n##### 2.5.1.1.3) Création des points de terminaison de l'API\n\n```bash\n$ openstack endpoint create --region RegionOne \\\n  compute public http://controller:8774/v2.1\n\n$ openstack endpoint create --region RegionOne \\\n  compute internal http://controller:8774/v2.1\n\n$ openstack endpoint create --region RegionOne \\\n  compute admin http://controller:8774/v2.1\n```\n\n#### 2.5.1.2) Installation et configuration du composant\n\nInstallation des paquets :\n\n```bash\n# apt install nova-api nova-conductor \\\n  nova-novncproxy nova-scheduler\n```\n\nIl faut éditer le fichier `/etc/nova/nova.conf` :\n\n* Dans les sections [api_database] et [database], on configure l'accès à la base de données :\n\n```conf\n[api_database]\n# ...\nconnection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api\n\n[database]\n# ...\nconnection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova\n```\n\n* Dans la section [DEFAULT], on configure la connexion à RabbitMQ\n\n```conf\n[DEFAULT]\n# ...\ntransport_url = rabbit://openstack:RABBIT_PASS@controller\n```\n\n* Dans les sections [api] et [keystone_authtoken], on configure l'accès au service d'identité :\n\n```conf\n[api]\n# ...\nauth_strategy = keystone\n\n[keystone_authtoken]\n# ...\nauth_url = http://controller:5000/v3\nmemcached_servers = controller:11211\nauth_type = password\nproject_domain_name = Default\nuser_domain_name = Default\nproject_name = service\nusername = nova\npassword = NOVA_PASS\n```\n\n* A nouveau dans la section [DEFAULT], on indique l'IP de `controller` :\n\n```conf\n[DEFAULT]\n# ...\nmy_ip = 10.10.10.10\n```\n\n* Toujous dans la section [DEFAULT], on active le suppot du réseau :\n\n```conf\n[DEFAULT]\n# ...\nuse_neutron = true\nfirewall_driver = nova.virt.firewall.NoopFirewallDriver\n```\n\n* Dans la section [neutron], on va configurer d'avance la connexion au service neutron qui n'est pas encore installé\n\n```conf\n[neutron]\n# ...\nurl = http://controller:9696\nauth_url = http://controller:5000\nauth_type = password\nproject_domain_name = default\nuser_domain_name = default\nregion_name = RegionOne\nproject_name = service\nusername = neutron\npassword = NEUTRON_PASS\nservice_metadata_proxy = true\nmetadata_proxy_shared_secret = METADATA_SECRET\n```\n\n* Dans la section [vnc], on configure le proxy du vnc :\n\n```conf\n[vnc]\nenabled = true\n# ...\nserver_listen = $my_ip\nserver_proxyclient_address = $my_ip\n```\n\n* Dans la section [glance], on configure la connexion à l'api de glance :\n\n```conf\n[glance]\n# ...\napi_servers = http://controller:9292\n```\n\n* Dans la section [oslo_concurrency], on configure le lock_path :\n\n```conf\n[oslo_concurrency]\n# ...\nlock_path = /var/lib/nova/tmp\n```\n\n* De nouveau dans la section [DEFAULT]\nComme indiqué dans la documentation officielle il faut retiré le `log_dir` du fichier de configuration.\n\n* Dans la section [placement], on configure l'accès au service Placement\n\n```conf\n[placement]\n# ...\nregion_name = RegionOne\nproject_domain_name = Default\nproject_name = service\nauth_type = password\nuser_domain_name = Default\nauth_url = http://controller:5000/v3\nusername = placement\npassword = PLACEMENT_PASS\n```\n\nEnsuite on initialise les bases de données :\n\n```bash\n# su -s /bin/sh -c \"nova-manage api_db sync\" nova\n# su -s /bin/sh -c \"nova-manage cell_v2 map_cell0\" nova\n# su -s /bin/sh -c \"nova-manage cell_v2 create_cell --name=cell1 --verbose\" nova\n# su -s /bin/sh -c \"nova-manage db sync\" nova\n# su -s /bin/sh -c \"nova-manage cell_v2 list_cells\" nova\n```\n\n##### 2.5.1.3) Finalisation de l'installation\n\nPour terminer l'installation il faut redémarrer les services :\n\n```bash\n# service nova-api restart\n# service nova-scheduler restart\n# service nova-conductor restart\n# service nova-novncproxy restart\n```\n\n#### 2.5.2) Partie sur `compute` et `compute2`\n\n#### 2.5.2.1) Installation du composant\n\nCette partie doit être réalisée sur toutes les machines étant destinées au rôle compute.\n\nInstallation du paquet :\n\n```bash\n# apt install nova-compute\n```\n\nIl faut éditer le fichier `/etc/nova/nova.conf` :\n\n* Dans la section [DEFAULT], on configure RabbitMQ\n\n```conf\n[DEFAULT]\n# ...\ntransport_url = rabbit://openstack:RABBIT_PASS@controller\n```\n\n* Dans les sections [api] et [keystone_authtoken], on configure l'accès au service d'identité\n\n```conf\n[api]\n# ...\nauth_strategy = keystone\n\n[keystone_authtoken]\n# ...\nauth_url = http://controller:5000/v3\nmemcached_servers = controller:11211\nauth_type = password\nproject_domain_name = Default\nuser_domain_name = Default\nproject_name = service\nusername = nova\npassword = NOVA_PASS\n```\n\n* A nouveau dans la section [DEFAULT], on configure l'adresse ip :\n\n```conf\n[DEFAULT]\n# ...\nmy_ip = MANAGEMENT_INTERFACE_IP_ADDRESS\n```\n\n* Toujours dans la section [DEFAULT], on configure le support du réseau :\n\n```conf\n[DEFAULT]\n# ...\nuse_neutron = true\nfirewall_driver = nova.virt.firewall.NoopFirewallDriver\n```\n\n* Dans la section [neutron], on configure la connexion au service neutron qu'on mettra en place par la suite :\n\n```conf\n[neutron]\n# ...\nurl = http://controller:9696\nauth_url = http://controller:5000\nauth_type = password\nproject_domain_name = default\nuser_domain_name = default\nregion_name = RegionOne\nproject_name = service\nusername = neutron\npassword = NEUTRON_PASS\n```\n\n* Dans la section [vnc], on configure l'accès vnc à distance :\n\n```conf\n[vnc]\n# ...\nenabled = true\nserver_listen = 0.0.0.0\nserver_proxyclient_address = $my_ip\nnovncproxy_base_url = http://controller:6080/vnc_auto.html\n```\n\n* Dans la section [glance], on configure l'accès à l'api glance :\n\n```conf\n[glance]\n# ...\napi_servers = http://controller:9292\n```\n\n* Dans la section [oslo_concurrency], on configure le lock_path :\n\n```conf\n[oslo_concurrency]\n# ...\nlock_path = /var/lib/nova/tmp\n```\n\n* Dans la section [placement], on configure l'accès à l'api de Placement :\n\n```conf\n[placement]\n# ...\nregion_name = RegionOne\nproject_domain_name = Default\nproject_name = service\nauth_type = password\nuser_domain_name = Default\nauth_url = http://controller:5000/v3\nusername = placement\npassword = PLACEMENT_PASS\n```\n\n#### 2.5.2.2) Finalisation de l'installation\n\nIl faut vérifier si la/les machine(s) peuvent utiliser l'accélération processeur pour la virtualisation :\n\n```bash\n# egrep -c '(vmx|svm)' /proc/cpuinfo\n```\n\n**ATTENTION** si le résultat est différent de `0` l'étape suivante n'est pas nécessaire et pourrait ralentir l'exécution des instances.\nSi le résultat de la commande précédente est `0` il faut modifier le fichier `/etc/nova/nova-compute.conf` :\n\n* Dans la section [libvirt]\n\n```conf\n[libvirt]\n# ...\nvirt_type = qemu\n```\n\nIl faut ensuite redémarrer le service :\n\n```bash\nservice nova-compute restart\n```\n\n#### 2.5.3) A nouveau sur `controller`\n\n##### 2.5.3.1) Ajout des `compute`\n\nIl faut maintenant ajouter les machines dans la base de données :\n\n```bash\n$ . admin-openrc\n\n# su -s /bin/sh -c \"nova-manage cell_v2 discover_hosts --verbose\" nova\nFound 2 cell mappings.\nSkipping cell0 since it does not contain hosts.\nGetting computes from cell 'cell1': f741e0b3-b740-45a4-823f-a9fbbb4e6e81\nChecking host mapping for compute host 'compute': 260ba75d-2c7e-40c1-b2fa-01cecb501d3a\nCreating host mapping for compute host 'compute': 260ba75d-2c7e-40c1-b2fa-01cecb501d3a\nChecking host mapping for compute host 'compute2': 1918c90d-93e0-416b-a724-2393f4b2d348\nCreating host mapping for compute host 'compute2': 1918c90d-93e0-416b-a724-2393f4b2d348\nFound 2 unmapped computes in cell: f741e0b3-b740-45a4-823f-a9fbbb4e6e81\n\n```\n\n### 2.6) Installation de Neutron\n\nNeutron est le service qui s'occupe de la gestion de la partie réseau d'openstack.\n\n#### 2.6.1) Partie sur `controller`\n\n##### 2.6.1.1) Pré requis\n\n###### 2.6.1.1.1) Préparation de la base de données\n\nIl faut commencer par créer la base de données :\n\n```bash\n# mysql\n```\n\n```mysql\nMariaDB [(none)] CREATE DATABASE neutron;\n\nMariaDB [(none)]\u003e GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \\\n  IDENTIFIED BY 'NEUTRON_DBPASS';\nMariaDB [(none)]\u003e GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \\\n  IDENTIFIED BY 'NEUTRON_DBPASS';\n```\n\n###### 2.6.1.1.2) Création du compte pour le service\n\nEnsuite on se connect avec les droits administrateurs à l'aide du script.\n\n```bash\n$ . admin-openrc\n```\n\n```bash\n$ openstack user create --domain default --password-prompt neutron\n$ openstack role add --project service --user neutron admin\n$ openstack service create --name neutron \\\n  --description \"OpenStack Networking\" network\n```\n\n###### 2.6.1.1.3) Création des points de terminaison de l'API\n\n```bash\n$ openstack endpoint create --region RegionOne \\\n  network public http://controller:9696\n$ openstack endpoint create --region RegionOne \\\n  network internal http://controller:9696\n$ openstack endpoint create --region RegionOne \\\n  network admin http://controller:9696\n```\n\n##### 2.6.1.2) Configuration de l'option réseau\n\nDeux options sont disponibles pour la configuration réseau d'OpenStack, ici j'utiliserai la première, pour plus d'information rapportez-vous à la [documentattion officielle](https://docs.openstack.org/neutron/stein/install/overview.html).\n\n###### 2.6.1.2.1) Installation des composants\n\n```bash\n# apt install neutron-server neutron-plugin-ml2 \\\n  neutron-linuxbridge-agent neutron-dhcp-agent \\\n  neutron-metadata-agent\n```\n\n###### 2.6.1.2.2) Configuration du composant serveur\n\nEdition du fichier `/etc/neutron/neutron.conf` :\n\n* Dans la section [database], on configure la connexion à la base de données :\n\n```conf\n[database]\n# ...\nconnection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron\n```\n\n* Dans la section [DEFAULT], on active le plug-in ML2 et désactive les plug-ins additionnels :\n\n```conf\n[DEFAULT]\n# ...\ncore_plugin = ml2\nservice_plugins =\n```\n\n* De nouveau dans la section [DEFAULT], on configure l'accès à RabbitMQ :\n\n```conf\n[DEFAULT]\n# ...\ntransport_url = rabbit://openstack:RABBIT_PASS@controller\n```\n\n* Dans les sections [DEFAULT] et [keystone_authtoken], on configure l'accès au service d'identité :\n\n```conf\n[DEFAULT]\n# ...\nauth_strategy = keystone\n\n[keystone_authtoken]\n# ...\nwww_authenticate_uri = http://controller:5000\nauth_url = http://controller:5000\nmemcached_servers = controller:11211\nauth_type = password\nproject_domain_name = default\nuser_domain_name = default\nproject_name = service\nusername = neutron\npassword = NEUTRON_PASS\n```\n\n* Dans les sections [DEFAULT] et [nova], on configure la communication entre le service Nova et Neutron :\n\n```conf\n[DEFAULT]\n# ...\nnotify_nova_on_port_status_changes = true\nnotify_nova_on_port_data_changes = true\n\n[nova]\n# ...\nauth_url = http://controller:5000\nauth_type = password\nproject_domain_name = default\nuser_domain_name = default\nregion_name = RegionOne\nproject_name = service\nusername = nova\npassword = NOVA_PASS\n```\n\n* Dans la section [oslo_concurrency], on configure le lock_path :\n\n```conf\n[oslo_concurrency]\n# ...\nlock_path = /var/lib/neutron/tmp\n```\n\n###### 2.6.1.2.3) Configuration du plug-in ML2\n\nOn édit le fichier `/etc/neutron/plugins/ml2/ml2_conf.ini` :\n\n* Dans la section [ml2], on configure les réseaux flat et VLAN :\n\n```conf\n[ml2]\n# ...\ntype_drivers = flat,vlan\n```\n\n* Dans la section [ml2], on désactive les fonctionnalités réseau \"self-service\" :\n\n```conf\n[ml2]\n# ...\ntenant_network_types =\n```\n\n* Dans la section [ml2], on configure le pont réseau Linux :\n\n```conf\n[ml2]\n# ...\nmechanism_drivers = linuxbridge\n```\n\n* Dans la section [ml2], on configure l'extension du port de sécurité :\n\n```conf\n[ml2]\n# ...\nextension_drivers = port_security\n```\n\n* Dans la section [ml2_type_flat], on configure le réseau flat comme fournisseur de réseau virtuel :\n\n```conf\n[ml2_type_flat]\n# ...\nflat_networks = provider\n```\n\n* Dans la section [securitygroup], on active les groupes de sécurité :\n\n```conf\n[securitygroup]\n# ...\nenable_ipset = true\n```\n\n###### 2.6.1.2.4) Configuration de l'agent de pont Linux\n\nEdition du fichier `/etc/neutron/plugins/ml2/linuxbridge_agent.ini` :\n\n* Dans la section [linux_bridge], on relie l'interface reliée au réseau externe au fournisseur de réseau virtuel :\n\n```conf\n[linux_bridge]\nphysical_interface_mappings = provider:ens19\n```\n\nATTENTION: _Remplacez ens19 par l'interface correspondant dans votre configuration_\n\n* Dans la section [vxlan], on désactive la fonction vxlan de Neutron :\n\n```conf\n[vxlan]\nenable_vxlan = false\n```\n\n* Dans la section [securitygroup], on active les groupes de sécurité et le pare-feu du pont linux :\n\n```conf\n[securitygroup]\n# ...\nenable_security_group = true\nfirewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver\n```\n\n###### 2.6.1.2.5) Configuration de l'agent DHCP\n\nEdition du fichier `/etc/neutron/dhcp_agent.ini` :\n\n* Dans la section [DEFAULT], on configure les différentes fonctions de l'agent DHCP :\n\n```conf\n[DEFAULT]\n# ...\ninterface_driver = linuxbridge\ndhcp_driver = neutron.agent.linux.dhcp.Dnsmasq\nenable_isolated_metadata = true\n```\n\n###### 2.6.1.2.6) Configuration de l'agent de métadonnées\n\nEdition du fichier `/etc/neutron/metadata_agent.ini` :\n\n* Dans la section [DEFAULT], on configure le mot de passe de l'agent\n\n```conf\n[DEFAULT]\n# ...\nnova_metadata_host = controller\nmetadata_proxy_shared_secret = METADATA_SECRET\n```\n\n#### 2.6.1.3) Finalisation de l'installation\n\nInitialisation de la base de données :\n\n```bash\n# su -s /bin/sh -c \"neutron-db-manage --config-file /etc/neutron/neutron.conf \\\n  --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head\" neutron\n```\n\nRedémarrage des différents services :\n\n```bash\n# service nova-api restart\n# service neutron-server restart\n# service neutron-linuxbridge-agent restart\n# service neutron-dhcp-agent restart\n# service neutron-metadata-agent restart\n```\n\n#### 2.6.2) Partie sur les noeuds `compute`\n\n##### 2.6.2.1) Installation du composant\n\n```bash\n# apt install neutron-linuxbridge-agent\n```\n\n##### 2.6.2.2) Configuration du composant\n\nEdition du fichier `/etc/neutron/neutron.conf` :\n\n* Dans la section [database], on désactive l'accès à la base de données :\nLes noeuds `compute` n'ont pas besoin d'avoir accès à la BDD donc il faut commenté tout ce qui se trouve dans cette section.\n\n* Dans la section [DEFAULT], on configure l'accès à RabbitMQ :\n\n```conf\n[DEFAULT]\n# ...\ntransport_url = rabbit://openstack:RABBIT_PASS@controller\n```\n\n* Dans les sections [DEFAULT] et [keystone_authtoken], on configure la connexion au service d'identité\n\n```conf\n[DEFAULT]\n# ...\nauth_strategy = keystone\n\n[keystone_authtoken]\n# ...\nwww_authenticate_uri = http://controller:5000\nauth_url = http://controller:5000\nmemcached_servers = controller:11211\nauth_type = password\nproject_domain_name = default\nuser_domain_name = default\nproject_name = service\nusername = neutron\npassword = NEUTRON_PASS\n```\n\n* Dans la section [oslo_concurrency], on configure le lock_path\n\n```conf\n[oslo_concurrency]\n# ...\nlock_path = /var/lib/neutron/tmp\n```\n\n##### 2.6.2.3) Configuration de l'agent du pont Linux\n\nIl faut éditer le fichier `/etc/neutron/plugins/ml2/linuxbridge_agent.ini` :\n\n* Dans la section [linux_bridge], on relie l'interface reliée au réseau externe au fournisseur de réseau virtuel :\n\n```conf\n[linux_bridge]\nphysical_interface_mappings = provider:ens19\n```\n\n_Remplacez ens19 par l'interface correspondant dans votre configuration_\n\n* Dans la section [vxlan], on désactive la fonction vxlan de Neutron :\n\n```conf\n[vxlan]\nenable_vxlan = false\n```\n\n* Dans la section [securitygroup], on active les groupes de sécurité et le pare-feu du pont linux :\n\n```conf\n[securitygroup]\n# ...\nenable_security_group = true\nfirewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver\n```\n\n##### 2.6.2.4) Finalisation de l'installation\n\nIl faut redémarrer les services :\n\n```bash\n# service nova-compute restart\n# service neutron-linuxbridge-agent restart\n```\n\n### 2.7) Installation de Horizon sur `controller`\n\n#### 2.7.1) Installation et configuration du composant\n\nInstallation des paquets :\n\n```bash\n# apt install openstack-dashboard\n```\n\nEnsuite édition du script python `/etc/openstack-dashboard/local_settings.py` :\n\n* Configuration du Dashboard pour utiliser les services OpenStack de `controller` :\n\n```python\nOPENSTACK_HOST = \"controller\"\n```\n\n* Configuration des hôtes autorisés à se connecter au Dashboard :\n\n```python\nALLOWED_HOSTS = ['one.example.com', 'two.example.com']\n```\n\n__Remarque :__ [*] permet d'autorisé tous les hôtes.\\\n**ATTENTION :** la configuration doit être faite dans la section de configuration du Dashboard et non d'Ubuntu !\n\n* Configuration du stockage `memcached` :\n\n```python\nSESSION_ENGINE = 'django.contrib.sessions.backends.cache'\n\nCACHES = {\n    'default': {\n         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',\n         'LOCATION': 'controller:11211',\n    }\n}\n```\n\n__Remarque :__ Il faut commenter les autres configuration de session de stockage\n\n* Activation de l'API d'identité version 3 :\n\n```python\nOPENSTACK_KEYSTONE_URL = \"http://%s:5000/v3\" % OPENSTACK_HOST\n```\n\n* Activation du support multi-domaines :\n\n```python\nOPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True\n```\n\n* Configuration des versions des API\n\n```python\nOPENSTACK_API_VERSIONS = {\n    \"identity\": 3,\n    \"image\": 2,\n    \"volume\": 3,\n}\n```\n\n* Configuration du domaine par défaut :\n\n```python\nOPENSTACK_KEYSTONE_DEFAULT_DOMAIN = \"Default\"\n```\n\n* Configuration du rôle par défaut pour les utilisateur créés depuis le Dashboard :\n\n```python\nOPENSTACK_KEYSTONE_DEFAULT_ROLE = \"user\"\n```\n\n* Si l'option 1 a été choisi à l'installation de Neutron il faut désactiver certains services :\n\n```python\nOPENSTACK_NEUTRON_NETWORK = {\n    ...\n    'enable_router': False,\n    'enable_quotas': False,\n    'enable_ipv6': False,\n    'enable_distributed_router': False,\n    'enable_ha_router': False,\n    'enable_lb': False,\n    'enable_firewall': False,\n    'enable_vpn': False,\n    'enable_fip_topology_check': False,\n}\n```\n\n* Changement de la TIME ZONE :\n\n```python\nTIME_ZONE = \"Europe/Paris\"\n```\n\nEnsuite il faut ajouter une ligne dans le fichier `/etc/apache2/conf-available/openstack-dashboard.conf` si elle n'est pas déjà présente :\n\n```conf\nWSGIApplicationGroup %{GLOBAL}\n```\n\n#### 2.7.2) Finalisation de l'installation\n\n```bash\n# service apache2 reload\n```\n\n### 2.8) Installation de Cinder\n\n#### 2.8.1) Partie sur `controller`\n\n##### 2.8.1.1) Pré requis\n\nCréation de la base de données :\n\n```bash\n# mysql\n```\n\nUtilisation des droits admin :\n\n```bash\n$ . admin-openrc\n```\n\nCréation des identifiants du service :\n\n* Création de l'utilisateur :\n\n```bash\n$ openstack user create --domain default --password-prompt cinder\n```\n\n* Ajout du rôle admin à l'utilisateur :\n\n```bash\n$ openstack role add --project service --user cinder admin\n```\n\n* Création des entités de service `cinderv2` et `conderv3` :\n\n```bash\n$ openstack service create --name cinderv2 \\\n  --description \"OpenStack Block Storage\" volumev2\n\n$ openstack service create --name cinderv3 \\\n  --description \"OpenStack Block Storage\" volumev3\n```\n\n* Création des points de terminaison de l'API :\n\n```bash\n$ openstack endpoint create --region RegionOne \\\n  volumev2 public http://controller:8776/v2/%\\(project_id\\)s\n\n$ openstack endpoint create --region RegionOne \\\n  volumev2 internal http://controller:8776/v2/%\\(project_id\\)s\n\n$ openstack endpoint create --region RegionOne \\\n  volumev2 admin http://controller:8776/v2/%\\(project_id\\)s\n```\n\n```bash\n$ openstack endpoint create --region RegionOne \\\n  volumev3 public http://controller:8776/v3/%\\(project_id\\)s\n\n$ openstack endpoint create --region RegionOne \\\n  volumev3 internal http://controller:8776/v3/%\\(project_id\\)s\n\n$ openstack endpoint create --region RegionOne \\\n  volumev3 admin http://controller:8776/v3/%\\(project_id\\)s\n```\n\n##### 2.8.1.2) Installation et configuration des composants\n\nInstallation des composants :\n\n```bash\n# apt install cinder-api cinder-scheduler\n```\n\nEdition du fichier `/etc/cinder/cinder.conf` :\n\n* Dans la section [database], on configure l'accès à la BDD :\n\n```conf\n[database]\n# ...\nconnection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder\n```\n\n* Dans la section [DEFAULT], on configure l'accès à RabbitMQ :\n\n```conf\n[DEFAULT]\n# ...\ntransport_url = rabbit://openstack:RABBIT_PASS@controller\n```\n\n* Dans les section [DEFAULT] et [keystone_authtoken], on configure l'accès au service d'identité :\n\n```conf\n[DEFAULT]\n# ...\nauth_strategy = keystone\n\n[keystone_authtoken]\n# ...\nwww_authenticate_uri = http://controller:5000\nauth_url = http://controller:5000\nmemcached_servers = controller:11211\nauth_type = password\nproject_domain_name = default\nuser_domain_name = default\nproject_name = service\nusername = cinder\npassword = CINDER_PASS\n```\n\n* Dans la section [DEFAULT], on indique l'ip de `controller` :\n\n```conf\n[DEFAULT]\n# ...\nmy_ip = 10.0.0.11\n```\n\n* Dans la section [oslo_concurrency], on configure le lock_path :\n\n```conf\n[oslo_concurrency]\n# ...\nlock_path = /var/lib/cinder/tmp\n```\n\nInitialisation de la base de données :\n\n```bash\n# su -s /bin/sh -c \"cinder-manage db sync\" cinder\n```\n\n##### 2.8.1.3) Configuration de Compute pour l'utilisation de Cinder\n\nEdition du fichier `/etc/nova/nova.conf` :\n\n```conf\n[cinder]\nos_region_name = RegionOne\n```\n\n##### 2.8.1.4) Finalisation de l'installation\n\nRedémarrage des services :\n\n```bash\n# service nova-api restart\n# service cinder-scheduler restart\n# service apache2 restart\n```\n\n#### 2.8.2) Partie sur `storage1`\n\n##### 2.8.2.1) Pré requis\n\nInstallation des utilitaires :\n\n```bash\n# apt install lvm2 thin-provisioning-tools\n```\n\nCréation du volume physique `/dev/sdb` :\n\n```bash\n# pvcreate /dev/sdb\n\nPhysical volume \"/dev/sdb\" successfully created.\n```\n\nCréation du groupe de volume `cinder-volumes` :\n\n```bash\n# vgcreate cinder-volumes /dev/sdb\n\nVolume group \"cinder-volumes\" successfully created\n```\n\n##### 2.8.2.2) Installation et configuration du composant\n\nInstallation du paquet :\n\n```bash\n# apt install cinder-volume\n```\n\nEdition du fichier `/etc/cinder/cinder.conf` :\n\n* Dans la section [database], on configure l'accès à la base de données :\n\n```conf\n[database]\n# ...\nconnection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder\n```\n\n* Dans la section [DEFAULT], on configure l'accès à RabbitMQ :\n\n```conf\n[DEFAULT]\n# ...\ntransport_url = rabbit://openstack:RABBIT_PASS@controller\n```\n\n* Dans les section [DEFAULT] et [keystone_authtoken], on configure l'accès au service d'identité :\n\n```conf\n[DEFAULT]\n# ...\nauth_strategy = keystone\n\n[keystone_authtoken]\n# ...\nwww_authenticate_uri = http://controller:5000\nauth_url = http://controller:5000\nmemcached_servers = controller:11211\nauth_type = password\nproject_domain_name = default\nuser_domain_name = default\nproject_name = service\nusername = cinder\npassword = CINDER_PASS\n```\n\n* Dans la section [DEFAULT], on configure l'ip relié au réseau d'OpenStack :\n\n```conf\n[DEFAULT]\n# ...\nmy_ip = MANAGEMENT_INTERFACE_IP_ADDRESS\n```\n\n* Dans la section [lvm], on configure le stockage :\n\n```conf\n[lvm]\n# ...\nvolume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver\nvolume_group = cinder-volumes\ntarget_protocol = iscsi\ntarget_helper = tgtadm\n```\n\n* Dans la section [DEFAULT], on active le stockage LVM :\n\n```conf\n[DEFAULT]\n# ...\nenabled_backends = lvm\n```\n\n* Dans la section [DEFAULT] à nouveau, on configure l'accès au service d'image :\n\n```conf\n[DEFAULT]\n# ...\nglance_api_servers = http://controller:9292\n```\n\n* Dans la section [oslo_concurrency], on configure le lock_path :\n\n```conf\n[oslo_concurrency]\n# ...\nlock_path = /var/lib/cinder/tmp\n```\n\n##### 2.8.2.3) Finalisation de l'installation\n\nredémarrage des services :\n\n```bash\n# service tgt restart\n# service cinder-volume restart\n```\n\n## 3) Fin de l'installation\n\nMaintenant l'installation d'OpenStack est terminée.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthystips%2Fopenstack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthystips%2Fopenstack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthystips%2Fopenstack/lists"}