4.2 KiB
This work is licensed under a Creative Commons Attribution 3.0 Unported License. http://creativecommons.org/licenses/by/3.0/legalcode
Zone Import Refactor
Migrate Zone import code from designate.api.v2.controllers.zones into a new designate.dnsutils module and move functionality into Central.
Terminology
Term | Meaning |
---|---|
zone | DNS Zone (also refered to as a DNS domain) |
Problem description
Currently the Import functionality parses the Zone that is POST'ed in the API and runs the creation of the Zone with its Records from the API side. There is no transactional guarantee of a cleanup if the creation of anything fails.
Also there's a given value of having these methods outside of the API, it can be used in any component outside of the API (for example AXFR support).
Proposed change
We introduce a new module called designate.dnsutils that contains functions for parsing Zones / Records into dnspython object and dnspython objects to DesignateObjects.
Code for parsing a Zone file is already present in the designate.api.v2.controller.ZoneController and can be easily extracted.
Central Changes
We need a new method that takes a Domain and a RecordSetList object, then puts this into Designate accordingly.
It should have the ability to either synchronize a existing zone or at a later point in time a new zone with it's records.
New module dnsutils
dnsutils.from_dnspython_zone(dnspython_zone)
Takes a dnspython_zone and creates a Domain object also runs records_to_recordset_list() on each record in the zone.
Parameter | Description | Required |
---|---|---|
dnspython_zone | DNS Python zone | Yes |
Return value
Domain with a recordset relation attribute
dnsutils.dnspyrecords_to_recordsetlist(dnspython_records)
Convert a dnspython_zone.nodes structure to a RecordSetList, Recordsets, RecordList and Records.
Parameter | Description | Required |
---|---|---|
dnspython_records | DNS Python Record | Yes |
Return value
designate.objects.recordset.RecordSet with a record attribute of designate.objects.record.RecordList from the given dnspython node / record.
dnsutils.dnspythonrecord_to_recordset(rname, rdataset)
Parameter | Description | Required |
---|---|---|
rname | dnspy node name / key | Yes |
rdataset | dnspy rr dataset | Yes |
Return value
designate.objects.recordset.RecordSet with a record attribute of designate.objects.record.RecordList from the given dnspython node / record.
Implementation
Assignee(s)
- Primary assignee:
Milestones
- Target Milestone for completion:
-
Kilo-1
Work Items
- Extract code from Zones controller into new module "dnsutils" / new central method.
- Change parse_zonefile to call dnsutils.parse_zonefile() and call Central's new method with the results of this.