Server IP : 85.214.239.14 / Your IP : 3.147.86.30 Web Server : Apache/2.4.62 (Debian) System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /proc/3/root/lib/python3/dist-packages/libcloud/dns/drivers/ |
Upload File : |
# Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License.You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # pylint: disable=unexpected-keyword-arg __all__ = [ 'SoftLayerDNSDriver' ] from libcloud.common.softlayer import SoftLayerConnection from libcloud.common.softlayer import SoftLayerObjectDoesntExist from libcloud.dns.types import Provider, RecordType from libcloud.dns.types import ZoneDoesNotExistError, RecordDoesNotExistError from libcloud.dns.base import DNSDriver, Zone, Record VALID_RECORD_EXTRA_PARAMS = ['priority', 'ttl'] class SoftLayerDNSDriver(DNSDriver): type = Provider.SOFTLAYER name = 'Softlayer DNS' website = 'https://www.softlayer.com' connectionCls = SoftLayerConnection RECORD_TYPE_MAP = { RecordType.A: 'a', RecordType.AAAA: 'aaaa', RecordType.CNAME: 'cname', RecordType.MX: 'mx', RecordType.NS: 'ns', RecordType.PTR: 'ptr', RecordType.SOA: 'soa', RecordType.SPF: 'spf', RecordType.SRV: 'srv', RecordType.TXT: 'txt', } def create_zone(self, domain, ttl=None, extra=None): self.connection.set_context({'resource': 'zone', 'id': domain}) data = { 'name': domain, 'resourceRecords': [] } response = self.connection.request( 'SoftLayer_Dns_Domain', 'createObject', data ).object zone = Zone(id=response['id'], domain=domain, type='master', ttl=3600, driver=self) return zone def get_zone(self, zone_id): self.connection.set_context({'resource': 'zone', 'id': zone_id}) try: response = self.connection.request( 'SoftLayer_Dns_Domain', 'getObject', id=zone_id ).object except SoftLayerObjectDoesntExist: raise ZoneDoesNotExistError(value='', driver=self, zone_id=zone_id) return self._to_zone(response) def delete_zone(self, zone): self.connection.set_context({'resource': 'zone', 'id': zone.id}) try: self.connection.request( 'SoftLayer_Dns_Domain', 'deleteObject', id=zone.id ).object except SoftLayerObjectDoesntExist: raise ZoneDoesNotExistError(value='', driver=self, zone_id=zone.id) else: return True def iterate_zones(self): zones_list = self.connection.request( 'SoftLayer_Dns_Domain', 'getByDomainName', '.' ).object for item in zones_list: yield self._to_zone(item) def iterate_records(self, zone): self.connection.set_context({'resource': 'zone', 'id': zone.id}) records_list = self.connection.request( 'SoftLayer_Dns_Domain', 'getResourceRecords', id=zone.id ).object for item in records_list: yield self._to_record(item, zone=zone) def get_record(self, zone_id, record_id): try: record = self.connection.request( 'SoftLayer_Dns_Domain_ResourceRecord', 'getObject', id=record_id ).object return self._to_record(record, zone=self.get_zone(zone_id)) except SoftLayerObjectDoesntExist: raise RecordDoesNotExistError(value='', driver=self, record_id=record_id) def delete_record(self, record): try: self.connection.request( 'SoftLayer_Dns_Domain_ResourceRecord', 'deleteObject', id=record.id ).object except SoftLayerObjectDoesntExist: raise RecordDoesNotExistError(value='', driver=self, record_id=record.id) else: return True def create_record(self, name, zone, type, data, extra=None): params = { 'domainId': zone.id, 'type': self.RECORD_TYPE_MAP[type], 'host': name, 'data': data } if extra: if extra.get('ttl'): params['ttl'] = extra['ttl'] if extra.get('refresh'): params['refresh'] = extra['refresh'] if extra.get('retry'): params['retry'] = extra['retry'] if extra.get('expire'): params['expire'] = extra['expire'] if extra.get('priority'): params['mxPriority'] = extra['priority'] response = self.connection.request( 'SoftLayer_Dns_Domain_ResourceRecord', 'createObject', params ).object return self._to_record(response, zone=zone) def update_record( self, record, name=None, type=None, data=None, extra=None): params = {} if type: params['type'] = self.RECORD_TYPE_MAP[type] if name: params['host'] = name if data: params['data'] = data if extra: if extra.get('ttl'): params['ttl'] = extra['ttl'] if extra.get('refresh'): params['refresh'] = extra['refresh'] if extra.get('retry'): params['retry'] = extra['retry'] if extra.get('expire'): params['expire'] = extra['expire'] if extra.get('priority'): params['mxPriority'] = extra['priority'] response = self.connection.request( 'SoftLayer_Dns_Domain_ResourceRecord', 'editObject', params, id=record.id, ).object if response: changed_record = self.connection.request( 'SoftLayer_Dns_Domain_ResourceRecord', 'getObject', id=record.id, ).object return self._to_record(changed_record, zone=record.zone) else: return False def _to_zone(self, item): ttl = item.get('ttl', 3600) zone = Zone(id=item['id'], domain=item['name'], type='master', ttl=ttl, driver=self) return zone def _to_record(self, item, zone=None): extra = { 'ttl': item['ttl'], 'expire': item['expire'], 'mxPriority': item['mxPriority'], 'refresh': item['refresh'], 'retry': item['retry'], } record = Record( id=item['id'], name=item['host'], type=self._string_to_record_type(item['type']), data=item['data'], zone=zone, driver=self, ttl=item['ttl'], extra=extra ) return record