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