~kirkland/pyjuju/tmux

« back to all changes in this revision

Viewing changes to ensemble/providers/ec2/accessor.py

  • Committer: Jim Baker
  • Date: 2011-08-10 20:03:23 UTC
  • mfrom: (273.1.63 expose-provider-ec2)
  • Revision ID: jim.baker@canonical.com-20110810200323-84ifmo0z54ccoxgq
merged expose-provider-ec2 [r=niemeyer,fwereade][f=767420]

Modified EC2 provider to support firewall management.


Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
from twisted.internet.defer import fail
 
1
from twisted.internet.defer import inlineCallbacks, returnValue
 
2
from txaws.ec2.exception import EC2Error
2
3
 
3
4
from ensemble.errors import ProviderInteractionError
4
5
 
9
10
class EC2MachineAccessor(EC2ProviderMachineFilter):
10
11
    """Retrieve a specific machine by provider id."""
11
12
 
 
13
    @inlineCallbacks
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)
16
 
        return d
17
 
 
18
 
    def _create_provider_machine(self, instances, provider_id):
19
 
        if not instances:
20
 
            return fail(
21
 
                ProviderInteractionError(
22
 
                    "Machine (id: %r) was not found" % provider_id))
23
 
 
24
 
        instance = instances.pop()
25
 
        return machine_from_instance(instance)
 
15
        try:
 
16
            instances = yield self._provider.ec2.describe_instances(
 
17
                provider_id)
 
18
        except EC2Error, e:
 
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)
 
26
        if not filtered:
 
27
            raise ProviderInteractionError(
 
28
                "EC2 instance %s was not found" % provider_id)
 
29
        instance = filtered.pop()
 
30
        returnValue(machine_from_instance(instance))