OpenStack Glance Client Library
python-glanceclient is a client library for OpenStack Glance, the Image service, built on the Glance API. It provides a Python API for interacting with Glance and a command-line tool (`glance`). The current stable version is 4.11.0, and it follows the OpenStack release cadence, typically releasing new versions every six months to align with OpenStack's development cycle.
Warnings
- breaking The `glanceclient.client.Client()` constructor defaults to Glance API version 2 (v2) since `python-glanceclient` version 2.0.0. Older applications that implicitly relied on v1 might break or misbehave.
- gotcha While `python-glanceclient` is actively maintained, for new OpenStack-related development, consider using the higher-level `openstacksdk` library. It provides a more unified and consistent API across various OpenStack services.
- gotcha Direct authentication by passing username/password arguments to client constructors is discouraged for production environments due to security and flexibility concerns. The recommended approach is to use `keystoneauth1` sessions.
Install
-
pip install python-glanceclient
Imports
- Client
from glanceclient.v2 import client
from glanceclient import client as glance_client
Quickstart
import os
from keystoneauth1.identity import v3
from keystoneauth1 import session
from glanceclient import client as glance_client
# --- Authentication ---
# Ensure OpenStack environment variables are set (e.g., OS_AUTH_URL, OS_USERNAME, OS_PASSWORD, etc.)
# You can also pass credentials directly, but environment variables are recommended.
auth = v3.Password(
auth_url=os.environ.get('OS_AUTH_URL', 'http://localhost:5000/v3'),
username=os.environ.get('OS_USERNAME', 'admin'),
password=os.environ.get('OS_PASSWORD', 'password'),
project_name=os.environ.get('OS_PROJECT_NAME', 'admin'),
user_domain_name=os.environ.get('OS_USER_DOMAIN_NAME', 'Default'),
project_domain_name=os.environ.get('OS_PROJECT_DOMAIN_NAME', 'Default')
)
sess = session.Session(auth=auth)
# --- Initialize Glance Client (API v2 recommended) ---
glance = glance_client.Client('2', session=sess)
# --- List Images ---
try:
print("\nAvailable Glance Images:")
images = glance.images.list()
if images:
for image in images:
print(f" ID: {image.id}, Name: {image.name}, Status: {image.status}, Visibility: {getattr(image, 'visibility', 'unknown')}")
else:
print(" No images found.")
except Exception as e:
print(f"Error connecting to Glance or listing images: {e}")