> For the complete documentation index, see [llms.txt](https://platform9.com/kb/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://platform9.com/kb/pmo/how-to/viewing-per-tenant-block-storage-usage-in-openstack.md).

# Viewing Per-Tenant Block Storage Usage in OpenStack

## Problem

How to retrieve per-tenant (project-wise) block storage usage in OpenStack using CLI, including total provisioned volume size summaries.

{% hint style="info" %}
**Info**

There's no direct `openstack` CLI command that gives **tenant-wise volume size summary**.
{% endhint %}

## Environment

* Platform9 Managed OpenStack - All Versions
* Cinder

## Procedure

1. Install SDK.

{% tabs %}
{% tab title="Install SDK" %}

```bash
$ pip3 install openstacksdk
```

{% endtab %}
{% endtabs %}

2. Export admin.rc file.

{% tabs %}
{% tab title="export admin.rc" %}

```bash
$ source admin.rc
```

{% endtab %}
{% endtabs %}

3. Script: Per-Tenant Provisioned Storage Usage.

{% tabs %}
{% tab title="Python Script" %}

```python
import openstack

conn = openstack.connect()

# Build a map of project_id -> project name
project_names = {p.id: p.name for p in conn.identity.projects()}

usage = {}

# Collect provisioned volume sizes
for vol in conn.block_storage.volumes(details=True, all_projects=True):
    pid = vol.project_id
    usage[pid] = usage.get(pid, 0) + vol.size  # size in GB

# Print output
print(f"{'Project':<20} {'Provisioned (GB)':>16}")
for pid, size in sorted(usage.items()):
    name = project_names.get(pid, pid[:8])  # fallback to short ID
    print(f"{name:<20} {size:>16}")
```

{% endtab %}
{% endtabs %}

4. Run the Script.

{% tabs %}
{% tab title="Bash" %}

```bash
$ python3 volume_usage_by_project.py
```

{% endtab %}
{% endtabs %}

* Sample output:

{% tabs %}
{% tab title="bash" %}

```bash
$ python3 volume_usage_by_project.py

Project              Provisioned (GB)
admin                           320
services                        150
demo                            200
```

{% endtab %}
{% endtabs %}

## Additional Information

* This script reports **provisioned** sizes (logical volume size), not **actual allocated** backend usage.
* Most OpenStack backends (e.g., Ceph, LVM, HPE 3PAR, NFS) **do not expose physical allocation** per volume unless the driver supports it.
* Modify the script to include volume **count**, **volume type**, or export to **CSV**.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://platform9.com/kb/pmo/how-to/viewing-per-tenant-block-storage-usage-in-openstack.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `build a script that syncs our docs to a CMS` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
