Author: tomaz
Date: Sun Jun 26 15:30:57 2011
New Revision: 1139813

URL: http://svn.apache.org/viewvc?rev=1139813&view=rev
Log:
Fix node name handling in the EC2 driver.

Patch contributed by Wiktor as part of LIBCLOUD-84.

Modified:
    libcloud/trunk/libcloud/compute/drivers/ec2.py
    libcloud/trunk/test/compute/test_ec2.py

Modified: libcloud/trunk/libcloud/compute/drivers/ec2.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/compute/drivers/ec2.py?rev=1139813&r1=1139812&r2=1139813&view=diff
==============================================================================
--- libcloud/trunk/libcloud/compute/drivers/ec2.py (original)
+++ libcloud/trunk/libcloud/compute/drivers/ec2.py Sun Jun 26 15:30:57 2011
@@ -298,11 +298,18 @@ class EC2NodeDriver(NodeDriver):
         except KeyError:
             state = NodeState.UNKNOWN
 
+        instance_id = findtext(element=element, xpath='instanceId',
+                               namespace=NAMESPACE)
+        tags = dict((findtext(element=item, xpath='key', namespace=NAMESPACE),
+                    findtext(element=item, xpath='value', namespace=NAMESPACE))
+                    for item in findall(element=element, xpath='tagSet/item', 
namespace=NAMESPACE))
+
+        name = tags.get('Name', instance_id)
+
         n = Node(
             id=findtext(element=element, xpath='instanceId',
                         namespace=NAMESPACE),
-            name=findtext(element=element, xpath='instanceId',
-                          namespace=NAMESPACE),
+            name=name,
             state=state,
             public_ip=[findtext(element=element, xpath='ipAddress',
                                 namespace=NAMESPACE)],
@@ -342,10 +349,7 @@ class EC2NodeDriver(NodeDriver):
                 'clienttoken' : findattr(element=element, xpath="clientToken",
                                          namespace=NAMESPACE),
                 'groups': groups,
-                'tags':
-                    dict((findtext(element=item, xpath='key', 
namespace=NAMESPACE),
-                          findtext(element=item, xpath='value', 
namespace=NAMESPACE))
-                           for item in findall(element=element, 
xpath='tagSet/item', namespace=NAMESPACE))
+                'tags': tags,
             }
         )
         return n
@@ -830,8 +834,10 @@ class EC2NodeDriver(NodeDriver):
         nodes = self._to_nodes(object, 'instancesSet/item')
 
         for node in nodes:
-            self.ex_create_tags(node=node, tags={'Name': kwargs['name']})
+            tags =  {'Name': kwargs['name']}
+            self.ex_create_tags(node=node, tags=tags)
             node.name = kwargs['name']
+            node.extra.update({'tags': tags})
 
         if len(nodes) == 1:
             return nodes[0]

Modified: libcloud/trunk/test/compute/test_ec2.py
URL: 
http://svn.apache.org/viewvc/libcloud/trunk/test/compute/test_ec2.py?rev=1139813&r1=1139812&r2=1139813&view=diff
==============================================================================
--- libcloud/trunk/test/compute/test_ec2.py (original)
+++ libcloud/trunk/test/compute/test_ec2.py Sun Jun 26 15:30:57 2011
@@ -43,6 +43,9 @@ class EC2Tests(LibcloudTestCase, TestCas
         size = NodeSize('m1.small', 'Small Instance', None, None, None, None, 
driver=self.driver)
         node = self.driver.create_node(name='foo', image=image, size=size)
         self.assertEqual(node.id, 'i-2ba64342')
+        self.assertEqual(node.name, 'foo')
+        self.assertEqual(node.extra['tags']['Name'], 'foo')
+        self.assertEqual(len(node.extra['tags']), 1)
 
     def test_create_node_idempotent(self):
         EC2MockHttp.type = 'idempotent'
@@ -93,11 +96,19 @@ class EC2Tests(LibcloudTestCase, TestCas
         node = self.driver.list_nodes()[0]
         public_ips = sorted(node.public_ip)
         self.assertEqual(node.id, 'i-4382922a')
+        self.assertEqual(node.name, node.id)
         self.assertEqual(len(node.public_ip), 2)
 
         self.assertEqual(public_ips[0], '1.2.3.4')
         self.assertEqual(public_ips[1], '1.2.3.5')
 
+    def test_list_nodes_with_name_tag(self):
+        EC2MockHttp.type = 'WITH_TAGS'
+        node = self.driver.list_nodes()[0]
+        public_ips = sorted(node.public_ip)
+        self.assertEqual(node.id, 'i-8474834a')
+        self.assertEqual(node.name, 'foobar1')
+
     def test_list_location(self):
         locations = self.driver.list_locations()
         self.assertTrue(len(locations) > 0)
@@ -238,6 +249,10 @@ class EC2MockHttp(MockHttp):
         body = self.fixtures.load('describe_instances.xml')
         return (httplib.OK, body, {}, httplib.responses[httplib.OK])
 
+    def _WITH_TAGS_DescribeInstances(self, method, url, body, headers):
+        body = self.fixtures.load('describe_instances_with_tags.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
     def _DescribeAvailabilityZones(self, method, url, body, headers):
         body = self.fixtures.load('describe_availability_zones.xml')
         return (httplib.OK, body, {}, httplib.responses[httplib.OK])
@@ -282,6 +297,10 @@ class EC2MockHttp(MockHttp):
         body = self.fixtures.load('describe_addresses_multi.xml')
         return (httplib.OK, body, {}, httplib.responses[httplib.OK])
 
+    def _WITH_TAGS_DescribeAddresses(self, method, url, body, headers):
+        body = self.fixtures.load('describe_addresses_multi.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
     def _ModifyInstanceAttribute(self, method, url, body, headers):
         body = self.fixtures.load('modify_instance_attribute.xml')
         return (httplib.OK, body, {}, httplib.responses[httplib.OK])


Reply via email to