Skip to content

Commit 5004b4d

Browse files
author
Aaron Sierra
committed
dns: route53: Leverage common code
Leverage common code from DNSDriver, Record, and Zone classes for host name and record ID handling.
1 parent e64654d commit 5004b4d

File tree

2 files changed

+20
-44
lines changed

2 files changed

+20
-44
lines changed

libcloud/dns/drivers/route53.py

Lines changed: 14 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -129,14 +129,11 @@ def get_zone(self, zone_id):
129129

130130
def get_record(self, zone_id, record_id):
131131
zone = self.get_zone(zone_id=zone_id)
132-
record_type, name = record_id.split(":", 1)
133-
134-
if name:
135-
full_name = ".".join((name, zone.domain))
136-
else:
137-
full_name = zone.domain
132+
rparts = self.from_default_id(zone, record_id)
138133
self.connection.set_context({"zone_id": zone_id})
139-
params = urlencode({"name": full_name, "type": record_type, "maxitems": "1"})
134+
params = urlencode(
135+
{"name": zone.hostname(rparts.name), "type": rparts.type, "maxitems": "1"}
136+
)
140137
uri = API_ROOT + "hostedzone/" + zone_id + "/rrset?" + params
141138
data = self.connection.request(uri).object
142139

@@ -145,9 +142,9 @@ def get_record(self, zone_id, record_id):
145142
# A cute aspect of the /rrset filters is that they are more pagination
146143
# hints than filters!!
147144
# So will return a result even if its not what you asked for.
148-
record_type_num = self._string_to_record_type(record_type)
145+
record_type_num = self._string_to_record_type(rparts.type)
149146

150-
if record.name != name or record.type != record_type_num:
147+
if record.name != rparts.name or record.type != record_type_num:
151148
raise RecordDoesNotExistError(value="", driver=self, record_id=record_id)
152149

153150
return record
@@ -186,10 +183,9 @@ def create_record(self, name, zone, type, data, extra=None):
186183
extra = extra or {}
187184
batch = [("CREATE", name, type, data, extra)]
188185
self._post_changeset(zone, batch)
189-
id = ":".join((self.RECORD_TYPE_MAP[type], name))
190186

191187
return Record(
192-
id=id,
188+
id=self.to_default_id(zone, name, type),
193189
name=name,
194190
type=type,
195191
data=data,
@@ -221,10 +217,8 @@ def update_record(self, record, name=None, type=None, data=None, extra=None):
221217
record=record, name=name, type=type, data=data, extra=extra
222218
)
223219

