Create new EC2 instance named ``hostname``.

        You may specify keyword arguments matching those of ``__init__`` (e.g.
        ``size``, ``ami``) to override any defaults given when the object was
        created, or to fill in parameters not given at initialization time.

        Additional parameters that are instance-specific:

        * ``ip``: The static private IP address for the new host.

        This method returns a ``boto.EC2.instance.Instance`` object.

def create(self, hostname, **kwargs):
        """
        Create new EC2 instance named ``hostname``.

        You may specify keyword arguments matching those of ``__init__`` (e.g.
        ``size``, ``ami``) to override any defaults given when the object was
        created, or to fill in parameters not given at initialization time.

        Additional parameters that are instance-specific:

        * ``ip``: The static private IP address for the new host.

        This method returns a ``boto.EC2.instance.Instance`` object.
        """
        # Create
        creating = "Creating '%s' (a %s instance of %s)" % (
            hostname, kwargs['size'], kwargs['ami']
        )
        with self.msg(creating):
            instance = self._create(hostname, kwargs)

        # Name
        with self.msg("Tagging as '%s'" % hostname):
            try:
                instance.rename(hostname)
            # One-time retry for API errors when setting tags
            except _ResponseError:
                time.sleep(1)
                instance.rename(hostname)

        # Wait for it to finish booting
        with self.msg("Waiting for boot: "):
            tick = 5
            while instance.state != 'running':
                self.log(".", end='')
                time.sleep(tick)
                instance.update()

        return instance