Skip to content

Commit cbd8d98

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 08d8866 commit cbd8d98

File tree

2 files changed

+18
-44
lines changed

2 files changed

+18
-44
lines changed

libcloud/dns/drivers/route53.py

Lines changed: 12 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -129,14 +129,9 @@ 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({"name": zone.hostname(rparts.name), "type": rparts.type, "maxitems": "1"})
140135
uri = API_ROOT + "hostedzone/" + zone_id + "/rrset?" + params
141136
data = self.connection.request(uri).object
142137

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

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

153148
return record
@@ -186,10 +181,9 @@ def create_record(self, name, zone, type, data, extra=None):
186181
extra = extra or {}
187182
batch = [("CREATE", name, type, data, extra)]
188183
self._post_changeset(zone, batch)
189-
id = ":".join((self.RECORD_TYPE_MAP[type], name))
190184

191185
return Record(
192-
id=id,
186+
id=self.to_default_id(zone, name, type),
193187
name=name,
194188
type=type,
195189
data=data,
@@ -221,10 +215,8 @@ def update_record(self, record, name=None, type=None, data=None, extra=None):
221215
record=record, name=name, type=type, data=data, extra=extra
222216
)
223217

224-
id = ":".join((self.RECORD_TYPE_MAP[type], name))
225-
226218
return Record(
227-
id=id,
219+
id=self.to_default_id(record.zone, name, type),
228220
name=name,
229221
type=type,
230222
data=data,
@@ -262,7 +254,7 @@ def ex_create_multi_value_record(self, name, zone, type, data, extra=None):
262254
ET.SubElement(change, "Action").text = "CREATE"
263255

264256
rrs = ET.SubElement(change, "ResourceRecordSet")
265-
ET.SubElement(rrs, "Name").text = name + "." + zone.domain
257+
ET.SubElement(rrs, "Name").text = zone.hostname(name)
266258
ET.SubElement(rrs, "Type").text = self.RECORD_TYPE_MAP[type]
267259
ET.SubElement(rrs, "TTL").text = str(extra.get("ttl", "0"))
268260

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

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

287277
for value in values:
288278
record = Record(
289-
id=id,
279+
id=self.to_default_id(zone, name, type),
290280
name=name,
291281
type=type,
292282
data=value,
@@ -338,12 +328,7 @@ def _update_multi_value_record(self, record, name=None, type=None, data=None, ex
338328

339329
rrs = ET.SubElement(change, "ResourceRecordSet")
340330

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
331+
ET.SubElement(rrs, "Name").text = record.hostname
347332
ET.SubElement(rrs, "Type").text = self.RECORD_TYPE_MAP[record.type]
348333
ET.SubElement(rrs, "TTL").text = str(record.extra.get("ttl", "0"))
349334

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

364349
rrs = ET.SubElement(change, "ResourceRecordSet")
365350

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
351+
ET.SubElement(rrs, "Name").text = record.zone.hostname(name)
372352
ET.SubElement(rrs, "Type").text = self.RECORD_TYPE_MAP[type]
373353
ET.SubElement(rrs, "TTL").text = str(extra.get("ttl", "0"))
374354

@@ -399,12 +379,7 @@ def _post_changeset(self, zone, changes_list):
399379

400380
rrs = ET.SubElement(change, "ResourceRecordSet")
401381

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
382+
ET.SubElement(rrs, "Name").text = zone.hostname(name)
408383
ET.SubElement(rrs, "Type").text = self.RECORD_TYPE_MAP[type_]
409384
ET.SubElement(rrs, "TTL").text = str(extra.get("ttl", "0"))
410385

@@ -528,9 +503,8 @@ def _to_record(self, elem, zone, index=0):
528503
extra["weight"] = int(weight)
529504
extra["port"] = int(port)
530505

531-
id = ":".join((self.RECORD_TYPE_MAP[type], name))
532506
record = Record(
533-
id=id,
507+
id=self.to_default_id(zone, name, type),
534508
name=name,
535509
type=type,
536510
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)