You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by to...@apache.org on 2015/12/06 07:32:40 UTC

[02/14] libcloud git commit: Implement create_record, delete_record in CloudFlare DNS driver.

Implement create_record, delete_record in CloudFlare DNS driver.


Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/91ada1ef
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/91ada1ef
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/91ada1ef

Branch: refs/heads/trunk
Commit: 91ada1ef3a97fd3d62b3fc7ff035a292a0c57fde
Parents: d3a3a4a
Author: Tomaz Muraus <to...@tomaz.me>
Authored: Sun Nov 22 16:26:27 2015 +0100
Committer: Tomaz Muraus <to...@tomaz.me>
Committed: Sun Dec 6 13:00:29 2015 +0800

----------------------------------------------------------------------
 libcloud/dns/drivers/cloudflare.py | 35 +++++++++++++++++++++++++++++++--
 1 file changed, 33 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/91ada1ef/libcloud/dns/drivers/cloudflare.py
----------------------------------------------------------------------
diff --git a/libcloud/dns/drivers/cloudflare.py b/libcloud/dns/drivers/cloudflare.py
index 4bf2f66..44ed160 100644
--- a/libcloud/dns/drivers/cloudflare.py
+++ b/libcloud/dns/drivers/cloudflare.py
@@ -23,7 +23,7 @@ from libcloud.common.base import JsonResponse, ConnectionUserAndKey
 from libcloud.common.types import InvalidCredsError, LibcloudError
 from libcloud.utils.py3 import httplib
 from libcloud.dns.base import DNSDriver, Zone, Record
-from libcloud.dns.types import Provider
+from libcloud.dns.types import Provider, RecordType
 from libcloud.dns.types import ZoneDoesNotExistError, RecordDoesNotExistError
 
 API_URL = 'https://www.cloudflare.com/api_json.html'
@@ -85,6 +85,18 @@ class CloudFlareDNSConnection(ConnectionUserAndKey):
     secure = True
     responseCls = CloudFlareDNSResponse
 
+    RECORD_TYPE_MAP = {
+        RecordType.A: 'A',
+        RecordType.AAAA: 'AAAA',
+        RecordType.CNAME: 'CNAME',
+        RecordType.MX: 'MX',
+        RecordType.TXT: 'TXT',
+        RecordType.SPF: 'SPF',
+        RecordType.NS: 'NS',
+        RecordType.SRV: 'SRV',
+        RecordType.URL: 'LOC'
+    }
+
     def request(self, action, params=None, data=None, headers=None,
                 method='GET'):
         params = params or {}
@@ -125,6 +137,26 @@ class CloudFlareDNSDriver(DNSDriver):
         records = self._to_records(zone=zone, data=result['response']['recs']['objs'])
         return records
 
+    def create_record(self, name, zone, type, data, extra=None):
+        extra = extra or {}
+        params = {'name': name, 'z': zone.domain, 'type': type,
+                  'content': data}
+
+        params['ttl'] = extra.get('ttl', 120)
+
+        if 'priority' in extra:
+            # For MX and SRV records
+            params['prio'] = extra['priority']
+
+        result = self.connection.request(action='rec_new', params=params).object
+        record = self._to_record(zone=zone, item=result['response']['rec']['obj'])
+        return record
+
+    def delete_record(self, record):
+        params = {'z': record.zone.domain, 'id': record.id}
+        result = self.connection.request(action='rec_delete', params=params).object
+        return result.get('result', None) == 'success'
+
     def ex_get_zone_stats(self, zone, interval=30):
         params = {'z': zone.domain, 'interval': interval}
         result = self.connection.request(action='stats', params=params).object
@@ -259,7 +291,6 @@ class CloudFlareDNSDriver(DNSDriver):
         result = self.connection.request(action='ipv46', params=params).object
         return result.get('result', None) == 'success'
 
-
     def _to_zones(self, data):
         zones = []