Source

ec2control / ec2control / ec2.py

Full commit
from boto.ec2.connection import EC2Connection
import time
import logging
log = logging.getLogger(__name__)

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):
        instance_id = self.config['instance_id']
        log.info("Starting instance id: %s", instance_id)
        instances = self._conn.start_instances(instance_ids=[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
        log.info("Status: %s", self.status)