{"id":36757,"date":"2025-01-21T15:14:31","date_gmt":"2025-01-21T14:14:31","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=36757"},"modified":"2025-01-21T15:14:31","modified_gmt":"2025-01-21T14:14:31","slug":"creating-your-private-cloud-using-openstack-4-the-image-and-placement-services","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\/","title":{"rendered":"Creating your private cloud using OpenStack \u2013 (4) \u2013 The Image and Placement services"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">By the end of the <a href=\"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-3-keystone-the-identity-service\/\" target=\"_blank\" rel=\"noreferrer noopener\">last post<\/a> we finally got the first OpenStack service up and running: Keystone, the Identity Service. Going back to the list of <a href=\"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-1-introduction\/\" target=\"_blank\" rel=\"noreferrer noopener\">services we need at a minimum<\/a>, this still leaves us with some more to setup:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/docs.openstack.org\/keystone\/latest\/\" target=\"_blank\" rel=\"noreferrer noopener\">Keystone<\/a>: Identity service (done)<\/li>\n\n\n\n<li><a href=\"https:\/\/docs.openstack.org\/glance\/latest\/\" target=\"_blank\" rel=\"noreferrer noopener\">Glance<\/a>: Image service<\/li>\n\n\n\n<li><a href=\"https:\/\/docs.openstack.org\/placement\/latest\/\" target=\"_blank\" rel=\"noreferrer noopener\">Placement<\/a>: Placement service<\/li>\n\n\n\n<li><a href=\"https:\/\/docs.openstack.org\/nova\/latest\/\" target=\"_blank\" rel=\"noreferrer noopener\">Nova<\/a>: Compute service<\/li>\n\n\n\n<li><a href=\"https:\/\/docs.openstack.org\/neutron\/latest\/\" target=\"_blank\" rel=\"noreferrer noopener\">Neutron<\/a>: Network service<\/li>\n\n\n\n<li><a href=\"https:\/\/docs.openstack.org\/horizon\/latest\/\" target=\"_blank\" rel=\"noreferrer noopener\">Horizon<\/a>: The OpenStack dashboard<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">In this post we&#8217;ll setup the Image Service (Glance) and the Placement service. The Glance service is responsible for providing virtual machine images and enables users to discover, register, and retrieve them. Glance (as well as Keystone) exposes an API to query image metadata and to retrieve images.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There are several options for storing those virtual machine images (including block storage), but to keep this as simple as possible we&#8217;ll use a directory on the controller node.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Before we start, this is how our setup looks like currently:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"416\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2025\/01\/ostack7-1-1024x416.png\" alt=\"\" class=\"wp-image-36759\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2025\/01\/ostack7-1-1024x416.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2025\/01\/ostack7-1-300x122.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2025\/01\/ostack7-1-768x312.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2025\/01\/ostack7-1.png 1298w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">We&#8217;ve done almost all the work on the controller node, and Glance is no exception to that. As with Keystone, Glance needs to store some stuff in PostgreSQL (remember that you also could use MySQL or SQLite), in this case metadata about the images. Very much the same as we did it for Keystone, we&#8217;ll create a dedicated user and database for that:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,3,5]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ su - postgres -c &quot;psql -c \\&quot;create user glance with login password &#039;admin&#039;\\&quot;&quot;\nCREATE ROLE\n&#x5B;root@controller ~]$ su - postgres -c &quot;psql -c &#039;create database glance with owner=glance&#039;&quot;\nCREATE DATABASE\n&#x5B;root@controller ~]$ su - postgres -c &quot;psql -l&quot;\n                                                       List of databases\n   Name    |  Owner   | Encoding | Locale Provider |   Collate   |    Ctype    | ICU Locale | ICU Rules |   Access privileges   \n-----------+----------+----------+-----------------+-------------+-------------+------------+-----------+-----------------------\n glance    | glance   | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | \n keystone  | keystone | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | \n postgres  | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | \n template0 | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =c\/postgres          +\n           |          |          |                 |             |             |            |           | postgres=CTc\/postgres\n template1 | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =c\/postgres          +\n           |          |          |                 |             |             |            |           | postgres=CTc\/postgres\n(5 rows)\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The next step is creating the Glance service credentials:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,2,18]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ . admin-openrc\n&#x5B;root@controller ~]$ openstack user create --domain default --password-prompt glance\nUser Password:\nRepeat User Password:\nNo password was supplied, authentication will fail when a user does not have a password.\n+---------------------+----------------------------------+\n| Field               | Value                            |\n+---------------------+----------------------------------+\n| default_project_id  | None                             |\n| domain_id           | default                          |\n| email               | None                             |\n| enabled             | True                             |\n| id                  | eea5924c69c040428c5c4ef82f46c61b |\n| name                | glance                           |\n| description         | None                             |\n| password_expires_at | None                             |\n+---------------------+----------------------------------+\n&#x5B;root@controller ~]$  openstack service create --name glance --description &quot;OpenStack Image&quot; image\n+-------------+----------------------------------+\n| Field       | Value                            |\n+-------------+----------------------------------+\n| id          | db04f3f7c7014eb7883e074625d31391 |\n| name        | glance                           |\n| type        | image                            |\n| enabled     | True                             |\n| description | OpenStack Image                  |\n+-------------+----------------------------------+\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Create the endpoints:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,15,29]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ openstack endpoint create --region RegionOne image public http:\/\/controller:9292\n+--------------+----------------------------------+\n| Field        | Value                            |\n+--------------+----------------------------------+\n| enabled      | True                             |\n| id           | bde2499cd6c34c19aa221d64b9d0f2a0 |\n| interface    | public                           |\n| region       | RegionOne                        |\n| region_id    | RegionOne                        |\n| service_id   | db04f3f7c7014eb7883e074625d31391 |\n| service_name | glance                           |\n| service_type | image                            |\n| url          | http:\/\/controller:9292           |\n+--------------+----------------------------------+\n&#x5B;root@controller ~]$ openstack endpoint create --region RegionOne image internal http:\/\/controller:9292\n+--------------+----------------------------------+\n| Field        | Value                            |\n+--------------+----------------------------------+\n| enabled      | True                             |\n| id           | 046e64889cda43c2bfc36471e40a7a2d |\n| interface    | internal                         |\n| region       | RegionOne                        |\n| region_id    | RegionOne                        |\n| service_id   | db04f3f7c7014eb7883e074625d31391 |\n| service_name | glance                           |\n| service_type | image                            |\n| url          | http:\/\/controller:9292           |\n+--------------+----------------------------------+\n&#x5B;root@controller ~]$ openstack endpoint create --region RegionOne image admin http:\/\/controller:9292\n+--------------+----------------------------------+\n| Field        | Value                            |\n+--------------+----------------------------------+\n| enabled      | True                             |\n| id           | c8ddc792772048a18179877355fdbd3f |\n| interface    | admin                            |\n| region       | RegionOne                        |\n| region_id    | RegionOne                        |\n| service_id   | db04f3f7c7014eb7883e074625d31391 |\n| service_name | glance                           |\n| service_type | image                            |\n| url          | http:\/\/controller:9292           |\n+--------------+----------------------------------+\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Install the operating system package:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ dnf install openstack-glance -y\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">And finally the configuration of the Glance API service:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;root@ostack-controller ~]$ egrep -v &quot;^#|^$&quot; \/etc\/glance\/glance-api.conf\n&#x5B;DEFAULT]\nenabled_backends=fs:file\n&#x5B;barbican]\n&#x5B;barbican_service_user]\n&#x5B;cinder]\n&#x5B;cors]\n&#x5B;database]\nconnection = postgresql+psycopg2:\/\/glance:admin@localhost\/glance\n&#x5B;file]\n&#x5B;glance.store.http.store]\n&#x5B;glance.store.rbd.store]\n&#x5B;glance.store.s3.store]\n&#x5B;glance.store.swift.store]\n&#x5B;glance.store.vmware_datastore.store]\n&#x5B;glance_store]\ndefault_backend = fs\n&#x5B;healthcheck]\n&#x5B;image_format]\n&#x5B;key_manager]\n&#x5B;keystone_authtoken]\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 = admin\n&#x5B;os_brick]\n&#x5B;oslo_concurrency]\n&#x5B;oslo_limit]\nauth_url = http:\/\/controller:5000\nauth_type = password\nuser_domain_id = default\nusername = glance\nsystem_scope = all\npassword = admin\nendpoint_id = 1e7748b2d7d44fb6a0c17edb3c68c4de\nregion_name = RegionOne\n&#x5B;oslo_messaging_amqp]\n&#x5B;oslo_messaging_kafka]\n&#x5B;oslo_messaging_notifications]\n&#x5B;oslo_messaging_rabbit]\n&#x5B;oslo_middleware]\n&#x5B;oslo_policy]\n&#x5B;oslo_reports]\n&#x5B;paste_deploy]\nflavor = keystone\n&#x5B;profiler]\n&#x5B;task]\n&#x5B;taskflow_executor]\n&#x5B;vault]\n&#x5B;wsgi]\n&#x5B;fs]\nfilesystem_store_datadir = \/var\/lib\/glance\/images\/\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The endpoint_id is the public image endpoint ID:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ openstack endpoint list --service glance --region RegionOne\n+----------------------------------+-----------+--------------+--------------+---------+-----------+------------------------+\n| ID                               | Region    | Service Name | Service Type | Enabled | Interface | URL                    |\n+----------------------------------+-----------+--------------+--------------+---------+-----------+------------------------+\n| bde2499cd6c34c19aa221d64b9d0f2a0 | RegionOne | glance       | image        | True    | public    | http:\/\/controller:9292 |\n| 046e64889cda43c2bfc36471e40a7a2d | RegionOne | glance       | image        | True    | internal  | http:\/\/controller:9292 |\n| c8ddc792772048a18179877355fdbd3f | RegionOne | glance       | image        | True    | admin     | http:\/\/controller:9292 |\n+----------------------------------+-----------+--------------+--------------+---------+-----------+------------------------+\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Make sure that the glance account has reader access to system-scope resources (like limits):<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ openstack role add --user glance --user-domain Default --system all reader\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Populate the Image service database:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ \/bin\/sh -c &quot;glance-manage db_sync&quot; glance\n2025-01-20 14:20:25.319 35181 INFO alembic.runtime.migration &#x5B;-] Context impl PostgresqlImpl.\n2025-01-20 14:20:25.319 35181 INFO alembic.runtime.migration &#x5B;-] Will assume transactional DDL.\n2025-01-20 14:20:25.327 35181 INFO alembic.runtime.migration &#x5B;-] Context impl PostgresqlImpl.\n2025-01-20 14:20:25.328 35181 INFO alembic.runtime.migration &#x5B;-] Will assume transactional DDL.\n2025-01-20 14:20:25.340 35181 INFO alembic.runtime.migration &#x5B;-] Context impl PostgresqlImpl.\n2025-01-20 14:20:25.340 35181 INFO alembic.runtime.migration &#x5B;-] Will assume transactional DDL.\n2025-01-20 14:20:25.350 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade  -&gt; liberty, liberty initial\n2025-01-20 14:20:25.526 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade liberty -&gt; mitaka01, add index on created_at and updated_at columns of &#039;images&#039; table\n2025-01-20 14:20:25.534 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade mitaka01 -&gt; mitaka02, update metadef os_nova_server\n2025-01-20 14:20:25.571 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade mitaka02 -&gt; ocata_expand01, add visibility to images\n2025-01-20 14:20:25.575 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade ocata_expand01 -&gt; pike_expand01, empty expand for symmetry with pike_contract01\n2025-01-20 14:20:25.576 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade pike_expand01 -&gt; queens_expand01\n2025-01-20 14:20:25.576 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade queens_expand01 -&gt; rocky_expand01, add os_hidden column to images table\n2025-01-20 14:20:25.580 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade rocky_expand01 -&gt; rocky_expand02, add os_hash_algo and os_hash_value columns to images table\n2025-01-20 14:20:25.584 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade rocky_expand02 -&gt; train_expand01, empty expand for symmetry with train_contract01\n2025-01-20 14:20:25.585 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade train_expand01 -&gt; ussuri_expand01, empty expand for symmetry with ussuri_expand01\n2025-01-20 14:20:25.586 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade ussuri_expand01 -&gt; wallaby_expand01, add image_id, request_id, user columns to tasks table&quot;\n2025-01-20 14:20:25.598 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade wallaby_expand01 -&gt; xena_expand01, empty expand for symmetry with 2023_1_expand01\n2025-01-20 14:20:25.600 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade xena_expand01 -&gt; yoga_expand01, empty expand for symmetry with 2023_1_expand01\n2025-01-20 14:20:25.602 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade yoga_expand01 -&gt; zed_expand01, empty expand for symmetry with 2023_1_expand01\n2025-01-20 14:20:25.603 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade zed_expand01 -&gt; 2023_1_expand01, empty expand for symmetry with 2023_1_expand01\n2025-01-20 14:20:25.605 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade 2023_1_expand01 -&gt; 2024_1_expand01, adds cache_node_reference and cached_images table(s)\n2025-01-20 14:20:25.677 35181 INFO alembic.runtime.migration &#x5B;-] Context impl PostgresqlImpl.\n2025-01-20 14:20:25.677 35181 INFO alembic.runtime.migration &#x5B;-] Will assume transactional DDL.\nUpgraded database to: 2024_1_expand01, current revision(s): 2024_1_expand01\n2025-01-20 14:20:25.681 35181 INFO alembic.runtime.migration &#x5B;-] Context impl PostgresqlImpl.\n2025-01-20 14:20:25.681 35181 INFO alembic.runtime.migration &#x5B;-] Will assume transactional DDL.\n2025-01-20 14:20:25.684 35181 INFO alembic.runtime.migration &#x5B;-] Context impl PostgresqlImpl.\n2025-01-20 14:20:25.684 35181 INFO alembic.runtime.migration &#x5B;-] Will assume transactional DDL.\nDatabase migration is up to date. No migration needed.\n2025-01-20 14:20:25.692 35181 INFO alembic.runtime.migration &#x5B;-] Context impl PostgresqlImpl.\n2025-01-20 14:20:25.692 35181 INFO alembic.runtime.migration &#x5B;-] Will assume transactional DDL.\n2025-01-20 14:20:25.699 35181 INFO alembic.runtime.migration &#x5B;-] Context impl PostgresqlImpl.\n2025-01-20 14:20:25.699 35181 INFO alembic.runtime.migration &#x5B;-] Will assume transactional DDL.\n2025-01-20 14:20:25.702 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade mitaka02 -&gt; ocata_contract01, remove is_public from images\n2025-01-20 14:20:25.705 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade ocata_contract01 -&gt; pike_contract01, drop glare artifacts tables\n2025-01-20 14:20:25.711 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade pike_contract01 -&gt; queens_contract01\n2025-01-20 14:20:25.711 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade queens_contract01 -&gt; rocky_contract01\n2025-01-20 14:20:25.712 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade rocky_contract01 -&gt; rocky_contract02\n2025-01-20 14:20:25.712 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade rocky_contract02 -&gt; train_contract01\n2025-01-20 14:20:25.712 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade train_contract01 -&gt; ussuri_contract01\n2025-01-20 14:20:25.713 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade ussuri_contract01 -&gt; wallaby_contract01\n2025-01-20 14:20:25.713 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade wallaby_contract01 -&gt; xena_contract01\n2025-01-20 14:20:25.713 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade xena_contract01 -&gt; yoga_contract01\n2025-01-20 14:20:25.714 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade yoga_contract01 -&gt; zed_contract01\n2025-01-20 14:20:25.714 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade zed_contract01 -&gt; 2023_1_contract01\n2025-01-20 14:20:25.715 35181 INFO alembic.runtime.migration &#x5B;-] Running upgrade 2023_1_contract01 -&gt; 2024_1_contract01\n2025-01-20 14:20:25.717 35181 INFO alembic.runtime.migration &#x5B;-] Context impl PostgresqlImpl.\n2025-01-20 14:20:25.717 35181 INFO alembic.runtime.migration &#x5B;-] Will assume transactional DDL.\nUpgraded database to: 2024_1_contract01, current revision(s): 2024_1_contract01\n2025-01-20 14:20:25.719 35181 INFO alembic.runtime.migration &#x5B;-] Context impl PostgresqlImpl.\n2025-01-20 14:20:25.719 35181 INFO alembic.runtime.migration &#x5B;-] Will assume transactional DDL.\nDatabase is synced successfully.\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Create the policy definition to allow creating an image:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ cat \/etc\/glance\/policy.yaml \n{\n    &quot;default&quot;: &quot;&quot;,\n    &quot;add_image&quot;: &quot;role:admin&quot;,\n    &quot;modify_image&quot;: &quot;role:admin&quot;,\n    &quot;delete_image&quot;: &quot;role:admin&quot;\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Enable and start the service:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,2]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ systemctl enable openstack-glance-api.service\n&#x5B;root@controller ~]$ systemctl start openstack-glance-api.service\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Verify operation of the Image service using <a href=\"https:\/\/github.com\/cirros-dev\/cirros\" target=\"_blank\" rel=\"noreferrer noopener\">CirrOS<\/a>, a small Linux image that helps you test your OpenStack deployment:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,2,3,4,31]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ mkdir -p \/var\/cache\/glance\/api\/\n&#x5B;root@controller ~]$ . admin-openrc\n&#x5B;root@controller ~]$ wget http:\/\/download.cirros-cloud.net\/0.4.0\/cirros-0.4.0-x86_64-disk.img\n&#x5B;root@controller ~]$ glance image-create --name &quot;cirros&quot; --file cirros-0.4.0-x86_64-disk.img   --disk-format qcow2 --container-format bare   --visibility=public\n+------------------+----------------------------------------------------------------------------------+\n| Property         | Value                                                                            |\n+------------------+----------------------------------------------------------------------------------+\n| checksum         | 443b7623e27ecf03dc9e01ee93f67afe                                                 |\n| container_format | bare                                                                             |\n| created_at       | 2025-01-20T14:15:21Z                                                             |\n| disk_format      | qcow2                                                                            |\n| id               | 150fd48b-8ed4-4170-ad98-213d9eddcba0                                             |\n| min_disk         | 0                                                                                |\n| min_ram          | 0                                                                                |\n| name             | cirros                                                                           |\n| os_hash_algo     | sha512                                                                           |\n| os_hash_value    | 6513f21e44aa3da349f248188a44bc304a3653a04122d8fb4535423c8e1d14cd6a153f735bb0982e |\n|                  | 2161b5b5186106570c17a9e58b64dd39390617cd5a350f78                                 |\n| os_hidden        | False                                                                            |\n| owner            | 920bf34a6c88454f90d405124ca1076d                                                 |\n| protected        | False                                                                            |\n| size             | 12716032                                                                         |\n| status           | active                                                                           |\n| stores           | fs                                                                               |\n| tags             | &#x5B;]                                                                               |\n| updated_at       | 2025-01-20T14:15:22Z                                                             |\n| virtual_size     | 46137344                                                                         |\n| visibility       | public                                                                           |\n+------------------+----------------------------------------------------------------------------------+\n\n&#x5B;root@controller ~]$ glance image-list\n+--------------------------------------+--------+\n| ID                                   | Name   |\n+--------------------------------------+--------+\n| 150fd48b-8ed4-4170-ad98-213d9eddcba0 | cirros |\n+--------------------------------------+--------+\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Fine, the image is available and now we have this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"476\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2025\/01\/ostack8-1024x476.png\" alt=\"\" class=\"wp-image-36766\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2025\/01\/ostack8-1024x476.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2025\/01\/ostack8-300x139.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2025\/01\/ostack8-768x357.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2025\/01\/ostack8.png 1261w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The next service we need to deploy is the Placement service. This service is used by other services to manage and allocate their resources. Like the Keystone and Glance service, this service needs the database backend:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,3,5]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ su - postgres -c &quot;psql -c \\&quot;create user placement with login password &#039;admin&#039;\\&quot;&quot;\nCREATE ROLE\n&#x5B;root@controller ~]$ su - postgres -c &quot;psql -c &#039;create database placement with owner=placement&#039;&quot;\nCREATE DATABASE\n&#x5B;root@controller ~]$ su - postgres -c &quot;psql -l&quot;\n                                                        List of databases\n   Name    |   Owner   | Encoding | Locale Provider |   Collate   |    Ctype    | ICU Locale | ICU Rules |   Access privileges   \n-----------+-----------+----------+-----------------+-------------+-------------+------------+-----------+-----------------------\n glance    | glance    | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | \n keystone  | keystone  | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | \n placement | placement | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | \n postgres  | postgres  | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | \n template0 | postgres  | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =c\/postgres          +\n           |           |          |                 |             |             |            |           | postgres=CTc\/postgres\n template1 | postgres  | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |            |           | =c\/postgres          +\n           |           |          |                 |             |             |            |           | postgres=CTc\/postgres\n(6 rows)\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">In the same way as with the Glance service, the user, role, service and endpoints need to be created:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,2,18,19,30,45,60]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ . admin-openrc\n&#x5B;root@controller ~]$ openstack user create --domain default --password-prompt placement\nUser Password:\nRepeat User Password:\nNo password was supplied, authentication will fail when a user does not have a password.\n+---------------------+----------------------------------+\n| Field               | Value                            |\n+---------------------+----------------------------------+\n| default_project_id  | None                             |\n| domain_id           | default                          |\n| email               | None                             |\n| enabled             | True                             |\n| id                  | 9d1de7fda54a441b9c1289f8dc520e2b |\n| name                | placement                        |\n| description         | None                             |\n| password_expires_at | None                             |\n+---------------------+----------------------------------+\n&#x5B;root@controller ~]$ openstack role add --project service --user placement admin\n&#x5B;root@controller ~]$ openstack service create --name placement --description &quot;Placement API&quot; placement\n+-------------+----------------------------------+\n| Field       | Value                            |\n+-------------+----------------------------------+\n| id          | 43865e881fb84730b2bfc7c099c8038d |\n| name        | placement                        |\n| type        | placement                        |\n| enabled     | True                             |\n| description | Placement API                    |\n+-------------+----------------------------------+\n\n&#x5B;root@controller ~]$ openstack endpoint create --region RegionOne placement public http:\/\/controller:8778\n+--------------+----------------------------------+\n| Field        | Value                            |\n+--------------+----------------------------------+\n| enabled      | True                             |\n| id           | 5dac42d9532e4fd7b34a8e990ec5d408 |\n| interface    | public                           |\n| region       | RegionOne                        |\n| region_id    | RegionOne                        |\n| service_id   | 43865e881fb84730b2bfc7c099c8038d |\n| service_name | placement                        |\n| service_type | placement                        |\n| url          | http:\/\/controller:8778           |\n+--------------+----------------------------------+\n\n&#x5B;root@controller ~]$ openstack endpoint create --region RegionOne placement internal http:\/\/controller:8778\n+--------------+----------------------------------+\n| Field        | Value                            |\n+--------------+----------------------------------+\n| enabled      | True                             |\n| id           | 535c652f6e654f56843076cf91a0fe84 |\n| interface    | internal                         |\n| region       | RegionOne                        |\n| region_id    | RegionOne                        |\n| service_id   | 43865e881fb84730b2bfc7c099c8038d |\n| service_name | placement                        |\n| service_type | placement                        |\n| url          | http:\/\/controller:8778           |\n+--------------+----------------------------------+\n\n&#x5B;root@controller ~]$ openstack endpoint create --region RegionOne placement admin http:\/\/controller:8778\n+--------------+----------------------------------+\n| Field        | Value                            |\n+--------------+----------------------------------+\n| enabled      | True                             |\n| id           | 58370b01f8904e1f8aab8c718c8a4cb6 |\n| interface    | admin                            |\n| region       | RegionOne                        |\n| region_id    | RegionOne                        |\n| service_id   | 43865e881fb84730b2bfc7c099c8038d |\n| service_name | placement                        |\n| service_type | placement                        |\n| url          | http:\/\/controller:8778           |\n+--------------+----------------------------------+\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Install the package which brings the Placement API and configure the service:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,2]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ dnf install openstack-placement-api -y\n&#x5B;root@controller ~]$ egrep -v &quot;^#|^$&quot; \/etc\/placement\/placement.conf\n&#x5B;DEFAULT]\n&#x5B;api]\nauth_strategy = keystone\n&#x5B;cors]\n&#x5B;keystone_authtoken]\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 = admin\nwww_authenticate_uri  = http:\/\/controller:5000\n&#x5B;oslo_middleware]\n&#x5B;oslo_policy]\n&#x5B;placement]\n&#x5B;placement_database]\nconnection = postgresql+psycopg2:\/\/placement:admin@localhost\/placement\n&#x5B;profiler]\n&#x5B;profiler_jaeger]\n&#x5B;profiler_otlp]\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Populate the database (this does not produce any output if successful):<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ sh -c &quot;placement-manage db sync&quot; placement\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">&#8230; and restart the web server after adding this block:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&amp;lt;Directory \/usr\/bin&amp;gt;\n   &amp;lt;IfVersion &amp;gt;= 2.4&amp;gt;\n      Require all granted\n   &amp;lt;\/IfVersion&amp;gt;\n   &amp;lt;IfVersion &amp;lt; 2.4&amp;gt;\n      Order allow,deny\n      Allow from all\n   &amp;lt;\/IfVersion&amp;gt;\n&amp;lt;\/Directory&amp;gt;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">&#8230; to the end of &#8220;\/etc\/httpd\/conf.d\/00-placement-api.conf&#8221;.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; highlight: [1]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ systemctl restart httpd\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">If all went fine and was configured correctly, the service can be verified to be working with:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [1,17,18]; title: ; notranslate\" title=\"\">\n&#x5B;root@controller ~]$ placement-status upgrade check\n+-------------------------------------------+\n| Upgrade Check Results                     |\n+-------------------------------------------+\n| Check: Missing Root Provider IDs          |\n| Result: Success                           |\n| Details: None                             |\n+-------------------------------------------+\n| Check: Incomplete Consumers               |\n| Result: Success                           |\n| Details: None                             |\n+-------------------------------------------+\n| Check: Policy File JSON to YAML Migration |\n| Result: Success                           |\n| Details: None                             |\n\n&#x5B;root@controller ~]$ dnf install python3-osc-placement -y\n&#x5B;root@controller ~]$ openstack --os-placement-api-version 1.2 resource class list\n+----------------------------------------+\n| name                                   |\n+----------------------------------------+\n| VCPU                                   |\n| MEMORY_MB                              |\n| DISK_GB                                |\n| PCI_DEVICE                             |\n| SRIOV_NET_VF                           |\n| NUMA_SOCKET                            |\n| NUMA_CORE                              |\n| NUMA_THREAD                            |\n| NUMA_MEMORY_MB                         |\n| IPV4_ADDRESS                           |\n| VGPU                                   |\n| VGPU_DISPLAY_HEAD                      |\n| NET_BW_EGR_KILOBIT_PER_SEC             |\n| NET_BW_IGR_KILOBIT_PER_SEC             |\n| PCPU                                   |\n| MEM_ENCRYPTION_CONTEXT                 |\n| FPGA                                   |\n| PGPU                                   |\n| NET_PACKET_RATE_KILOPACKET_PER_SEC     |\n| NET_PACKET_RATE_EGR_KILOPACKET_PER_SEC |\n| NET_PACKET_RATE_IGR_KILOPACKET_PER_SEC |\n+----------------------------------------+\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Fine, now we have the Image and Placement service up and running and our setup looks like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"420\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2025\/01\/ostack10-1024x420.png\" alt=\"\" class=\"wp-image-36777\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2025\/01\/ostack10-1024x420.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2025\/01\/ostack10-300x123.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2025\/01\/ostack10-768x315.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2025\/01\/ostack10.png 1113w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-5-the-compute-service\/\" target=\"_blank\" rel=\"noreferrer noopener\">In the next post we&#8217;ll continue with setting up the compute service (Nova).<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>By the end of the last post we finally got the first OpenStack service up and running: Keystone, the Identity Service. Going back to the list of services we need at a minimum, this still leaves us with some more to setup: In this post we&#8217;ll setup the Image Service (Glance) and the Placement service.&hellip;&nbsp;<\/p>\n","protected":false},"author":28,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","neve_meta_reading_time":"","_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[955,1320,83],"tags":[73,957],"class_list":["post-36757","post","type-post","status-publish","format-standard","hentry","category-cloud","category-devops","category-postgresql","tag-linux","tag-openstack"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.4 (Yoast SEO v28.7) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Creating your private cloud using OpenStack \u2013 (4) \u2013 The Image and Placement services - dbi services | Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Creating your private cloud using OpenStack \u2013 (4) \u2013 The Image and Placement services\" \/>\n<meta property=\"og:description\" content=\"By the end of the last post we finally got the first OpenStack service up and running: Keystone, the Identity Service. Going back to the list of services we need at a minimum, this still leaves us with some more to setup: In this post we&#8217;ll setup the Image Service (Glance) and the Placement service.&hellip;&nbsp;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi services | Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/dbiservices\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-01-21T14:14:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2025\/01\/ostack7-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1298\" \/>\n\t<meta property=\"og:image:height\" content=\"527\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Open source Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@dbiservices\" \/>\n<meta name=\"twitter:site\" content=\"@dbiservices\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Open source Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\\\/\"},\"author\":{\"name\":\"Open source Team\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/0b4548362cac3eeff8b3eaf329e3530a\"},\"headline\":\"Creating your private cloud using OpenStack \u2013 (4) \u2013 The Image and Placement services\",\"datePublished\":\"2025-01-21T14:14:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\\\/\"},\"wordCount\":471,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/ostack7-1-1024x416.png\",\"keywords\":[\"Linux\",\"openstack\"],\"articleSection\":[\"Cloud\",\"DevOps\",\"PostgreSQL\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\\\/\",\"name\":\"Creating your private cloud using OpenStack \u2013 (4) \u2013 The Image and Placement services - dbi services | Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/ostack7-1-1024x416.png\",\"datePublished\":\"2025-01-21T14:14:31+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/ostack7-1.png\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/ostack7-1.png\",\"width\":1298,\"height\":527},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Creating your private cloud using OpenStack \u2013 (4) \u2013 The Image and Placement services\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi services Blog\",\"description\":\"#BeSharing\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#organization\"},\"alternateName\":\"dbi Blog\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#organization\",\"name\":\"dbi services\",\"alternateName\":\"dbi\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/dbi-services-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/dbi-services-logo.png\",\"width\":512,\"height\":512,\"caption\":\"dbi services\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/dbiservices\\\/\",\"https:\\\/\\\/x.com\\\/dbiservices\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/dbi-services\\\/\",\"https:\\\/\\\/www.youtube.com\\\/user\\\/dbiservices\"],\"description\":\"Swiss IT consulting and services company specialised in efficient data infrastructures and platforms: databases, application servers, cloud, DevOps, digitalization, analytics, data quality and monitoring. Headquartered in Del\u00e9mont with offices in Nyon, Basel, Bern and Zurich.\",\"email\":\"info@dbi-services.com\",\"telephone\":\"+41 32 422 96 00\",\"legalName\":\"dbi services SA\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/0b4548362cac3eeff8b3eaf329e3530a\",\"name\":\"Open source Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/05\\\/open-source-author.png\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/05\\\/open-source-author.png\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/05\\\/open-source-author.png\",\"caption\":\"Open source Team\"},\"description\":\"Posts published under the Open source Team account are collective contributions by the dbi services open infrastructure consultants. The practice covers open-source databases and platforms, PostgreSQL first of all, along with MySQL, MariaDB, and Linux, from architecture, replication, and high availability to performance tuning and operations under service level agreements, and contributes actively to the PostgreSQL community.\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/open-source-team\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Creating your private cloud using OpenStack \u2013 (4) \u2013 The Image and Placement services - dbi services | Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\/","og_locale":"en_US","og_type":"article","og_title":"Creating your private cloud using OpenStack \u2013 (4) \u2013 The Image and Placement services","og_description":"By the end of the last post we finally got the first OpenStack service up and running: Keystone, the Identity Service. Going back to the list of services we need at a minimum, this still leaves us with some more to setup: In this post we&#8217;ll setup the Image Service (Glance) and the Placement service.&hellip;&nbsp;","og_url":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\/","og_site_name":"dbi services | Blog","article_publisher":"https:\/\/www.facebook.com\/dbiservices\/","article_published_time":"2025-01-21T14:14:31+00:00","og_image":[{"width":1298,"height":527,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2025\/01\/ostack7-1.png","type":"image\/png"}],"author":"Open source Team","twitter_card":"summary_large_image","twitter_creator":"@dbiservices","twitter_site":"@dbiservices","twitter_misc":{"Written by":"Open source Team","Est. reading time":"14 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\/"},"author":{"name":"Open source Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/0b4548362cac3eeff8b3eaf329e3530a"},"headline":"Creating your private cloud using OpenStack \u2013 (4) \u2013 The Image and Placement services","datePublished":"2025-01-21T14:14:31+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\/"},"wordCount":471,"commentCount":0,"publisher":{"@id":"https:\/\/www.dbi-services.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2025\/01\/ostack7-1-1024x416.png","keywords":["Linux","openstack"],"articleSection":["Cloud","DevOps","PostgreSQL"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\/","url":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\/","name":"Creating your private cloud using OpenStack \u2013 (4) \u2013 The Image and Placement services - dbi services | Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2025\/01\/ostack7-1-1024x416.png","datePublished":"2025-01-21T14:14:31+00:00","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2025\/01\/ostack7-1.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2025\/01\/ostack7-1.png","width":1298,"height":527},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/creating-your-private-cloud-using-openstack-4-the-image-and-placement-services\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Creating your private cloud using OpenStack \u2013 (4) \u2013 The Image and Placement services"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi services Blog","description":"#BeSharing","publisher":{"@id":"https:\/\/www.dbi-services.com\/blog\/#organization"},"alternateName":"dbi Blog","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.dbi-services.com\/blog\/#organization","name":"dbi services","alternateName":"dbi","url":"https:\/\/www.dbi-services.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2026\/09\/dbi-services-logo.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2026\/09\/dbi-services-logo.png","width":512,"height":512,"caption":"dbi services"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/dbiservices\/","https:\/\/x.com\/dbiservices","https:\/\/www.linkedin.com\/company\/dbi-services\/","https:\/\/www.youtube.com\/user\/dbiservices"],"description":"Swiss IT consulting and services company specialised in efficient data infrastructures and platforms: databases, application servers, cloud, DevOps, digitalization, analytics, data quality and monitoring. Headquartered in Del\u00e9mont with offices in Nyon, Basel, Bern and Zurich.","email":"info@dbi-services.com","telephone":"+41 32 422 96 00","legalName":"dbi services SA"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/0b4548362cac3eeff8b3eaf329e3530a","name":"Open source Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2022\/05\/open-source-author.png","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2022\/05\/open-source-author.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/2022\/05\/open-source-author.png","caption":"Open source Team"},"description":"Posts published under the Open source Team account are collective contributions by the dbi services open infrastructure consultants. The practice covers open-source databases and platforms, PostgreSQL first of all, along with MySQL, MariaDB, and Linux, from architecture, replication, and high availability to performance tuning and operations under service level agreements, and contributes actively to the PostgreSQL community.","url":"https:\/\/www.dbi-services.com\/blog\/author\/open-source-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/36757","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/28"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=36757"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/36757\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=36757"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=36757"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=36757"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}