'Create a new record.
We can create 40 record per domain. If all slots are full, we can
replace one of them by choosing a specific entry in ``extra`` argument.
:param name: Record name without the domain name (e.g. www).
Note: If you want to create a record for a base domain
name, you should specify empty string (\'\') for this
argument.
:type  name: ``str``
:param zone: Zone where the requested record is created.
:type  zone: :class:`Zone`
:param type: DNS record type (MX, CNAME, A, NS, SRV, TXT).
:type  type: :class:`RecordType`
:param data: Data for the record (depends on the record type).
:type  data: ``str``
:param extra: Contains \'entry\' Entry position (1 thru 40)
:type extra: ``dict``
:rtype: :class:`Record`'

def create_record(self, name, zone, type, data, extra=None):

    if ((extra is None) or ('entry' not in extra)):
        record_id = self._get_available_record_entry(zone)
        if (not record_id):
            raise WorldWideDNSError(value='All    record    entries    are    full', driver=zone.driver)
    else:
        record_id = extra.get('entry')
    if (name == ''):
        name = '@'
    if (type not in self.RECORD_TYPE_MAP):
        raise RecordError(value='Record    type    is    not    allowed', driver=zone.driver, record_id=record_id)
    extra = {('S%s' % record_id): name, ('T%s' % record_id): type, ('D%s' % record_id): data}
    zone = self.update_zone(zone, zone.domain, extra=extra)
    record = self.get_record(zone.id, record_id)
    return record
