ec2control / ec2control / ec2.py

from boto.ec2.connection import EC2Connection
import time

class CommandError(Exception):
    pass

class Instance(object):
    instance = None

    def __init__(self, config, name):
        self.config_file = config
        if name is None:
            if config.get("default_instance"):
                name = config["default_instance"]
            else:
                raise CommandError("No instance name specified")
        else:
            self.name = name

        if not config.has_section("instance_%s" % name):
            raise CommandError("Unknown instance name: %s" % name)
        self.config = config.section_dict("instance_%s" % name)
        self.descriptive_name = self.config['descriptive_name']
        self._conn = EC2Connection(config['aws_key'], config['aws_secret'])

    @property
    def ip_address(self):
        if self.instance:
            return self.instance.ip_address
        else:
            return None

    def start(self):
        instances = self._conn.start_instances(instance_ids=[self.config['instance_id']])

        self.instance = inst = instances[0]

        inst.update()
        while inst.state == 'pending':
            time.sleep(10)
            inst.update()

        # grease the wheels, seems to 
        # say "stopped" for a second here
        time.sleep(10)

        self.status = inst.state
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.