A consistent interface to multiple IaaS clouds; in Python http://cloudbridge.cloudve.org

vikramdoda e5cb389141 Testing travis env variables 9 éve
azure_integration_test 823739635f keypairs implementation 8 éve
azure_test 9eb6f5aee1 Update mindisk value, modified the subnet name to be unique, removed config info from azure helpers 8 éve
cloudbridge d211e3d70d Testing travis env variables 8 éve
docs 1c49eb27e5 Updated setup.py 8 éve
integration_test d1f0a6a30b Refactored code for resource model id 8 éve
test 9eb6f5aee1 Update mindisk value, modified the subnet name to be unique, removed config info from azure helpers 8 éve
.codeclimate.yml b23340051e Removed unnecessary codeclimate warnings 8 éve
.gitignore 5678d52459 Update gitignore to ignore venv folder 9 éve
.travis.yml fd4bff9465 Use latest setuptools on TravisCI 8 éve
CHANGELOG.rst d40eb16fa2 Patch release v0.3.3 8 éve
LICENSE 1500caecff Initial commit 10 éve
README.rst c7b46a3b4d Used session to get project_id + fixed readme 8 éve
azureInstanceType.json 7681fee832 json file updated 8 éve
codecov.yml 5a9e9d4efe Fixed requirements in setup.py 8 éve
getting started with azure provider for cloudbridge.docx 1fef1f2685 Updated the document for Object store service 8 éve
requirements.txt 2f393227f9 Updated python-keystoneclient to >= 2.0.0 10 éve
setup.py d75d9e63e3 Merged azuedev branch to azure_dev_v2 branch 8 éve
tox.ini e5cb389141 Testing travis env variables 8 éve

README.rst

CloudBridge aims to provide a simple layer of abstraction over
different cloud providers, reducing or eliminating the need to write
conditional code for each cloud.

.. image:: https://landscape.io/github/gvlproject/cloudbridge/master/landscape.svg?style=flat
:target: https://landscape.io/github/gvlproject/cloudbridge/master
:alt: Landscape Code Health

.. image:: https://coveralls.io/repos/gvlproject/cloudbridge/badge.svg?branch=master&service=github
:target: https://coveralls.io/github/gvlproject/cloudbridge?branch=master
:alt: Code Coverage

.. image:: https://codeclimate.com/github/gvlproject/cloudbridge/badges/gpa.svg
:target: https://codeclimate.com/github/gvlproject/cloudbridge
:alt: Code Climate

.. image:: https://img.shields.io/pypi/v/cloudbridge.svg
:target: https://pypi.python.org/pypi/cloudbridge/
:alt: latest version available on PyPI

.. image:: https://readthedocs.org/projects/cloudbridge/badge/?version=latest
:target: http://cloudbridge.readthedocs.org/en/latest/?badge=latest
:alt: Documentation Status

.. image:: https://badge.waffle.io/gvlproject/cloudbridge.png?label=in%20progress&title=In%20Progress
:target: https://waffle.io/gvlproject/cloudbridge?utm_source=badge
:alt: 'Waffle.io - Issues in progress'

.. |aws-py27| image:: https://travis-matrix-badges.herokuapp.com/repos/gvlproject/cloudbridge/branches/master/1
:target: https://travis-ci.org/gvlproject/cloudbridge
.. |aws-py36| image:: https://travis-matrix-badges.herokuapp.com/repos/gvlproject/cloudbridge/branches/master/3
:target: https://travis-ci.org/gvlproject/cloudbridge
.. |aws-pypy| image:: https://travis-matrix-badges.herokuapp.com/repos/gvlproject/cloudbridge/branches/master/5
:target: https://travis-ci.org/gvlproject/cloudbridge

.. |os-py27| image:: https://travis-matrix-badges.herokuapp.com/repos/gvlproject/cloudbridge/branches/master/2
:target: https://travis-ci.org/gvlproject/cloudbridge
.. |os-py36| image:: https://travis-matrix-badges.herokuapp.com/repos/gvlproject/cloudbridge/branches/master/4
:target: https://travis-ci.org/gvlproject/cloudbridge
.. |os-pypy| image:: https://travis-matrix-badges.herokuapp.com/repos/gvlproject/cloudbridge/branches/master/6
:target: https://travis-ci.org/gvlproject/cloudbridge

.. |azure-py27| image:: https://travis-matrix-badges.herokuapp.com/repos/gvlproject/cloudbridge/branches/azure_dev/2
:target: https://travis-ci.org/gvlproject/cloudbridge/branches
.. |azure-py36| image:: https://travis-matrix-badges.herokuapp.com/repos/gvlproject/cloudbridge/branches/azure_dev/5
:target: https://travis-ci.org/gvlproject/cloudbridge/branches
.. |azure-pypy| image:: https://travis-matrix-badges.herokuapp.com/repos/gvlproject/cloudbridge/branches/azure_dev/8
:target: https://travis-ci.org/gvlproject/cloudbridge/branches

