mirror of
https://github.com/github/octodns.git
synced 2024-05-11 05:55:00 +00:00
Implement configuration validation for alias zones
This commit is contained in:
@@ -460,28 +460,36 @@ class Manager(object):
|
|||||||
for zone_name, config in self.config['zones'].items():
|
for zone_name, config in self.config['zones'].items():
|
||||||
zone = Zone(zone_name, self.configured_sub_zones(zone_name))
|
zone = Zone(zone_name, self.configured_sub_zones(zone_name))
|
||||||
|
|
||||||
if not config.get('alias'):
|
source_zone = config.get('alias')
|
||||||
try:
|
if source_zone:
|
||||||
sources = config['sources']
|
if source_zone not in self.config['zones']:
|
||||||
except KeyError:
|
self.log.exception('Invalid alias zone')
|
||||||
raise ManagerException('Zone {} is missing sources'
|
raise ManagerException('Invalid alias zone {}: '
|
||||||
.format(zone_name))
|
'source zone {} does not exist'
|
||||||
|
.format(zone_name, source_zone))
|
||||||
|
continue
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# rather than using a list comprehension, we break this
|
sources = config['sources']
|
||||||
# loop out so that the `except` block below can reference
|
except KeyError:
|
||||||
# the `source`
|
raise ManagerException('Zone {} is missing sources'
|
||||||
collected = []
|
.format(zone_name))
|
||||||
for source in sources:
|
|
||||||
collected.append(self.providers[source])
|
|
||||||
sources = collected
|
|
||||||
except KeyError:
|
|
||||||
raise ManagerException('Zone {}, unknown source: {}'
|
|
||||||
.format(zone_name, source))
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
# rather than using a list comprehension, we break this
|
||||||
|
# loop out so that the `except` block below can reference
|
||||||
|
# the `source`
|
||||||
|
collected = []
|
||||||
for source in sources:
|
for source in sources:
|
||||||
if isinstance(source, YamlProvider):
|
collected.append(self.providers[source])
|
||||||
source.populate(zone)
|
sources = collected
|
||||||
|
except KeyError:
|
||||||
|
raise ManagerException('Zone {}, unknown source: {}'
|
||||||
|
.format(zone_name, source))
|
||||||
|
|
||||||
|
for source in sources:
|
||||||
|
if isinstance(source, YamlProvider):
|
||||||
|
source.populate(zone)
|
||||||
|
|
||||||
def get_zone(self, zone_name):
|
def get_zone(self, zone_name):
|
||||||
if not zone_name[-1] == '.':
|
if not zone_name[-1] == '.':
|
||||||
|
Reference in New Issue
Block a user