Python SDK
Introduction
This document provides a brief setup guide for advanced users who want to use the Python SDK. This document assumes a good understanding of Python.
Setting Up Clouds.yaml
Background
Clouds.yaml allows a user to provide their credentials for a project separate to their script. This is strongly recommended for a number of reasons:
Prevents hard-coded credentials leaking in the script
Allows sharing of scripts for support reasons and to colleagues
Able to quickly switch between a testing and production project
Setup
Navigate to Openstack
Go to API Access
On the right click the dropdown to download the clouds.yaml file, not the RC file
Move this file to ~/.config/openstack you may need to create the parent directory
Your YAML file will look similar to:
clouds:
openstack:
auth:
auth_url: https://openstack.stfc.ac.uk:5000/v3
username: ...
Modify the project name (default openstack) to something descriptive
Add your password under the auth directive
For the above example:
clouds:
my_proj_name:
auth:
auth_url: https://openstack.stfc.ac.uk:5000/v3
username: exampleUser
password: examplePassword
Accessing Multiple Projects
This process can be repeated if you require access to multiple projects.
Switch project and download YAML for additional project
Append the contents of this downloaded file under the clouds directive
Here is an example of a file with multiple projects:
clouds:
my_proj_name:
auth:
auth_url: https://openstack.stfc.ac.uk:5000/v3
username: ...
password: ...
proj_dev:
auth:
auth_url: https://openstack.stfc.ac.uk:5000/v3
username: ...
password: ...
proj_prod:
auth:
auth_url: https://openstack.stfc.ac.uk:5000/v3
username: ...
password: ...
This provides targets called proj_one, proj_dev and proj_prod. This is especially useful for testing a script against a development environment and performing a one-line change to switch to production.
Auth in Python Script
Openstack will automatically go to ~/.config/openstack/ to check for a clouds.yaml file (note: lower-case).
Using the above examples, we can easily point to the project named my_proj_name like so:
Using the Openstack SDK
Important
Because the Openstack SDK dynamically populates the connection object with available methods most IDE type suggestions will be internal low-level methods and should be ignored.
For example set_metadata is always available instead of set_x_metadata, where x is a Openstack service.
The Openstack SDK dynamically populates the connection object at runtime. This is because Openstack fundamentally is a modular install with different plugins enabled by operators.
Instead Openstack adds “Proxies” to a connection object to represent what is available on the service. The list of proxies can be printed at runtime with:
Documentation
The full list of proxies can be viewed here.
Worked Example - Set Server Metadata
The compute proxy allows us to manipulate compute resources (i.e. instances).
Looking at the documentation linked above there are methods to get a list of server instances and a method to set metadata. If we want to set an arbitrary field of FOO=BAR on all servers we can do so using the compute module: