{"library":"openstacksdk","title":"OpenStack SDK for Python","description":"openstacksdk is the official Python SDK for building applications to work with OpenStack clouds. It provides a consistent and comprehensive set of interactions with OpenStack's numerous services, offering both a high-level abstraction layer and direct access to underlying APIs. The library is actively maintained, with version 4.10.0 being the current stable release, and it follows a continuous release model aligned with OpenStack's development cycles.","language":"python","status":"active","last_verified":"Thu May 14","install":{"commands":["pip install openstacksdk"],"cli":null},"imports":["import openstack","from openstack import connection","conn.compute.servers()"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nimport openstack\nimport time\n\n# Configure connection via environment variables for a quickstart\n# In a real application, consider using a clouds.yaml file for more robust configuration.\n# Example: export OS_CLOUD='devstack' or set individual OS_ prefixed variables.\n# You can also pass auth parameters directly to openstack.connect()\n\n# Initialize and turn on debug logging (optional, but useful for troubleshooting)\nopenstack.enable_logging(debug=True)\n\ntry:\n    # Establish a connection to your OpenStack cloud\n    # 'envvars' tells openstacksdk to look for OS_CLOUD or individual OS_ prefixed environment variables\n    conn = openstack.connect(cloud='envvars')\n\n    print(\"Successfully connected to OpenStack!\")\n\n    # List available images\n    print(\"\\nAvailable images:\")\n    for image in conn.image.images():\n        print(f\"  ID: {image.id}, Name: {image.name}\")\n\n    # List available flavors (instance types)\n    print(\"\\nAvailable flavors:\")\n    for flavor in conn.compute.flavors():\n        print(f\"  ID: {flavor.id}, Name: {flavor.name}, RAM: {flavor.ram}MB, VCPUs: {flavor.vcpus}\")\n\n    # --- Example: Create a new server (instance) --- \n    # Requires an existing image, flavor, network, and keypair in your OpenStack cloud.\n    # Replace with actual values from your environment or obtained from the above listings.\n    IMAGE_NAME = os.environ.get('OS_TEST_IMAGE', 'cirros')\n    FLAVOR_NAME = os.environ.get('OS_TEST_FLAVOR', 'm1.tiny')\n    NETWORK_NAME = os.environ.get('OS_TEST_NETWORK', 'private') # Or 'public' if applicable\n    KEYPAIR_NAME = os.environ.get('OS_TEST_KEYPAIR', 'my_keypair')\n    SERVER_NAME = f\"test-sdk-server-{int(time.time())}\"\n\n    # Find the image, flavor, and network by name\n    image = conn.image.find_image(IMAGE_NAME)\n    flavor = conn.compute.find_flavor(FLAVOR_NAME)\n    network = conn.network.find_network(NETWORK_NAME)\n    keypair = conn.compute.find_keypair(KEYPAIR_NAME)\n\n    if not all([image, flavor, network, keypair]):\n        print(\"\\nError: One or more required resources (image, flavor, network, keypair) not found. Skipping server creation.\")\n    else:\n        print(f\"\\nCreating server '{SERVER_NAME}'...\")\n        server = conn.compute.create_server(\n            name=SERVER_NAME,\n            image_id=image.id,\n            flavor_id=flavor.id,\n            networks=[{\"uuid\": network.id}],\n            key_name=keypair.name\n        )\n        print(f\"Server '{SERVER_NAME}' created (ID: {server.id}). Waiting for active status...\")\n        conn.compute.wait_for_server(server)\n        print(f\"Server '{SERVER_NAME}' is now {server.status}.\")\n        print(f\"Access IPv4: {getattr(server, 'access_ipv4', 'N/A')}\")\n\n        # Cleanup: Delete the created server\n        print(f\"\\nDeleting server '{SERVER_NAME}' (ID: {server.id})...\")\n        conn.compute.delete_server(server.id)\n        conn.compute.wait_for_delete(server)\n        print(f\"Server '{SERVER_NAME}' deleted.\")\n\nexcept openstack.exceptions.SDKException as e:\n    print(f\"An OpenStack SDK error occurred: {e}\")\nexcept Exception as e:\n    print(f\"An unexpected error occurred: {e}\")\n","lang":"python","description":"This quickstart demonstrates how to establish a connection to an OpenStack cloud, list images and flavors, and then optionally create and delete a compute instance (server). It uses environment variables for authentication and resource naming for simplicity. For production, `clouds.yaml` is recommended. Ensure `OS_AUTH_URL`, `OS_USERNAME`, `OS_PASSWORD`, `OS_PROJECT_NAME`, and optionally `OS_CLOUD` are set in your environment, along with `OS_TEST_IMAGE`, `OS_TEST_FLAVOR`, `OS_TEST_NETWORK`, and `OS_TEST_KEYPAIR` for server creation.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-14","installed_version":"4.5.0","pypi_latest":"4.12.0","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":6,"avg_import_s":1.4,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"openstacksdk","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.25,"mem_mb":22.8,"disk_size":"65.6M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"openstacksdk","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.31,"mem_mb":22.7,"disk_size":"65.2M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"openstacksdk","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":5.8,"import_time_s":0.88,"mem_mb":22.8,"disk_size":"67M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"openstacksdk","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.96,"mem_mb":22.7,"disk_size":"66M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"openstacksdk","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.58,"mem_mb":25.3,"disk_size":"72.8M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"openstacksdk","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.94,"mem_mb":25,"disk_size":"72.4M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"openstacksdk","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":5.6,"import_time_s":1.52,"mem_mb":25.3,"disk_size":"74M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"openstacksdk","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.54,"mem_mb":25,"disk_size":"74M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"openstacksdk","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.43,"mem_mb":24.8,"disk_size":"72.8M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"openstacksdk","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.6,"mem_mb":24.4,"disk_size":"72.4M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"openstacksdk","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":5.8,"import_time_s":1.47,"mem_mb":24.8,"disk_size":"74M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"openstacksdk","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.66,"mem_mb":24.4,"disk_size":"74M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"openstacksdk","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.39,"mem_mb":25.1,"disk_size":"72.5M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"openstacksdk","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.42,"mem_mb":24.7,"disk_size":"71.9M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"openstacksdk","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":5.9,"import_time_s":1.49,"mem_mb":25.1,"disk_size":"74M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"openstacksdk","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.75,"mem_mb":24.7,"disk_size":"73M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"openstacksdk","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":1.15,"mem_mb":22,"disk_size":"64.9M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"openstacksdk","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.27,"mem_mb":22,"disk_size":"64.7M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"openstacksdk","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":6.7,"import_time_s":1.07,"mem_mb":22,"disk_size":"66M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"openstacksdk","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1.22,"mem_mb":22,"disk_size":"66M"}]}}