Guide: OpenStack Python SDK – Basic Usage: Difference between revisions

From bwCloud-OS
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
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.
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.
In the following, we demonstrate the commands using an interactive Python shell (python3). In practice, these routines are typically used within Python scripts or programs.




== Prerequisites ==
== Prerequisites ==
Install the OpenStack SDK (Ubuntu example):<pre>
Install the OpenStack SDK (Ubuntu example):
sudo apt update
 
sudo apt install python3-openstacksdk -y
<pre>
</pre>Alternatively (if not available via apt), you can install it via pip:<pre>
sudo apt install python3-openstacksdk  
</pre>
 
Alternatively, you can install it via pip (preferably inside a virtual environment):
 
<pre>
python3 -mvenv openstack-sdk_venv
. openstack-sdk_venv
pip install openstacksdk
pip install openstacksdk
</pre>
</pre>
Line 19: Line 28:


== Basic Connection ==
== Basic Connection ==
Create a connection in Python:<pre>
Create a connection in Python:
 
<pre>
import openstack
import openstack
conn = openstack.connect(cloud="openstack")
conn = openstack.connect(cloud="openstack")
</pre>
</pre>


== Compute ==
== Compute ==
=== Images ===
List images:
<pre>
for image in conn.compute.images():
    print(image.name)
</pre>


=== Instances ===
=== Instances ===
Line 58: Line 78:
</pre>
</pre>


=== Images ===
List images:
<pre>
for image in conn.compute.images():
    print(image.name)
</pre>





Revision as of 22:07, 25 April 2026

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.

In the following, we demonstrate the commands using an interactive Python shell (python3). In practice, these routines are typically used within Python scripts or programs.


Prerequisites

Install the OpenStack SDK (Ubuntu example):

sudo apt install python3-openstacksdk 

Alternatively, you can install it via pip (preferably inside a virtual environment):

python3 -mvenv openstack-sdk_venv
. openstack-sdk_venv
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

Basic Connection

Create a connection in Python:

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


Compute

Images

List images:

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


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)


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)