| 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 |