Guide: OpenStack Python SDK – Basic Usage

From bwCloud-OS
Revision as of 21:37, 25 April 2026 by Sia (talk | contribs) (Created page with "This guide provides a quick introduction to managing your bwCloud-OS resources using the OpenStack Python SDK. It covers basic authentication and common operations for compute, storage, and networking. <nowiki>__TOC__</nowiki> == Prerequisites == Install the OpenStack SDK (Ubuntu example):<pre> sudo apt update sudo apt install python3-openstacksdk -y </pre>Alternatively (if not available via apt), you can install it via pip:<pre> pip install openstacksdk </pre> == Au...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

This guide provides a quick introduction to managing your bwCloud-OS resources using the OpenStack Python SDK. It covers basic authentication and common operations for compute, storage, and networking.


__TOC__

Prerequisites

Install the OpenStack SDK (Ubuntu example):

sudo apt update
sudo apt install python3-openstacksdk -y

Alternatively (if not available via apt), you can install it via pip:

pip install openstacksdk

Authentication

The SDK uses the same configuration as the OpenStack CLI.

You can either:

  • source an OpenRC file, or
  • use a clouds.yaml file

Example (clouds.yaml):

clouds:
  openstack:
    auth:
      auth_url: https://your-auth-url:5000/v3
      application_credential_id: "YOUR_ID"
      application_credential_secret: "YOUR_SECRET"
    region_name: "RegionOne"
    interface: "public"
    identity_api_version: 3
    auth_type: "v3applicationcredential"

Basic Connection

Create a connection in Python:

import openstack

conn = openstack.connect(cloud="openstack")

Compute

Instances

List instances:

for server in conn.compute.servers():
    print(server.name, server.status)

Create an instance:

image = conn.compute.find_image("ubuntu-24.04") flavor = conn.compute.find_flavor("p1.tiny") network = conn.network.find_network("myNet")

server = conn.compute.create_server(

   name="myVM",
   image_id=image.id,
   flavor_id=flavor.id,
   networks=[{"uuid": network.id}],
   key_name="myKey"

)

server = conn.compute.wait_for_server(server) print("Created:", server.name)

Delete an instance:

server = conn.compute.find_server("myVM") conn.compute.delete_server(server.id)

Images

List images:

for image in conn.compute.images():
    print(image.name)

Storage

Volumes

List volumes:

for vol in conn.block_storage.volumes():
    print(vol.name, vol.size)

Create a volume:

volume = conn.block_storage.create_volume(

   name="myVolume",
   size=10

)

Delete a volume:

volume = conn.block_storage.find_volume("myVolume") conn.block_storage.delete_volume(volume.id)

Volume Management for Instances

Attach a volume to an instance:

server = conn.compute.find_server("myVM")
volume = conn.block_storage.find_volume("myVolume")

conn.compute.create_volume_attachment(
    server,
    volumeId=volume.id
)

Detach a volume:

attachments = conn.compute.volume_attachments(server) for att in attachments:

   if att.volume_id == volume.id:
       conn.compute.delete_volume_attachment(att.id, server)

Networking

Networks

List networks:

for net in conn.network.networks():
    print(net.name)

Create a network:

network = conn.network.create_network(name="myNet")

Delete a network:

network = conn.network.find_network("myNet") conn.network.delete_network(network.id)

Floating IPs

Create a floating IP:

fip = conn.network.create_ip(floating_network_id="provider_default_net")
print(fip.floating_ip_address)

Associate a floating IP with an instance:

server = conn.compute.find_server("myVM") conn.compute.add_floating_ip_to_server(server, fip.floating_ip_address)

Disassociate a floating IP:

conn.compute.remove_floating_ip_from_server(server, fip.floating_ip_address)

Delete a floating IP:

conn.network.delete_ip(fip.id)

Security Groups

List security groups:

for sg in conn.network.security_groups():
    print(sg.name)

Create a security group:

sg = conn.network.create_security_group(name="mySecGroup")

Add a rule (HTTP):

conn.network.create_security_group_rule(

   security_group_id=sg.id,
   protocol="tcp",
   port_range_min=80,
   port_range_max=80,
   direction="ingress"

)

Assign security group to an instance:

server = conn.compute.find_server("myVM") conn.compute.add_security_group_to_server(server, sg.name)

Remove a security group from an instance:

conn.compute.remove_security_group_from_server(server, sg.name)

Delete a security group:

conn.network.delete_security_group(sg.id)