blob: 6079553fedba152093620e5e80bec3de7fdac51c [file] [log] [blame]
Frequently Asked Questions (FAQ)
================================
Why are the block storage related management methods located in the compute API?
--------------------------------------------------------------------------------
Block storage related management methods are located in the compute API because
in most cases block storage API is tightly coupled with the compute API meaning
that you can't manage block storage independent of the compute API.
This also makes sense because in most cases you are only interested in attaching
or detaching volumes from and to the compute nodes.
What are the extension methods and arguments?
---------------------------------------------
Libcloud acts as a lowest common denominator and exposes a unified base API
which allows you to work with many different cloud providers through a single
code base.
Being a lowest common denominator by definition means that not all of the
functionality offered by different cloud service providers is available
through a base API.
Libcloud solves this problem and allows user to access provider specific
functionality through a so called extension methods and arguments. Extension
methods and arguments are all the methods and arguments which are prefixed
with ``ex_``.
Extension methods are there for your convenience, but you should be careful
when you use them because they make switching or working with multiple
providers harder.
How do I test if provider credentials are valid?
------------------------------------------------
Libcloud makes the whole authentication process transparent to the user. As
such, the easiest way to check if provider credentials are valid is by
instantiating a driver and calling a method which results in an HTTP call.
If the credentials are valid, method will return a result, otherwise
:class:`libcloud.common.types.InvalidCredsError` exception will be thrown.
An example of such method is
:func:`libcloud.compute.base.NodeDriver.list_nodes`. Keep in mind that depending
on the account state, list_nodes method might return a lot of data.
If you want to avoid unnecessarily fetching a lot of data, you should find a
method specific to your provider which issues a request which results in small
amount of data being retrieved.
I want do add a new provider driver what should I do?
-----------------------------------------------------
For now the best thing to do is to look at an existing driver and test cases
for examples.
Libcloud currently supports more than 60 different providers. This means we
have a broad range of examples of different APIs and authentication methods.
APIs range from simple JSON based REST APIs to SOAP APIs. Authentication
methods range from simple shared token and digest auth to HMAC signed requests.
I want to add / propose a new API, what should I do?
----------------------------------------------------
We are always open to accepting a now top level API as long as it matches the
following criteria:
1. API must be indented to manage an online infrastructure oriented Cloud
service
2. Similar service is offered by multiple providers
3. It's possible to build a common API on top of services provided by different
services
Libcloud can be used with many different providers and acts as a lowest common
denominator which makes the last point most important one. Sometimes it doesn't
make sense to build a common Libcloud API even if multiple providers offer a
similar service. Usually the case is that the APIs are vastly different and
there aren't enough common points which would allow us to build a
cross-provider API which would still provide enough value to the end user.
If the API matches the criteria defined above, you should send a proposal to
our :ref:`mailing list <mailing-lists>` where we can discuss it further.
Ideally, the proposal should also contain a prototype of a driver for at least
two different providers. This helps us make sure that the API you have designed
is not biased towards a single provider.
How do I obtain Libcloud version?
---------------------------------
You can obtain currently active Libcloud version by accessing the
``libcloud.__version__`` variable.
Example #1 (command line):
.. sourcecode:: bash
python -c "import libcloud ; print libcloud.__version__"
Example #2 (code):
.. sourcecode:: python
import libcloud
libcloud.__version__