.. |gce-py27| image:: https://travis-matrix-badges.herokuapp.com/repos/gvlproject/cloudbridge/branches/gce/3
:target: https://travis-ci.org/gvlproject/cloudbridge/branches
.. |gce-py36| image:: https://travis-matrix-badges.herokuapp.com/repos/gvlproject/cloudbridge/branches/gce/6
:target: https://travis-ci.org/gvlproject/cloudbridge/branches
.. |gce-pypy| image:: https://travis-matrix-badges.herokuapp.com/repos/gvlproject/cloudbridge/branches/gce/9
:target: https://travis-ci.org/gvlproject/cloudbridge/branches


Build Status
~~~~~~~~~~~~

+--------------------------+--------------+--------------+--------------+
| **Provider/Environment** | py27 | py36 | pypy |
+--------------------------+--------------+--------------+--------------+
| **aws** | |aws-py27| | |aws-py36| | |aws-pypy| |
+--------------------------+--------------+--------------+--------------+
| **openstack** | |os-py27| | |os-py36| | |os-pypy| |
+--------------------------+--------------+--------------+--------------+
| **azure (alpha)** | |azure-py27| | |azure-py36| | |azure-py36| |
+--------------------------+--------------+--------------+--------------+
| **gce (alpha)** | |gce-py27| | |gce-py36| | |gce-pypy| |
+--------------------------+--------------+--------------+--------------+

Installation
~~~~~~~~~~~~
Install the latest release from PyPi:

.. code-block:: shell

pip install cloudbridge

For other installation options, see the `installation page`_ in
the documentation.


Usage example
~~~~~~~~~~~~~

To `get started`_ with CloudBridge, export your cloud access credentials
(e.g., AWS_ACCESS_KEY and AWS_SECRET_KEY for your AWS credentials) and start
exploring the API:

.. code-block:: python

from cloudbridge.cloud.factory import CloudProviderFactory, ProviderList

provider = CloudProviderFactory().create_provider(ProviderList.AWS, {})
print(provider.security.key_pairs.list())


Citation
~~~~~~~~

N. Goonasekera, A. Lonie, J. Taylor, and E. Afgan,
"CloudBridge: a Simple Cross-Cloud Python Library,"
presented at the Proceedings of the XSEDE16 Conference on Diversity, Big Data, and Science at Scale, Miami, USA, 2016.
DOI: http://dx.doi.org/10.1145/2949550.2949648


Documentation
~~~~~~~~~~~~~
Documentation can be found at https://cloudbridge.readthedocs.org.


Quick Reference
~~~~~~~~~~~~~~~
The following object graph shows how to access various provider services, and the resource
that they return.

.. image:: http://cloudbridge.readthedocs.org/en/latest/_images/object_relationships_detailed.svg
:target: http://cloudbridge.readthedocs.org/en/latest/?badge=latest#quick-reference
:alt: CloudBridge Quick Reference


Design Goals
~~~~~~~~~~~~

1. Create a cloud abstraction layer which minimises or eliminates the need for
cloud specific special casing (i.e., Not require clients to write
``if EC2 do x else if OPENSTACK do y``.)

2. Have a suite of conformance tests which are comprehensive enough that goal
1 can be achieved. This would also mean that clients need not manually test
against each provider to make sure their application is compatible.

3. Opt for a minimum set of features that a cloud provider will support,
instead of a lowest common denominator approach. This means that reasonably
mature clouds like Amazon and OpenStack are used as the benchmark against
which functionality & features are determined. Therefore, there is a
definite expectation that the cloud infrastructure will support a compute
service with support for images and snapshots and various machine sizes.
The cloud infrastructure will very likely support block storage, although
this is currently optional. It may optionally support object storage.

4. Make the CloudBridge layer as thin as possible without compromising goal 1.
By wrapping the cloud provider's native SDK and doing the minimal work
necessary to adapt the interface, we can achieve greater development speed
and reliability since the native provider SDK is most likely to have both
properties.


Contributing
~~~~~~~~~~~~
Community contributions for any part of the project are welcome. If you have
a completely new idea or would like to bounce your idea before moving forward
with the implementation, feel free to create an issue to start a discussion.

Contributions should come in the form or a pull request. We strive for 100% test
coverage so code will only be accepted if it comes with appropriate tests and it
does not break existing functionality. Further, the code needs to be well
documented and all methods have docstrings. We are largely adhering to the
`PEP8 style guide`_ with 80 character lines, 4-space indentation (spaces
instead of tabs), explicit, one-per-line imports among others. Please keep the
style consistent with the rest of the project.

Conceptually, the library is laid out such that there is a factory used to
create a reference to a cloud provider. Each provider offers a set of services
and resources. Services typically perform actions while resources offer
information (and can act on itself, when appropriate). The structure of each
object is defined via an abstract interface (see
``cloudbridge/providers/interfaces``) and any object should implement the
defined interface. If adding a completely new provider, take a look at the
`provider development page`_ in the documentation.


.. _`installation page`: http://cloudbridge.readthedocs.org/en/
latest/topics/install.html
.. _`get started`: http://cloudbridge.readthedocs.org/en/latest/
getting_started.html
.. _`PEP8 style guide`: https://www.python.org/dev/peps/pep-0008/
.. _`provider development page`: http://cloudbridge.readthedocs.org/
en/latest/
topics/provider_development.html