def create_db(self, instance_name, instance_type, admin_username,
            admin_password, security_groups=None, db_name=None,
            storage_size_gb=DEFAULT_STORAGE_SIZE_GB,
            timeout_s=DEFAULT_TIMEOUT_S):
        """
        Creates a database instance.

        This method blocks until the db instance is active, or until
        :attr:`timeout_s` has elapsed.

        :param str instance_name:  A name to assign to the db instance.

        :param str instance_type:  The server instance type (e.g. ``medium``).

        :param str admin_username:  The admin username.

        :param str admin_password:  The admin password.

        :param security_groups:  A list of security groups in which to place
            the db instance.
        :type security_groups:  :class:`~collections.Iterable`

        :param str db_name:  The database name.  If this is not specified, the
            database will be named the same as the :attr:`instance_name`.

        :param int storage_size_gb:  The size of the storage volume in GB.

        :param float timeout_s:  The number of seconds to poll for an active
            database server before failing.

        :rtype:  :class:`dict`

        """
        # TODO: investigate what upstream RedDwarf does for admin users
        return db_to_dict(
                self._poll_instance_status(
                    self._create_db(instance_name, instance_type,
                        storage_size_gb),
                    timeout_s
                    )
                )