From 353c8da9cf85dc57cd641591c160995e8a3bdb9c Mon Sep 17 00:00:00 2001 From: Ivan Kusalic Date: Tue, 5 Nov 2013 11:21:30 +0100 Subject: [PATCH 3/3] Add ex_get_metadata_for_node to AWS and OpenStack --- libcloud/compute/drivers/ec2.py | 13 +++++++++++++ libcloud/compute/drivers/openstack.py | 13 +++++++++++++ libcloud/test/compute/test_ec2.py | 17 +++++++++++++++++ libcloud/test/compute/test_openstack.py | 11 +++++++++++ 4 files changed, 54 insertions(+) diff --git a/libcloud/compute/drivers/ec2.py b/libcloud/compute/drivers/ec2.py index 8121882..816560d 100644 --- a/libcloud/compute/drivers/ec2.py +++ b/libcloud/compute/drivers/ec2.py @@ -1300,6 +1300,19 @@ class BaseEC2NodeDriver(NodeDriver): namespace=NAMESPACE) return element == 'true' + def ex_get_metadata_for_node(self, node): + """ + Return the metadata associated with the node. + + :param node: Node instance + :type node: :class:`Node` + + :return: A dictionary or other mapping of strings to strings, + associating tag names with tag values. + :type tags: ``dict`` + """ + return node.extra['tags'] + def _add_instance_filter(self, params, node): """ Add instance filter to the provided params dictionary. diff --git a/libcloud/compute/drivers/openstack.py b/libcloud/compute/drivers/openstack.py index bb96828..eb6a982 100644 --- a/libcloud/compute/drivers/openstack.py +++ b/libcloud/compute/drivers/openstack.py @@ -2023,6 +2023,19 @@ class OpenStack_1_1_NodeDriver(OpenStackNodeDriver): method='POST', data=data) return resp.status == httplib.ACCEPTED + def ex_get_metadata_for_node(self, node): + """ + Return the metadata associated with the node. + + :param node: Node instance + :type node: :class:`Node` + + :return: A dictionary or other mapping of strings to strings, + associating tag names with tag values. + :type tags: ``dict`` + """ + return node.extra['metadata'] + class OpenStack_1_1_FloatingIpPool(object): """ diff --git a/libcloud/test/compute/test_ec2.py b/libcloud/test/compute/test_ec2.py index 9618828..7fbf173 100644 --- a/libcloud/test/compute/test_ec2.py +++ b/libcloud/test/compute/test_ec2.py @@ -631,6 +631,23 @@ class EC2Tests(LibcloudTestCase, TestCaseMixin): ex_securitygroup=security_groups, ex_security_groups=security_groups) + def test_ex_get_metadata_for_node(self): + image = NodeImage(id='ami-be3adfd7', + name=self.image_name, + driver=self.driver) + size = NodeSize('m1.small', 'Small Instance', None, None, None, None, + driver=self.driver) + node = self.driver.create_node(name='foo', + image=image, + size=size, + ex_metadata={'Bar': 'baz', 'Num': '42'}) + + metadata = self.driver.ex_get_metadata_for_node(node) + self.assertEqual(metadata['Name'], 'foo') + self.assertEqual(metadata['Bar'], 'baz') + self.assertEqual(metadata['Num'], '42') + self.assertEqual(len(metadata), 3) + class EC2USWest1Tests(EC2Tests): region = 'us-west-1' diff --git a/libcloud/test/compute/test_openstack.py b/libcloud/test/compute/test_openstack.py index a68510b..d8c7840 100644 --- a/libcloud/test/compute/test_openstack.py +++ b/libcloud/test/compute/test_openstack.py @@ -1412,6 +1412,17 @@ class OpenStack_1_1_Tests(unittest.TestCase, TestCaseMixin): network = self.driver.ex_list_networks()[0] self.assertTrue(self.driver.ex_delete_network(network=network)) + def test_ex_get_metadata_for_node(self): + image = NodeImage(id=11, name='Ubuntu 8.10 (intrepid)', driver=self.driver) + size = NodeSize(1, '256 slice', None, None, None, None, driver=self.driver) + node = self.driver.create_node(name='foo', + image=image, + size=size) + + metadata = self.driver.ex_get_metadata_for_node(node) + self.assertEqual(metadata['My Server Name'], 'Apache1') + self.assertEqual(len(metadata), 1) + class OpenStack_1_1_FactoryMethodTests(OpenStack_1_1_Tests): should_list_locations = False -- 1.8.2.3