Skip to main content

VMware vCloud Python SDK

Project description

pyvcloud
========

|docs-latest| |pip| |ver| |build-status|

Python SDK for VMware vCloud Director and vCloud Air.

This project is under development, the classes, methods and parameters might change over time. This README usually reflects the syntax of the latest version.

Sample usage:

Import modules and instantiate a vCloud Air object::

.. code:: python

from pyvcloud.vcloudair import VCA
vca = VCA(host, user, service_type, service_version, verify)


Login to a vCloud Director instance::

.. code:: python

result = vca.login(password=password, org=org)


See `changes log <http://pyvcloud.readthedocs.org/en/latest/changes.html>`_ for a list of changes.

Installation
============

The Python SDK requires the libxml2 and libxslt libraries, see `lxml <http://lxml.de/installation.html>`_ for more details.

On Debian/Ubuntu, you can install `lxml` and Python development dependencies with this command:

.. code:: bash

sudo apt-get install libxml2-dev libxslt-dev python-dev python-pip

On RHEL-based distributions:

.. code:: bash

sudo yum install libxslt-devel libxml2-devel python-devel python-pip

The Python SDK can then be installed with the following command:

.. code:: bash

pip install --user pyvcloud

pyvcloud can also be installed with `virtualenv <http://docs.python-guide.org/en/latest/dev/virtualenvs/>`_

Usage
=====

The SDK supports logging in to different type of services: vCloud Air Subscription, vCloud Air On Demand and vCloud Director Standalone. See the following `code <https://github.com/vmware/pyvcloud/blob/master/examples/examples.py>`_ as an example::

.. code:: python

import time, datetime, os
from pyvcloud.vcloudair import VCA

def print_vca(vca):
if vca:
print 'vca token: ', vca.token
if vca.vcloud_session:
print 'vcloud session token: ', vca.vcloud_session.token
print 'org name: ', vca.vcloud_session.org
print 'org url: ', vca.vcloud_session.org_url
print 'organization: ', vca.vcloud_session.organization
else:
print 'vca vcloud session: ', vca.vcloud_session
else:
print 'vca: ', vca

def test_vcloud_session(vca, vdc, vapp):
the_vdc = vca.get_vdc(vdc)
for x in range(1, 5):
print datetime.datetime.now(), the_vdc.get_name(), vca.vcloud_session.token
the_vdc = vca.get_vdc(vdc)
if the_vdc: print the_vdc.get_name(), vca.vcloud_session.token
else: print False
the_vapp = vca.get_vapp(the_vdc, vapp)
if the_vapp: print the_vapp.me.name
else: print False
time.sleep(2)

### Subscription
host='vchs.vmware.com'
username = os.environ['VCAUSER']
password = os.environ['PASSWORD']
service = '85-719'
org = 'AppServices'
vdc = 'AppServices'
vapp = 'cts'

#sample login sequence on vCloud Air Subscription
vca = VCA(host=host, username=username, service_type='subscription', version='5.6', verify=True)

#first login, with password
result = vca.login(password=password)
print_vca(vca)

#next login, with token, no password
#this tests the vca token
result = vca.login(token=vca.token)
print_vca(vca)

#uses vca.token to generate vca.vcloud_session.token
vca.login_to_org(service, org)
print_vca(vca)

#this tests the vcloud session token
test_vcloud_session(vca, vdc, vapp)


### On Demand
host='iam.vchs.vmware.com'
username = os.environ['VCAUSER']
password = os.environ['PASSWORD']
instance = 'c40ba6b4-c158-49fb-b164-5c66f90344fa'
org = 'a6545fcb-d68a-489f-afff-2ea055104cc1'
vdc = 'VDC1'
vapp = 'ubu'

#sample login sequence on vCloud Air On Demand
vca = VCA(host=host, username=username, service_type='ondemand', version='5.7', verify=True)

#first login, with password
result = vca.login(password=password)
print_vca(vca)

#then login with password and instance id, this will generate a session_token
result = vca.login_to_instance(password=password, instance=instance, token=None, org_url=None)
print_vca(vca)