224-
id = ":".join((self.RECORD_TYPE_MAP[type], name))
225-
226220
return Record(
227-
id=id,
221+
id=self.to_default_id(record.zone, name, type),
228222
name=name,
229223
type=type,
230224
data=data,
@@ -262,7 +256,7 @@ def ex_create_multi_value_record(self, name, zone, type, data, extra=None):
262256
ET.SubElement(change, "Action").text = "CREATE"
263257

264258
rrs = ET.SubElement(change, "ResourceRecordSet")
265-
ET.SubElement(rrs, "Name").text = name + "." + zone.domain
259+
ET.SubElement(rrs, "Name").text = zone.hostname(name)
266260
ET.SubElement(rrs, "Type").text = self.RECORD_TYPE_MAP[type]
267261
ET.SubElement(rrs, "TTL").text = str(extra.get("ttl", "0"))
268262

@@ -280,13 +274,11 @@ def ex_create_multi_value_record(self, name, zone, type, data, extra=None):
280274
self.connection.set_context({"zone_id": zone.id})
281275
self.connection.request(uri, method="POST", data=data)
282276

283-
id = ":".join((self.RECORD_TYPE_MAP[type], name))
284-
285277
records = []
286278

287279
for value in values:
288280
record = Record(
289-
id=id,
281+
id=self.to_default_id(zone, name, type),
290282
name=name,
291283
type=type,
292284
data=value,
@@ -338,12 +330,7 @@ def _update_multi_value_record(self, record, name=None, type=None, data=None, ex
338330

339331
rrs = ET.SubElement(change, "ResourceRecordSet")
340332

341-
if record.name:
342-
record_name = record.name + "." + record.zone.domain
343-
else:
344-
record_name = record.zone.domain
345-
346-
ET.SubElement(rrs, "Name").text = record_name
333+
ET.SubElement(rrs, "Name").text = record.hostname
347334
ET.SubElement(rrs, "Type").text = self.RECORD_TYPE_MAP[record.type]
348335
ET.SubElement(rrs, "TTL").text = str(record.extra.get("ttl", "0"))
349336

@@ -363,12 +350,7 @@ def _update_multi_value_record(self, record, name=None, type=None, data=None, ex
363350

364351
rrs = ET.SubElement(change, "ResourceRecordSet")
365352

366-
if name:
367-
record_name = name + "." + record.zone.domain
368-
else:
369-
record_name = record.zone.domain
370-
371-
ET.SubElement(rrs, "Name").text = record_name
353+
ET.SubElement(rrs, "Name").text = record.zone.hostname(name)
372354
ET.SubElement(rrs, "Type").text = self.RECORD_TYPE_MAP[type]
373355
ET.SubElement(rrs, "TTL").text = str(extra.get("ttl", "0"))
374356

@@ -399,12 +381,7 @@ def _post_changeset(self, zone, changes_list):
399381

400382
rrs = ET.SubElement(change, "ResourceRecordSet")
401383

402-
if name:
403-
record_name = name + "." + zone.domain
404-
else:
405-
record_name = zone.domain
406-
407-
ET.SubElement(rrs, "Name").text = record_name
384+
ET.SubElement(rrs, "Name").text = zone.hostname(name)
408385
ET.SubElement(rrs, "Type").text = self.RECORD_TYPE_MAP[type_]
409386
ET.SubElement(rrs, "TTL").text = str(extra.get("ttl", "0"))
410387

@@ -528,9 +505,8 @@ def _to_record(self, elem, zone, index=0):
528505
extra["weight"] = int(weight)
529506
extra["port"] = int(port)
530507

531-
id = ":".join((self.RECORD_TYPE_MAP[type], name))
532508
record = Record(
533-
id=id,
509+
id=self.to_default_id(zone, name, type),
534510
name=name,
535511
type=type,
536512
data=data,

libcloud/test/dns/test_route53.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ def test_create_record_zone_name(self):
196196
self.assertIn("<Value>127.0.0.1</Value>", xml)
197197
self.assertIn("<TTL>0</TTL>", xml)
198198

199-
self.assertEqual(record.id, "A:")
199+
self.assertEqual(record.id, "A")
200200
self.assertEqual(record.name, "")
201201
self.assertEqual(record.zone, zone)
202202
self.assertEqual(record.type, RecordType.A)
@@ -208,7 +208,7 @@ def test_create_TXT_record(self):
208208
"""
209209
zone = self.driver.list_zones()[0]
210210
record = self.driver.create_record(name="", zone=zone, type=RecordType.TXT, data="test")
211-
self.assertEqual(record.id, "TXT:")
211+
self.assertEqual(record.id, "TXT")
212212
self.assertEqual(record.name, "")
213213
self.assertEqual(record.zone, zone)
214214
self.assertEqual(record.type, RecordType.TXT)
@@ -220,7 +220,7 @@ def test_create_TXT_record_quoted(self):
220220
"""
221221
zone = self.driver.list_zones()[0]
222222
record = self.driver.create_record(name="", zone=zone, type=RecordType.TXT, data='"test"')
223-
self.assertEqual(record.id, "TXT:")
223+
self.assertEqual(record.id, "TXT")
224224
self.assertEqual(record.name, "")
225225
self.assertEqual(record.zone, zone)
226226
self.assertEqual(record.type, RecordType.TXT)
@@ -232,7 +232,7 @@ def test_create_SPF_record(self):
232232
"""
233233
zone = self.driver.list_zones()[0]
234234
record = self.driver.create_record(name="", zone=zone, type=RecordType.SPF, data="test")
235-
self.assertEqual(record.id, "SPF:")
235+
self.assertEqual(record.id, "SPF")
236236
self.assertEqual(record.name, "")
237237
self.assertEqual(record.zone, zone)
238238
self.assertEqual(record.type, RecordType.SPF)
@@ -244,7 +244,7 @@ def test_create_SPF_record_quoted(self):
244244
"""
245245
zone = self.driver.list_zones()[0]
246246
record = self.driver.create_record(name="", zone=zone, type=RecordType.SPF, data='"test"')
247-
self.assertEqual(record.id, "SPF:")
247+
self.assertEqual(record.id, "SPF")
248248
self.assertEqual(record.name, "")
249249
self.assertEqual(record.zone, zone)
250250
self.assertEqual(record.type, RecordType.SPF)
@@ -258,7 +258,7 @@ def test_create_TXT_record_escaped(self):
258258
record = self.driver.create_record(
259259
name="", zone=zone, type=RecordType.TXT, data='test "with"'
260260
)
261-
self.assertEqual(record.id, "TXT:")
261+
self.assertEqual(record.id, "TXT")
262262
self.assertEqual(record.name, "")
263263
self.assertEqual(record.zone, zone)
264264
self.assertEqual(record.type, RecordType.TXT)

0 commit comments

Comments
 (0)