summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2022-06-02 20:39:56 +0000
committerGerrit Code Review <review@openstack.org>2022-06-02 20:39:56 +0000
commit8be05c83bcbf5d160bf955bf554d09b2ae4a7538 (patch)
tree0c97d51f6b9589188dee6f36d17c4fd3ef8aece0
parentd04a2e17dedb527188c5a8074376269d6dc66471 (diff)
parente6922d74f9fed36cda39ceb0633a65b106e98cc9 (diff)
downloaddesignate-8be05c83bcbf5d160bf955bf554d09b2ae4a7538.tar.gz
Merge "Simplify create zone import implementation" into stable/xena
-rw-r--r--designate/central/service.py106
1 files changed, 48 insertions, 58 deletions
diff --git a/designate/central/service.py b/designate/central/service.py
index cc1539fa..4e37f84b 100644
--- a/designate/central/service.py
+++ b/designate/central/service.py
@@ -26,9 +26,8 @@ import random
from random import SystemRandom
import time
-from eventlet import tpool
-from dns import zone as dnszone
from dns import exception as dnsexception
+from dns import zone as dnszone
from oslo_config import cfg
import oslo_messaging as messaging
from oslo_log import log as logging
@@ -2998,7 +2997,6 @@ class Service(service.RPCService):
@rpc.expected_exceptions()
@notification('dns.zone_import.create')
def create_zone_import(self, context, request_body):
-
if policy.enforce_new_defaults():
target = {constants.RBAC_PROJECT_ID: context.project_id}
else:
@@ -3018,59 +3016,49 @@ class Service(service.RPCService):
zone_import = objects.ZoneImport(**values)
created_zone_import = self.storage.create_zone_import(context,
- zone_import)
+ zone_import)
self.tg.add_thread(self._import_zone, context, created_zone_import,
- request_body)
+ request_body)
return created_zone_import
def _import_zone(self, context, zone_import, request_body):
-
- def _import(self, context, zone_import, request_body):
- # Dnspython needs a str instead of a unicode object
- zone = None
- try:
- dnspython_zone = dnszone.from_text(
- request_body,
- # Don't relativize, or we end up with '@' record names.
- relativize=False,
- # Don't check origin, we allow missing NS records
- # (missing SOA records are taken care of in _create_zone).
- check_origin=False)
- zone = dnsutils.from_dnspython_zone(dnspython_zone)
- zone.type = 'PRIMARY'
-
- for rrset in list(zone.recordsets):
- if rrset.type == 'SOA':
- zone.recordsets.remove(rrset)
- # subdomain NS records should be kept
- elif rrset.type == 'NS' and rrset.name == zone.name:
- zone.recordsets.remove(rrset)
-
- except dnszone.UnknownOrigin:
- zone_import.message = ('The $ORIGIN statement is required and'
- ' must be the first statement in the'
- ' zonefile.')
- zone_import.status = 'ERROR'
- except dnsexception.SyntaxError:
- zone_import.message = 'Malformed zonefile.'
- zone_import.status = 'ERROR'
- except exceptions.BadRequest:
- zone_import.message = 'An SOA record is required.'
- zone_import.status = 'ERROR'
- except Exception as e:
- LOG.exception('An undefined error occurred during zone import')
- msg = 'An undefined error occurred. %s'\
- % str(e)[:130]
- zone_import.message = msg
- zone_import.status = 'ERROR'
-
- return zone, zone_import
-
- # Execute the import in a real Python thread
- zone, zone_import = tpool.execute(_import, self, context,
- zone_import, request_body)
+ zone = None
+ try:
+ dnspython_zone = dnszone.from_text(
+ request_body,
+ # Don't relativize, or we end up with '@' record names.
+ relativize=False,
+ # Don't check origin, we allow missing NS records
+ # (missing SOA records are taken care of in _create_zone).
+ check_origin=False)
+ zone = dnsutils.from_dnspython_zone(dnspython_zone)
+ zone.type = 'PRIMARY'
+ for rrset in list(zone.recordsets):
+ if rrset.type == 'SOA':
+ zone.recordsets.remove(rrset)
+ # subdomain NS records should be kept
+ elif rrset.type == 'NS' and rrset.name == zone.name:
+ zone.recordsets.remove(rrset)
+ except dnszone.UnknownOrigin:
+ zone_import.message = (
+ 'The $ORIGIN statement is required and must be the first '
+ 'statement in the zonefile.'
+ )
+ zone_import.status = 'ERROR'
+ except dnsexception.SyntaxError:
+ zone_import.message = 'Malformed zonefile.'
+ zone_import.status = 'ERROR'
+ except exceptions.BadRequest:
+ zone_import.message = 'An SOA record is required.'
+ zone_import.status = 'ERROR'
+ except Exception as e:
+ LOG.exception('An undefined error occurred during zone import')
+ zone_import.message = (
+ 'An undefined error occurred. %s' % str(e)[:130]
+ )
+ zone_import.status = 'ERROR'
# If the zone import was valid, create the zone
if zone_import.status != 'ERROR':
@@ -3078,8 +3066,9 @@ class Service(service.RPCService):
zone = self.create_zone(context, zone)
zone_import.status = 'COMPLETE'
zone_import.zone_id = zone.id
- zone_import.message = '%(name)s imported' % {'name':
- zone.name}
+ zone_import.message = (
+ '%(name)s imported' % {'name': zone.name}
+ )
except exceptions.DuplicateZone:
zone_import.status = 'ERROR'
zone_import.message = 'Duplicate zone.'
@@ -3087,18 +3076,19 @@ class Service(service.RPCService):
zone_import.status = 'ERROR'
zone_import.message = str(e)
except Exception as e:
- LOG.exception('An undefined error occurred during zone '
- 'import creation')
- msg = 'An undefined error occurred. %s'\
- % str(e)[:130]
- zone_import.message = msg
+ LOG.exception(
+ 'An undefined error occurred during zone import creation'
+ )
+ zone_import.message = (
+ 'An undefined error occurred. %s' % str(e)[:130]
+ )
zone_import.status = 'ERROR'
self.update_zone_import(context, zone_import)
@rpc.expected_exceptions()
def find_zone_imports(self, context, criterion=None, marker=None,
- limit=None, sort_key=None, sort_dir=None):
+ limit=None, sort_key=None, sort_dir=None):
if policy.enforce_new_defaults():
target = {constants.RBAC_PROJECT_ID: context.project_id}