#next login, with token, org and org_url, no password, it will retrieve the organization
result = vca.login_to_instance(instance=instance, password=None, token=vca.vcloud_session.token, org_url=vca.vcloud_session.org_url)
print_vca(vca)

#this tests the vca token
result = vca.login(token=vca.token)
if result: print result, vca.instances
else: print False

#this tests the vcloud session token
test_vcloud_session(vca, vdc, vapp)


### vCloud Director standalone
host='p1v21-vcd.vchs.vmware.com'
username = os.environ['VCAUSER']
password = os.environ['PASSWORD']
service = '85-719'
org = 'AppServices'
vdc = 'AppServices'
vapp = 'cts'

#sample login sequence on vCloud Director standalone
vca = VCA(host=host, username=username, service_type='standalone', version='5.6', verify=True)

#first login, with password and org name
result = vca.login(password=password, org=org)
print_vca(vca)

#next login, with token, org and org_url, no password, it will retrieve the organization
result = vca.login(token=vca.token, org=org, org_url=vca.vcloud_session.org_url)
print_vca(vca)

#this tests the vcloud session token
test_vcloud_session(vca, vdc, vapp)


Development
===========

To test the current code, check it out from github and install it with::

.. code:: bash

python setup.py develop

To debug a python session, add this code::

import logging
import httplib
httplib.HTTPConnection.debuglevel = 1
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True


Testing
=======

To test pyvcloud::

.. code:: bash

git clone https://github.com/vmware/pyvcloud.git
cd pyvcloud
virtualenv .venv
source .venv/bin/activate
python setup.py develop
pip install -r test-requirements.txt
cp tests/config_example.yaml tests/config_standalone.yaml
# customize credentials and other parameters
nosetests --verbosity=2 --tc-format yaml --tc-file tests/config_standalone.yaml \
tests/vcloud_tests.py

.. |build-status| image:: https://img.shields.io/travis/vmware/pyvcloud.svg?style=flat
:alt: build status
:scale: 100%
:target: https://travis-ci.org/vmware/pyvcloud/

.. |docs| image:: https://readthedocs.org/projects/pyvcloud/badge/?version=stable
:alt: Documentation Status
:scale: 100%
:target: http://pyvcloud.readthedocs.org/en/stable/

.. |docs-latest| image:: https://readthedocs.org/projects/pyvcloud/badge/?version=latest
:alt: Documentation Status
:scale: 100%
:target: http://pyvcloud.readthedocs.org/en/latest/

.. |pip| image:: https://img.shields.io/pypi/dm/pyvcloud.svg
:alt: Download Status
:scale: 100%
:target: https://pypi.python.org/pypi/pyvcloud

.. |ver| image:: https://img.shields.io/pypi/v/pyvcloud.svg
:alt: Stable Version
:scale: 100%
:target: https://pypi.python.org/pypi/pyvcloud


Project details


Release history Release notifications | RSS feed

This version

18

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyvcloud-18.tar.gz (1.3 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyvcloud-18-py2-none-any.whl (1.4 MB view details)

Uploaded Python 2

File details

Details for the file pyvcloud-18.tar.gz.

File metadata

  • Download URL: pyvcloud-18.tar.gz
  • Upload date:
  • Size: 1.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pyvcloud-18.tar.gz
Algorithm Hash digest
SHA256 6b93597c72c4dcf7205705c332f0edbe28902309c7741d698dbae83fe500de65
MD5 72662e44cdefabd8fd3e6ea6fa92a896
BLAKE2b-256 6712bf54ac742efb0f9e98e9aea69ce58726220caabba12836023cf58cf241bf

See more details on using hashes here.

File details

Details for the file pyvcloud-18-py2-none-any.whl.

File metadata

File hashes

Hashes for pyvcloud-18-py2-none-any.whl
Algorithm Hash digest
SHA256 d07059c10feb32e627f2bb590357d4d98cf98aec77a5731d5c008a7913fc3689
MD5 0ffc9b2a237012fc768e5b57a247263b
BLAKE2b-256 941b9399b368f468694833d3bf31a2b71ca23c8b8a9ed8163bf8b6087dd0f2ec

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page