You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by to...@apache.org on 2011/04/07 13:45:09 UTC
svn commit: r1089834 -
/incubator/libcloud/trunk/libcloud/compute/drivers/ec2.py
Author: tomaz
Date: Thu Apr 7 11:45:09 2011
New Revision: 1089834
URL: http://svn.apache.org/viewvc?rev=1089834&view=rev
Log:
Update file affected by the previous commit.
Modified:
incubator/libcloud/trunk/libcloud/compute/drivers/ec2.py
Modified: incubator/libcloud/trunk/libcloud/compute/drivers/ec2.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/compute/drivers/ec2.py?rev=1089834&r1=1089833&r2=1089834&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/compute/drivers/ec2.py (original)
+++ incubator/libcloud/trunk/libcloud/compute/drivers/ec2.py Thu Apr 7 11:45:09 2011
@@ -26,6 +26,7 @@ import copy
from hashlib import sha256
from xml.etree import ElementTree as ET
+from libcloud.utils import fixxpath, findtext, findattr, findall
from libcloud.common.base import Response, ConnectionUserAndKey
from libcloud.common.types import InvalidCredsError, MalformedResponseError, LibcloudError
from libcloud.compute.providers import Provider
@@ -269,19 +270,6 @@ class EC2NodeDriver(NodeDriver):
'terminated': NodeState.TERMINATED
}
- def _findtext(self, element, xpath):
- return element.findtext(self._fixxpath(xpath))
-
- def _fixxpath(self, xpath):
- # ElementTree wants namespaces in its xpaths, so here we add them.
- return "/".join(["{%s}%s" % (NAMESPACE, e) for e in xpath.split("/")])
-
- def _findattr(self, element, xpath):
- return element.findtext(self._fixxpath(xpath))
-
- def _findall(self, element, xpath):
- return element.findall(self._fixxpath(xpath))
-
def _pathlist(self, key, arr):
"""
Converts a key and an array of values into AWS query param format.
@@ -305,42 +293,60 @@ class EC2NodeDriver(NodeDriver):
def _to_nodes(self, object, xpath, groups=None):
return [ self._to_node(el, groups=groups)
- for el in object.findall(self._fixxpath(xpath)) ]
+ for el in object.findall(fixxpath(xpath=xpath, namespace=NAMESPACE)) ]
def _to_node(self, element, groups=None):
try:
state = self.NODE_STATE_MAP[
- self._findattr(element, "instanceState/name")
+ findattr(element=element, xpath="instanceState/name",
+ namespace=NAMESPACE)
]
except KeyError:
state = NodeState.UNKNOWN
n = Node(
- id=self._findtext(element, 'instanceId'),
- name=self._findtext(element, 'instanceId'),
+ id=findtext(element=element, xpath='instanceId',
+ namespace=NAMESPACE),
+ name=findtext(element=element, xpath='instanceId',
+ namespace=NAMESPACE),
state=state,
- public_ip=[self._findtext(element, 'ipAddress')],
- private_ip=[self._findtext(element, 'privateIpAddress')],
+ public_ip=[findtext(element=element, xpath='ipAddress',
+ namespace=NAMESPACE)],
+ private_ip=[findtext(element=element, xpath='privateIpAddress',
+ namespace=NAMESPACE)],
driver=self.connection.driver,
extra={
- 'dns_name': self._findattr(element, "dnsName"),
- 'instanceId': self._findattr(element, "instanceId"),
- 'imageId': self._findattr(element, "imageId"),
- 'private_dns': self._findattr(element, "privateDnsName"),
- 'status': self._findattr(element, "instanceState/name"),
- 'keyname': self._findattr(element, "keyName"),
- 'launchindex': self._findattr(element, "amiLaunchIndex"),
+ 'dns_name': findattr(element=element, xpath="dnsName",
+ namespace=NAMESPACE),
+ 'instanceId': findattr(element=element, xpath="instanceId",
+ namespace=NAMESPACE),
+ 'imageId': findattr(element=element, xpath="imageId",
+ namespace=NAMESPACE),
+ 'private_dns': findattr(element=element, xpath="privateDnsName",
+ namespace=NAMESPACE),
+ 'status': findattr(element=element, xpath="instanceState/name",
+ namespace=NAMESPACE),
+ 'keyname': findattr(element=element, xpath="keyName",
+ namespace=NAMESPACE),
+ 'launchindex': findattr(element=element, xpath="amiLaunchIndex",
+ namespace=NAMESPACE),
'productcode':
- [p.text for p in self._findall(
- element, "productCodesSet/item/productCode"
+ [p.text for p in findall(element=element,
+ xpath="productCodesSet/item/productCode",
+ namespace=NAMESPACE
)],
- 'instancetype': self._findattr(element, "instanceType"),
- 'launchdatetime': self._findattr(element, "launchTime"),
- 'availability': self._findattr(element,
- "placement/availabilityZone"),
- 'kernelid': self._findattr(element, "kernelId"),
- 'ramdiskid': self._findattr(element, "ramdiskId"),
- 'clienttoken' : self._findattr(element, "clientToken"),
+ 'instancetype': findattr(element=element, xpath="instanceType",
+ namespace=NAMESPACE),
+ 'launchdatetime': findattr(element=element, xpath="launchTime",
+ namespace=NAMESPACE),
+ 'availability': findattr(element, xpath="placement/availabilityZone",
+ namespace=NAMESPACE),
+ 'kernelid': findattr(element=element, xpath="kernelId",
+ namespace=NAMESPACE),
+ 'ramdiskid': findattr(element=element, xpath="ramdiskId",
+ namespace=NAMESPACE),
+ 'clienttoken' : findattr(element=element, xpath="clientToken",
+ namespace=NAMESPACE),
'groups': groups
}
)
@@ -349,12 +355,14 @@ class EC2NodeDriver(NodeDriver):
def _to_images(self, object):
return [ self._to_image(el)
for el in object.findall(
- self._fixxpath('imagesSet/item')
+ fixxpath(xpath='imagesSet/item', namespace=NAMESPACE)
) ]
def _to_image(self, element):
- n = NodeImage(id=self._findtext(element, 'imageId'),
- name=self._findtext(element, 'imageLocation'),
+ n = NodeImage(id=findtext(element=element, xpath='imageId',
+ namespace=NAMESPACE),
+ name=findtext(element=element, xpath='imageLocation',
+ namespace=NAMESPACE),
driver=self.connection.driver)
return n
@@ -362,9 +370,11 @@ class EC2NodeDriver(NodeDriver):
params = {'Action': 'DescribeInstances' }
elem=self.connection.request(self.path, params=params).object
nodes=[]
- for rs in self._findall(elem, 'reservationSet/item'):
+ for rs in findall(element=elem, xpath='reservationSet/item',
+ namespace=NAMESPACE):
groups=[g.findtext('')
- for g in self._findall(rs, 'groupSet/item/groupId')]
+ for g in findall(element=rs, xpath='groupSet/item/groupId',
+ namespace=NAMESPACE)]
nodes += self._to_nodes(rs, 'instancesSet/item', groups)
nodes_elastic_ips_mappings = self.ex_describe_addresses(nodes)
@@ -424,8 +434,10 @@ class EC2NodeDriver(NodeDriver):
'KeyName': name,
}
response = self.connection.request(self.path, params=params).object
- key_material = self._findtext(response, 'keyMaterial')
- key_fingerprint = self._findtext(response, 'keyFingerprint')
+ key_material = findtext(element=response, xpath='keyMaterial',
+ namespace=NAMESPACE)
+ key_fingerprint = findtext(element=response, xpath='keyFingerprint',
+ namespace=NAMESPACE)
return {
'keyMaterial': key_material,
'keyFingerprint': key_fingerprint,
@@ -453,8 +465,9 @@ class EC2NodeDriver(NodeDriver):
}
response = self.connection.request(self.path, params=params).object
- key_name = self._findtext(response, 'keyName')
- key_fingerprint = self._findtext(response, 'keyFingerprint')
+ key_name = findtext(element=response, xpath='keyName', namespace=NAMESPACE)
+ key_fingerprint = findtext(element=response, xpath='keyFingerprint',
+ namespace=NAMESPACE)
return {
'keyName': key_name,
'keyFingerprint': key_fingerprint,
@@ -475,7 +488,8 @@ class EC2NodeDriver(NodeDriver):
}
response = self.connection.request(self.path, params=params).object
- key_name = self._findattr(response, 'keySet/item/keyName')
+ key_name = findattr(element=response, xpath='keySet/item/keyName',
+ namespace=NAMESPACE)
return {
'keyName': key_name
}
@@ -565,10 +579,14 @@ class EC2NodeDriver(NodeDriver):
params=params.copy()).object
availability_zones = []
- for element in self._findall(result, 'availabilityZoneInfo/item'):
- name = self._findtext(element, 'zoneName')
- zone_state = self._findtext(element, 'zoneState')
- region_name = self._findtext(element, 'regionName')
+ for element in findall(element=result, xpath='availabilityZoneInfo/item',
+ namespace=NAMESPACE):
+ name = findtext(element=element, xpath='zoneName',
+ namespace=NAMESPACE)
+ zone_state = findtext(element=element, xpath='zoneState',
+ namespace=NAMESPACE)
+ region_name = findtext(element=element, xpath='regionName',
+ namespace=NAMESPACE)
availability_zone = ExEC2AvailabilityZone(
name=name,
@@ -599,9 +617,10 @@ class EC2NodeDriver(NodeDriver):
params=params.copy()).object
tags = {}
- for element in self._findall(result, 'tagSet/item'):
- key = self._findtext(element, 'key')
- value = self._findtext(element, 'value')
+ for element in findall(element=result, xpath='tagSet/item',
+ namespace=NAMESPACE):
+ key = findtext(element=element, xpath='key', namespace=NAMESPACE)
+ value = findtext(element=element, xpath='value', namespace=NAMESPACE)
tags[key] = value
return tags
@@ -677,9 +696,12 @@ class EC2NodeDriver(NodeDriver):
for node_id in node_instance_ids:
nodes_elastic_ip_mappings.setdefault(node_id, [])
- for element in self._findall(result, 'addressesSet/item'):
- instance_id = self._findtext(element, 'instanceId')
- ip_address = self._findtext(element, 'publicIp')
+ for element in findall(element=result, xpath='addressesSet/item',
+ namespace=NAMESPACE):
+ instance_id = findtext(element=element, xpath='instanceId',
+ namespace=NAMESPACE)
+ ip_address = findtext(element=element, xpath='publicIp',
+ namespace=NAMESPACE)
if instance_id not in node_instance_ids:
continue
@@ -720,7 +742,8 @@ class EC2NodeDriver(NodeDriver):
result = self.connection.request(self.path,
params=params.copy()).object
- element = self._findtext(result, 'return')
+ element = findtext(element=result, xpath='return',
+ namespace=NAMESPACE)
return element == 'true'
def ex_change_node_size(self, node, new_size):
@@ -995,4 +1018,3 @@ class NimbusNodeDriver(EC2NodeDriver):
# empty list per node
nodes_elastic_ip_mappings[node.id] = []
return nodes_elastic_ip_mappings
-