':param domain: Zone domain name (e.g. example.com)
:type domain: ``str``
:param type: Zone type (This is not really used. See API docs for extra
parameters)
:type type: ``str``
:param ttl: TTL for new records (This is used through the extra param)
:type ttl: ``int``
:param extra: Extra attributes that are specific to the driver
such as ttl.
:type extra: ``dict``
:rtype: :class:`Zone`'

def create_zone(self, domain, type='master', ttl=None, extra=None):

    action = ('/v1/zones/%s' % domain)
    raw_data = {'zone': domain}
    if (extra is not None):
        raw_data.update(extra)
    post_data = json.dumps(raw_data)
    try:
        response = self.connection.request(action=action, method='PUT', data=post_data)
    except NsOneException:
        e = sys.exc_info()[1]
        if (e.message == 'zone    already    exists'):
            raise ZoneAlreadyExistsError(value=e.message, driver=self, zone_id=domain)
        else:
            raise e
    zone = self._to_zone(response.objects[0])
    return zone
