def list_sizes(self, location=None):
"""
Eucalyptus 2 specific implementation of list_sizes.
"""
params = {'Action' : 'DescribeAvailabilityZones',
'ZoneName.1' : 'verbose'}
element = self.connection.request(self.path, params).object
sizes = self._to_sizes(element)
return sizes
def _to_sizes(self, element):
"""
Create a NodeSize object given a libcloud XML element.
Extra information is available in nodesize.extra dictionary.
"""
elem_sizes = findall(element=element, xpath='availabilityZoneInfo/item', namespace=NAMESPACE)[2:]
sizes = []
attributes = {}
for s in elem_sizes:
pieces = re.findall(r'\w+|!/', s[1].text)
id = s[0].text.split()[1]
size_info = {'id': id,
'name': id,
'ram': int(pieces[3]),
'disk': int(pieces[4]),
'bandwidth': 0,
'price': 0}
node_size = NodeSize(driver=self, **size_info)
node_size.extra = { 'cpu' : int(pieces[2]),
'occupancy': {'remaining': int(pieces[0]),
'total': int(pieces[1])}}
sizes.append(node_size)
return sizes