Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion libcloud/compute/drivers/ec2.py
Original file line number Diff line number Diff line change
Expand Up @@ -1875,7 +1875,7 @@ class BaseEC2NodeDriver(NodeDriver):
'terminated': NodeState.TERMINATED
}

def list_nodes(self, ex_node_ids=None):
def list_nodes(self, ex_node_ids=None, ex_filters=None):
"""
List all nodes

Expand All @@ -1886,21 +1886,34 @@ def list_nodes(self, ex_node_ids=None):
:param ex_node_ids: List of ``node.id``
:type ex_node_ids: ``list`` of ``str``

:param ex_filters: The filters so that the response includes
information for only certain nodes.
:type ex_filters: ``dict``

:rtype: ``list`` of :class:`Node`
"""

params = {'Action': 'DescribeInstances'}

if ex_node_ids:
params.update(self._pathlist('InstanceId', ex_node_ids))

if ex_filters:
params.update(self._build_filters(ex_filters))

elem = self.connection.request(self.path, params=params).object

nodes = []
for rs in findall(element=elem, xpath='reservationSet/item',
namespace=NAMESPACE):
nodes += self._to_nodes(rs, 'instancesSet/item')

nodes_elastic_ips_mappings = self.ex_describe_addresses(nodes)

for node in nodes:
ips = nodes_elastic_ips_mappings[node.id]
node.public_ips.extend(ips)

return nodes

def list_sizes(self, location=None):
Expand Down