@@ -88,9 +88,7 @@ def __new__(
8888 ** kwargs ,
8989 ):
9090 if cls is LinodeDNSDriver :
91- if api_version == "3.0" :
92- cls = LinodeDNSDriverV3
93- elif api_version == "4.0" :
91+ if api_version == "4.0" :
9492 cls = LinodeDNSDriverV4
9593 else :
9694 raise NotImplementedError (
@@ -117,258 +115,6 @@ def _make_excp(self, error):
117115 return result
118116
119117
120- class LinodeDNSConnection (LinodeConnection ):
121- responseCls = LinodeDNSResponse
122-
123-
124- class LinodeDNSDriverV3 (LinodeDNSDriver ):
125- connectionCls = LinodeDNSConnection
126-
127- RECORD_TYPE_MAP = {
128- RecordType .NS : "NS" ,
129- RecordType .MX : "MX" ,
130- RecordType .A : "A" ,
131- RecordType .AAAA : "AAAA" ,
132- RecordType .CNAME : "CNAME" ,
133- RecordType .TXT : "TXT" ,
134- RecordType .SRV : "SRV" ,
135- }
136-
137- def list_zones (self ):
138- params = {"api_action" : "domain.list" }
139- data = self .connection .request (API_ROOT , params = params ).objects [0 ]
140- zones = self ._to_zones (data )
141- return zones
142-
143- def list_records (self , zone ):
144- params = {"api_action" : "domain.resource.list" , "DOMAINID" : zone .id }
145-
146- self .connection .set_context (context = {"resource" : "zone" , "id" : zone .id })
147- data = self .connection .request (API_ROOT , params = params ).objects [0 ]
148- records = self ._to_records (items = data , zone = zone )
149- return records
150-
151- def get_zone (self , zone_id ):
152- params = {"api_action" : "domain.list" , "DomainID" : zone_id }
153- self .connection .set_context (context = {"resource" : "zone" , "id" : zone_id })
154- data = self .connection .request (API_ROOT , params = params ).objects [0 ]
155- zones = self ._to_zones (data )
156-
157- if len (zones ) != 1 :
158- raise ZoneDoesNotExistError (value = "" , driver = self , zone_id = zone_id )
159-
160- return zones [0 ]
161-
162- def get_record (self , zone_id , record_id ):
163- zone = self .get_zone (zone_id = zone_id )
164- params = {
165- "api_action" : "domain.resource.list" ,
166- "DomainID" : zone_id ,
167- "ResourceID" : record_id ,
168- }
169- self .connection .set_context (context = {"resource" : "record" , "id" : record_id })
170- data = self .connection .request (API_ROOT , params = params ).objects [0 ]
171- records = self ._to_records (items = data , zone = zone )
172-
173- if len (records ) != 1 :
174- raise RecordDoesNotExistError (value = "" , driver = self , record_id = record_id )
175-
176- return records [0 ]
177-
178- def create_zone (self , domain , type = "master" , ttl = None , extra = None ):
179- """
180- Create a new zone.
181-
182- API docs: http://www.linode.com/api/dns/domain.create
183- """
184- params = {"api_action" : "domain.create" , "Type" : type , "Domain" : domain }
185-
186- if ttl :
187- params ["TTL_sec" ] = ttl
188-
189- merged = merge_valid_keys (params = params , valid_keys = VALID_ZONE_EXTRA_PARAMS , extra = extra )
190- data = self .connection .request (API_ROOT , params = params ).objects [0 ]
191- zone = Zone (
192- id = data ["DomainID" ],
193- domain = domain ,
194- type = type ,
195- ttl = ttl ,
196- extra = merged ,
197- driver = self ,
198- )
199- return zone
200-
201- def update_zone (self , zone , domain = None , type = None , ttl = None , extra = None ):
202- """
203- Update an existing zone.
204-
205- API docs: http://www.linode.com/api/dns/domain.update
206- """
207- params = {"api_action" : "domain.update" , "DomainID" : zone .id }
208-
209- if type :
210- params ["Type" ] = type
211-
212- if domain :
213- params ["Domain" ] = domain
214-
215- if ttl :
216- params ["TTL_sec" ] = ttl
217-
218- merged = merge_valid_keys (params = params , valid_keys = VALID_ZONE_EXTRA_PARAMS , extra = extra )
219- self .connection .request (API_ROOT , params = params ).objects [0 ]
220- updated_zone = get_new_obj (
221- obj = zone ,
222- klass = Zone ,
223- attributes = {"domain" : domain , "type" : type , "ttl" : ttl , "extra" : merged },
224- )
225- return updated_zone
226-
227- def create_record (self , name , zone , type , data , extra = None ):
228- """
229- Create a new record.
230-
231- API docs: http://www.linode.com/api/dns/domain.resource.create
232- """
233- params = {
234- "api_action" : "domain.resource.create" ,
235- "DomainID" : zone .id ,
236- "Name" : name ,
237- "Target" : data ,
238- "Type" : self .RECORD_TYPE_MAP [type ],
239- }
240- merged = merge_valid_keys (params = params , valid_keys = VALID_RECORD_EXTRA_PARAMS , extra = extra )
241-
242- result = self .connection .request (API_ROOT , params = params ).objects [0 ]
243- record = Record (
244- id = result ["ResourceID" ],
245- name = name ,
246- type = type ,
247- data = data ,
248- extra = merged ,
249- zone = zone ,
250- driver = self ,
251- ttl = merged .get ("TTL_sec" , None ),
252- )
253- return record
254-
255- def update_record (self , record , name = None , type = None , data = None , extra = None ):
256- """
257- Update an existing record.
258-
259- API docs: http://www.linode.com/api/dns/domain.resource.update
260- """
261- params = {
262- "api_action" : "domain.resource.update" ,
263- "ResourceID" : record .id ,
264- "DomainID" : record .zone .id ,
265- }
266-
267- if name :
268- params ["Name" ] = name
269-
270- if data :
271- params ["Target" ] = data
272-
273- if type is not None :
274- params ["Type" ] = self .RECORD_TYPE_MAP [type ]
275-
276- merged = merge_valid_keys (params = params , valid_keys = VALID_RECORD_EXTRA_PARAMS , extra = extra )
277-
278- self .connection .request (API_ROOT , params = params ).objects [0 ]
279- updated_record = get_new_obj (
280- obj = record ,
281- klass = Record ,
282- attributes = {"name" : name , "data" : data , "type" : type , "extra" : merged },
283- )
284- return updated_record
285-
286- def delete_zone (self , zone ):
287- params = {"api_action" : "domain.delete" , "DomainID" : zone .id }
288-
289- self .connection .set_context (context = {"resource" : "zone" , "id" : zone .id })
290- data = self .connection .request (API_ROOT , params = params ).objects [0 ]
291-
292- return "DomainID" in data
293-
294- def delete_record (self , record ):
295- params = {
296- "api_action" : "domain.resource.delete" ,
297- "DomainID" : record .zone .id ,
298- "ResourceID" : record .id ,
299- }
300-
301- self .connection .set_context (context = {"resource" : "record" , "id" : record .id })
302- data = self .connection .request (API_ROOT , params = params ).objects [0 ]
303-
304- return "ResourceID" in data
305-
306- def _to_zones (self , items ):
307- """
308- Convert a list of items to the Zone objects.
309- """
310- zones = []
311-
312- for item in items :
313- zones .append (self ._to_zone (item ))
314-
315- return zones
316-
317- def _to_zone (self , item ):
318- """
319- Build an Zone object from the item dictionary.
320- """
321- extra = {
322- "SOA_Email" : item ["SOA_EMAIL" ],
323- "status" : item ["STATUS" ],
324- "description" : item ["DESCRIPTION" ],
325- }
326- zone = Zone (
327- id = item ["DOMAINID" ],
328- domain = item ["DOMAIN" ],
329- type = item ["TYPE" ],
330- ttl = item ["TTL_SEC" ],
331- driver = self ,
332- extra = extra ,
333- )
334- return zone
335-
336- def _to_records (self , items , zone = None ):
337- """
338- Convert a list of items to the Record objects.
339- """
340- records = []
341-
342- for item in items :
343- records .append (self ._to_record (item = item , zone = zone ))
344-
345- return records
346-
347- def _to_record (self , item , zone = None ):
348- """
349- Build a Record object from the item dictionary.
350- """
351- extra = {
352- "protocol" : item ["PROTOCOL" ],
353- "ttl_sec" : item ["TTL_SEC" ],
354- "port" : item ["PORT" ],
355- "weight" : item ["WEIGHT" ],
356- "priority" : item ["PRIORITY" ],
357- }
358- type = self ._string_to_record_type (item ["TYPE" ])
359- record = Record (
360- id = item ["RESOURCEID" ],
361- name = item ["NAME" ],
362- type = type ,
363- data = item ["TARGET" ],
364- zone = zone ,
365- driver = self ,
366- ttl = item ["TTL_SEC" ],
367- extra = extra ,
368- )
369- return record
370-
371-
372118class LinodeDNSResponseV4 (LinodeResponseV4 ):
373119 pass
374120
0 commit comments