blob: 1d4f4409af164ca41e5fb603c1ec198fcffbb53f [file] [log] [blame]
Working with the object oriented APIs
=====================================
To make it easier for the end user, Libcloud components expose a fully
object-oriented API.
This means that besides the driver object you also work with ``NodeImage``,
and ``NodeSize`` object in the compute API, ``Container`` and ``Object``
object in the Storage API, ``Zone`` and ``Record`` object in the DNS API
and so on.
Methods which operate on those resources usually require you to pass in an
instance of the resource you want to manipulate or work with and not just an
id.
To obtain a reference to this resource, Libcloud providers corresponding get
and / or list methods.
A couple of examples are shown below.
Example 1 - listing records for a zone with a known id
------------------------------------------------------
.. literalinclude:: /examples/dns/list_zone_records.py
:language: python
In this example, the :func:`driver.get_zone` method call results in an HTTP
call.
Example 2 - creating an EC2 instance with a known ``NodeSize`` and ``NodeImage`` id
-----------------------------------------------------------------------------------
.. literalinclude:: /examples/compute/create_ec2_node.py
:language: python
In this example, both the :func:`driver.list_sizes` and
:func:`driver.list_images` method calls result in HTTP calls.
As you can see above, most of those getter methods retrieve extra information
about the resource from the provider API and result in an HTTP request.
There are some cases when you might not want this:
* You don't care if a resource doesn't exist
* You don't care about the extra attributes
* You want to avoid an extra HTTP request
* You want to avoid holding a reference to the resource object
If that is true for you, you can directly instantiate a resource with a known
id. You can see how to do this in the examples below.
Example 1 - listing records for a zone with a known id
------------------------------------------------------
.. literalinclude:: /examples/dns/list_zone_records_manual_instantiation.py
:language: python
Example 2 - creating an EC2 instance with a known ``NodeSize`` and ``NodeImage`` id
-----------------------------------------------------------------------------------
.. literalinclude:: /examples/compute/create_ec2_node_manual_instantiation.py
:language: python
Example 3 - creating an EC2 instance with an IAM profile
--------------------------------------------------------
.. literalinclude:: /examples/compute/create_ec2_node_iam.py
:language: python