1
from twisted.internet.defer import fail
1
from twisted.internet.defer import inlineCallbacks, returnValue
2
from txaws.ec2.exception import EC2Error
3
4
from ensemble.errors import ProviderInteractionError
9
10
class EC2MachineAccessor(EC2ProviderMachineFilter):
10
11
"""Retrieve a specific machine by provider id."""
12
14
def run(self, provider_id):
13
d = self._provider.ec2.describe_instances(provider_id)
14
d.addCallback(self._filter_provider_machines)
15
d.addCallback(self._create_provider_machine, provider_id)
18
def _create_provider_machine(self, instances, provider_id):
21
ProviderInteractionError(
22
"Machine (id: %r) was not found" % provider_id))
24
instance = instances.pop()
25
return machine_from_instance(instance)
16
instances = yield self._provider.ec2.describe_instances(
19
# AWS may return an error when the instance is not found
20
# (but presumably eventually will be), eg,
21
# txaws.ec2.exception.EC2Error: Error Message:
22
# The instance ID 'i-afe113ce' does not exist
23
raise ProviderInteractionError(
24
"EC2 error when looking up instance %s: %s" % (provider_id, e))
25
filtered = self._filter_provider_machines(instances)
27
raise ProviderInteractionError(
28
"EC2 instance %s was not found" % provider_id)
29
instance = filtered.pop()
30
returnValue(machine_from_instance(instance))