def create_record()

in libcloud/dns/drivers/vultr.py [0:0]


    def create_record(self, name, zone, type, data, extra=None):
        """
        Create a new record.

        :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 (A, AAAA, ...).
        :type  type: :class:`RecordType`

        :param data: Data for the record (depends on the record type).
        :type  data: ``str``

        :param extra: Extra attributes (driver specific). (optional)
        :type extra: ``dict``

        :rtype: :class:`Record`
        """
        extra = extra or {}

        ret_record = None
        old_records_list = self.list_records(zone=zone)
        # check if record already exists
        # if exists raise RecordAlreadyExistsError

        for record in old_records_list:
            if record.name == name and record.data == data:
                raise RecordAlreadyExistsError(value="", driver=self, record_id=record.id)

        MX = self.RECORD_TYPE_MAP.get("MX")
        SRV = self.RECORD_TYPE_MAP.get("SRV")

        if extra and extra.get("priority"):
            priority = int(extra["priority"])
        else:
            priority = None

        post_data = {
            "domain": zone.domain,
            "name": name,
            "type": self.RECORD_TYPE_MAP.get(type),
            "data": data,
        }

        if type == MX or type == SRV:
            if priority is None:
                raise ValueError("Missing priority argument for MX record type")
            post_data["priority"] = priority

        encoded_data = urlencode(post_data)
        params = {"api_key": self.key}
        action = "/v1/dns/create_record"

        self.connection.request(action=action, params=params, data=encoded_data, method="POST")
        updated_zone_records = zone.list_records()

        for record in updated_zone_records:
            if record.name == name and record.data == data:
                ret_record = record

        return ret_record