|
|
|
@ -587,6 +587,27 @@ class Manager(object): |
|
|
|
|
|
|
|
return sources |
|
|
|
|
|
|
|
def _get_processors(self, decoded_zone_name, config): |
|
|
|
# Build list of processor names |
|
|
|
processors = ( |
|
|
|
self.global_processors |
|
|
|
+ (config.get('processors') or []) |
|
|
|
+ self.global_post_processors |
|
|
|
) |
|
|
|
|
|
|
|
# Translate processor names to processor objects |
|
|
|
try: |
|
|
|
collected = [] |
|
|
|
for processor in processors: |
|
|
|
collected.append(self.processors[processor]) |
|
|
|
processors = collected |
|
|
|
except KeyError: |
|
|
|
raise ManagerException( |
|
|
|
f'Zone {decoded_zone_name}, unknown processor: {processor}' |
|
|
|
) |
|
|
|
|
|
|
|
return processors |
|
|
|
|
|
|
|
def _preprocess_zones(self, zones, eligible_sources=None, sources=None): |
|
|
|
''' |
|
|
|
This may modify the passed in zone object, it should be ignored after |
|
|
|
@ -757,12 +778,8 @@ class Manager(object): |
|
|
|
f'Zone {decoded_zone_name} is missing targets' |
|
|
|
) |
|
|
|
|
|
|
|
processors = ( |
|
|
|
self.global_processors |
|
|
|
+ (config.get('processors') or []) |
|
|
|
+ self.global_post_processors |
|
|
|
) |
|
|
|
self.log.info('sync: processors=%s', processors) |
|
|
|
processors = self._get_processors(decoded_zone_name, config) |
|
|
|
self.log.info('sync: processors=%s', [p.id for p in processors]) |
|
|
|
|
|
|
|
if not sources: |
|
|
|
self.log.info('sync: no eligible sources, skipping') |
|
|
|
@ -780,17 +797,6 @@ class Manager(object): |
|
|
|
|
|
|
|
self.log.info('sync: targets=%s', targets) |
|
|
|
|
|
|
|
try: |
|
|
|
collected = [] |
|
|
|
for processor in processors: |
|
|
|
collected.append(self.processors[processor]) |
|
|
|
processors = collected |
|
|
|
except KeyError: |
|
|
|
raise ManagerException( |
|
|
|
f'Zone {decoded_zone_name}, unknown ' |
|
|
|
f'processor: {processor}' |
|
|
|
) |
|
|
|
|
|
|
|
try: |
|
|
|
trgs = [] |
|
|
|
for target in targets: |
|
|
|
@ -1017,17 +1023,32 @@ class Manager(object): |
|
|
|
zones = self._preprocess_zones(zones, sources=sources) |
|
|
|
|
|
|
|
if '*' in zone: |
|
|
|
# we want to do everything, just need the names though |
|
|
|
zones = zones.keys() |
|
|
|
# we want to do everything |
|
|
|
zones = zones.items() |
|
|
|
else: |
|
|
|
# we want to do a specific zone |
|
|
|
zones = [zone] |
|
|
|
try: |
|
|
|
zones = [(zone, zones[zone])] |
|
|
|
except KeyError: |
|
|
|
raise ManagerException( |
|
|
|
f'Requested zone "{zone}" not found in config' |
|
|
|
) |
|
|
|
|
|
|
|
for zone_name, config in zones: |
|
|
|
decoded_zone_name = idna_decode(zone_name) |
|
|
|
self.log.info('dump: zone=%s', decoded_zone_name) |
|
|
|
|
|
|
|
for zone in zones: |
|
|
|
zone = self.get_zone(zone) |
|
|
|
processors = self._get_processors(decoded_zone_name, config) |
|
|
|
self.log.info('dump: processors=%s', [p.id for p in processors]) |
|
|
|
|
|
|
|
zone = self.get_zone(zone_name) |
|
|
|
for source in sources: |
|
|
|
source.populate(zone, lenient=lenient) |
|
|
|
|
|
|
|
# Apply processors |
|
|
|
for processor in processors: |
|
|
|
zone = processor.process_source_zone(zone, sources=sources) |
|
|
|
|
|
|
|
plan = target.plan(zone) |
|
|
|
if plan is None: |
|
|
|
plan = Plan(zone, zone, [], False) |
|
|
|
|