Python Bindings for OpenNebula XML-RPC API
Project description
Description
PyOne is an implementation of Open Nebula XML-RPC bindings in Python.
The main goals of this library are completeness and maintainability.
Proxies and generators have been used whenever possible to minimize the impact of API updates, ensuring that the distributed xsd files are the only update required when new API versions are released.
This library is meant to be used together with OpenNebula API documentation:
The XML-RPC API must be used to know which calls to make.
Development
To contribute enhancements or fixes use GitHub tools: Pull requests and issues. Please note that by contributing to this project you accept that your contributions are under the Apache License 2.0, just like the rest of this project. Please take some time to read and understand the license terms and ensure that you are happy with it.
If you have access to a large OpenNebula deployment, contribute by testing on it.
Compatibility
PyONE is compatible with OpenNebula v5.4.x
It should be easy to backport PyOne to any OpenNebula version with XML-RPC API that includes XML Schema Definition (XSD) files.
Requirements
Python 2.7 or 3.6
Connectivity and Credentials to OpenNebula XML-RPC Server.
Installation
PyONE is distributed as a python package, it can be installed as:
$ pip install pyone
Configuration
You can configure your XML-RPC Server endpoint and credentials in the constructor:
import pyone
one = pyone.OneServer("http://one/RPC2", session="oneadmin:onepass" )
If you are connecting to a test platform with a self signed certificate you can disable certificate verification as:
import pyone
import ssl
one = pyone.OneServer("http://one/RPC2", session="oneadmin:onepass", context=ssl._create_unverified_context() )
It is also possible to modify the default connection timeout, but note that the setting will modify the TCP socket default timeout of your Python VM, ensure that the chosen timeout is suitable to any other connections running in your project.
Usage
Making Calls
Calls match the API documentation provided by Open Nebula:
import pyone
one = pyone.OneServer("http://one/RPC2", session="oneadmin:onepass" )
hostpool = one.hostpool.info()
host = hostpool.HOST[0]
id = host.ID
Note that the session parameter is automatically included as well as the “one.” prefix to the method.
Returned Objects
The returned types have been generated with generateDS and closely match the XSD specification. You can use the XSD specification as primary documentation while your IDE will offer code completion as you code or debug.
marketpool = one.marketpool.info()
m0 = marketpool.MARKETPLACE[0]
print "Markeplace name is " + m0.NAME
Structured Parameters
When making calls, the library will translate flat dictionaries into attribute=value vectors. Such as:
one.host.update(0, {"LABELS": "HD"}, 1)
When the provided dictionary has a “root” dictionary, it is considered to be root element and it will be translated to XML:
one.vm.update(1,
{
'TEMPLATE': {
'NAME': 'abc',
'MEMORY': '1024',
'ATT1': 'value1'
}
}, 1)
GenerateDS creates members from most returned parameters, however, some elements in the XSD are marked as anyType and GenerateDS cannot generate members automatically, TEMPLATE and USER_TEMPLATE are the common ones. Pyone will allow accessing its contents as a plain python dictionary.
host = one.host.info(0)
arch = host.TEMPLATE['ARCH']
This makes it possible to read a TEMPLATE as dictionary, modify it and use it as parameter for an update method, as following:
host = one.host.info(0)
host.TEMPLATE['NOTES']="Just updated"
one.host.update(0,host.TEMPLATE,1)
Constants
Some methods will return encoded values such as those representing the STATE of a resource. Constant are provided to better handle those.
from pyone import MARKETPLACEAPP_STATES
if app.STATE == MARKETPLACEAPP_STATES.READY:
# action that assumes app ready
Building from Source
Note that a Makefile is provided to generate the python bindings
Runing Tests
There are two main sets of tests.
CI Tests: unit tests meant for continious integration, do not require an OpenNebula platform, run mainly on XML samples, etc.
Integration Tests: meant to be used with a TESTING OpenNebula platform. Will create and modify OpenNebula objects.
IntegrationTests use a specialized XMLRPC client, OneServerTester that will also record Fixtures that can later be used in replay mode. In reply mode the calls to OpenNebula are intercepted and the fixtures are returned instead. This is useful to detect regressions but any modification to the tests cases will require to re-record Fixtures.
You can run the tests as follows:
$ export PYONE_SESSION="oneadmin:onepass"
$ export PYONE_ENDPOINT="https://192.168.121.55/RPC2"
$ python -m unittest discover -v -s tests/ci/
$ python -m unittest discover -v -s tests/integration
Known Issues
In some instances OpenNebula generates non-conformant XML elements, elements that according to the XSD should not be there. GenerateDS will silently ignore them and they will not be accessible.
Those cases should be reported to OpenNebula for the XSDs to be completed.
References
PyONE started as part of the Privazio project.
Privazio is a private cloud for residential users, startups or workgroups with a special focus on privacy.
PyONE is the core component of the following Ansible module for OpenNebula.
License
PyONE is licensed under Apache License 2.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pyone-1.1.9.tar.gz
.
File metadata
- Download URL: pyone-1.1.9.tar.gz
- Upload date:
- Size: 90.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | afe5094be7bf77907a7dd0a68d51f9fb5c52a8c14f6240d911701675f4c8ab6f |
|
MD5 | d8fe4bcbbb88d63bb292ac775b528791 |
|
BLAKE2b-256 | fe83e3d6410c5cd9139c2f6692278bda4b65853c22ecdbc0ab363a14fbee706f |
File details
Details for the file pyone-1.1.9-py2-none-any.whl
.
File metadata
- Download URL: pyone-1.1.9-py2-none-any.whl
- Upload date:
- Size: 109.8 kB
- Tags: Python 2
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4cabf7cc64351ac1046b05635c15867f9a6f3e76397aaa13eb5d88820a87e8e8 |
|
MD5 | 22d4279763d5a97bb688be610de23785 |
|
BLAKE2b-256 | 0d606d497ba4f02b4f30283e9c7ad5cab63a3799066c67026af8cd8a48a35e21 |