Browse Source

move Manager.dump's sources and Manager.sync's eligible_sources to Manager(active_sources)

zone-config-cleanup
Ross McFarland 2 months ago
parent
commit
81563a2ae5
No known key found for this signature in database GPG Key ID: 943B179E15D3B22A
4 changed files with 49 additions and 70 deletions
  1. +1
    -2
      octodns/cmds/dump.py
  2. +1
    -2
      octodns/cmds/sync.py
  3. +14
    -16
      octodns/manager.py
  4. +33
    -50
      tests/test_octodns_manager.py

+ 1
- 2
octodns/cmds/dump.py View File

@ -47,14 +47,13 @@ def main():
args = parser.parse_args()
manager = Manager(args.config_file)
manager = Manager(args.config_file, active_sources=args.source)
manager.dump(
zone=args.zone,
output_dir=args.output_dir,
output_provider=args.output_provider,
lenient=args.lenient,
split=args.split,
sources=args.source,
)


+ 1
- 2
octodns/cmds/sync.py View File

@ -58,10 +58,9 @@ def main():
args = parser.parse_args()
manager = Manager(args.config_file)
manager = Manager(args.config_file, active_sources=args.source)
manager.sync(
eligible_zones=args.zone,
eligible_sources=args.source,
eligible_targets=args.target,
dry_run=not args.doit,
force=args.force,


+ 14
- 16
octodns/manager.py View File

@ -98,12 +98,18 @@ class Manager(object):
include_meta=False,
auto_arpa=False,
enable_checksum=False,
active_sources=None,
):
version = self._try_version('octodns', version=__version__)
self.log.info(
'__init__: config_file=%s, (octoDNS %s)', config_file, version
'__init__: config_file=%s, active_sources=%s (octoDNS %s)',
config_file,
active_sources,
version,
)
self.active_sources = active_sources
self._configured_sub_zones = None
# Read our config file
@ -673,7 +679,6 @@ class Manager(object):
def sync(
self,
eligible_zones=[],
eligible_sources=[],
eligible_targets=[],
dry_run=True,
force=False,
@ -692,7 +697,7 @@ class Manager(object):
zones = self.config['zones']
zones = self._preprocess_zones(zones, eligible_sources)
zones = self._preprocess_zones(zones, self.active_sources)
if eligible_zones:
zones = IdnaDict({n: zones.get(n) for n in eligible_zones})
@ -706,9 +711,9 @@ class Manager(object):
raise ManagerException(
'ARPA zones cannot be synced during partial runs when auto_arpa is enabled'
)
if eligible_sources:
if self.active_sources:
raise ManagerException(
'eligible_sources is incompatible with auto_arpa'
'active_sources is incompatible with auto_arpa'
)
if eligible_targets:
raise ManagerException(
@ -747,7 +752,7 @@ class Manager(object):
lenient = config.get('lenient', False)
sources = self._get_sources(
decoded_zone_name, config, eligible_sources
decoded_zone_name, config, self.active_sources
)
try:
@ -944,30 +949,23 @@ class Manager(object):
return zb.changes(za, _AggregateTarget(a + b))
def dump(
self,
zone,
output_dir,
sources,
lenient=False,
split=False,
output_provider=None,
self, zone, output_dir, lenient=False, split=False, output_provider=None
):
'''
Dump zone data from the specified source
'''
self.log.info(
'dump: zone=%s, output_dir=%s, output_provider=%s, '
'lenient=%s, split=%s, sources=%s',
'lenient=%s, split=%s',
zone,
output_dir,
output_provider,
lenient,
split,
sources,
)
try:
sources = [self.providers[s] for s in sources]
sources = [self.providers[s] for s in self.active_sources]
except KeyError as e:
raise ManagerException(f'Unknown source: {e.args[0]}')


+ 33
- 50
tests/test_octodns_manager.py View File

@ -278,9 +278,9 @@ class TestManager(TestCase):
environ['YAML_TMP_DIR'] = tmpdir.dirname
environ['YAML_TMP_DIR2'] = tmpdir.dirname
# Only allow a target that doesn't exist
tc = Manager(get_config_filename('simple.yaml')).sync(
eligible_sources=['foo']
)
tc = Manager(
get_config_filename('simple.yaml'), active_sources=['foo']
).sync()
self.assertEqual(0, tc)
def test_eligible_targets(self):
@ -417,30 +417,25 @@ class TestManager(TestCase):
with TemporaryDirectory() as tmpdir:
environ['YAML_TMP_DIR'] = tmpdir.dirname
environ['YAML_TMP_DIR2'] = tmpdir.dirname
manager = Manager(get_config_filename('simple.yaml'))
manager = Manager(
get_config_filename('simple.yaml'), active_sources=['nope']
)
with self.assertRaises(ManagerException) as ctx:
manager.dump(
zone='unit.tests.',
output_dir=tmpdir.dirname,
split=True,
sources=['nope'],
zone='unit.tests.', output_dir=tmpdir.dirname, split=True
)
self.assertEqual('Unknown source: nope', str(ctx.exception))
# specific zone
manager.active_sources = ['in']
manager.dump(
zone='unit.tests.',
output_dir=tmpdir.dirname,
split=True,
sources=['in'],
zone='unit.tests.', output_dir=tmpdir.dirname, split=True
)
self.assertEqual(['unit.tests.'], listdir(tmpdir.dirname))
# all configured zones
manager.dump(
zone='*', output_dir=tmpdir.dirname, split=True, sources=['in']
)
manager.dump(zone='*', output_dir=tmpdir.dirname, split=True)
self.assertEqual(
[
'empty.',
@ -455,22 +450,19 @@ class TestManager(TestCase):
# when trying to find sub zones
with self.assertRaises(ManagerException):
manager.dump(
zone='unknown.zone.',
output_dir=tmpdir.dirname,
split=True,
sources=['in'],
zone='unknown.zone.', output_dir=tmpdir.dirname, split=True
)
def test_dump_empty(self):
with TemporaryDirectory() as tmpdir:
environ['YAML_TMP_DIR'] = tmpdir.dirname
environ['YAML_TMP_DIR2'] = tmpdir.dirname
manager = Manager(get_config_filename('simple.yaml'))
manager.dump(
zone='empty.', output_dir=tmpdir.dirname, sources=['in']
manager = Manager(
get_config_filename('simple.yaml'), active_sources=['in']
)
manager.dump(zone='empty.', output_dir=tmpdir.dirname)
with open(join(tmpdir.dirname, 'empty.yaml')) as fh:
data = safe_load(fh, False)
self.assertFalse(data)
@ -481,7 +473,9 @@ class TestManager(TestCase):
# this time we'll use seperate tmp dirs
with TemporaryDirectory() as tmpdir2:
environ['YAML_TMP_DIR2'] = tmpdir2.dirname
manager = Manager(get_config_filename('simple.yaml'))
manager = Manager(
get_config_filename('simple.yaml'), active_sources=['in']
)
# we're going to tell it to use dump2 to do the dumping, but a
# copy should be made and directory set to tmpdir.dirname
@ -490,7 +484,6 @@ class TestManager(TestCase):
zone='unit.tests.',
output_dir=tmpdir.dirname,
output_provider='dump2',
sources=['in'],
)
self.assertTrue(isfile(join(tmpdir.dirname, 'unit.tests.yaml')))
@ -504,7 +497,6 @@ class TestManager(TestCase):
zone='unit.tests.',
output_dir=tmpdir2.dirname,
output_provider='dump2',
sources=['in'],
)
self.assertTrue(
isfile(join(tmpdir2.dirname, 'unit.tests.yaml'))
@ -516,7 +508,6 @@ class TestManager(TestCase):
zone='unit.tests.',
output_dir=tmpdir.dirname,
output_provider='nope',
sources=['in'],
)
self.assertEqual(
'Unknown output_provider: nope', str(ctx.exception)
@ -529,7 +520,6 @@ class TestManager(TestCase):
zone='unit.tests.',
output_dir=tmpdir.dirname,
output_provider='simple',
sources=['in'],
)
self.assertEqual(
'output_provider=simple, does not support '
@ -545,7 +535,6 @@ class TestManager(TestCase):
zone='unit.tests.',
output_dir=tmpdir.dirname,
output_provider='simple',
sources=['in'],
)
self.assertEqual(
'output_provider=simple, does not support copy method',
@ -556,32 +545,27 @@ class TestManager(TestCase):
with TemporaryDirectory() as tmpdir:
environ['YAML_TMP_DIR'] = tmpdir.dirname
environ['YAML_TMP_DIR2'] = tmpdir.dirname
manager = Manager(get_config_filename('simple-split.yaml'))
manager = Manager(
get_config_filename('simple-split.yaml'),
active_sources=['nope'],
)
with self.assertRaises(ManagerException) as ctx:
manager.dump(
zone='unit.tests.',
output_dir=tmpdir.dirname,
split=True,
sources=['nope'],
zone='unit.tests.', output_dir=tmpdir.dirname, split=True
)
self.assertEqual('Unknown source: nope', str(ctx.exception))
manager.active_sources = ['in']
manager.dump(
zone='unit.tests.',
output_dir=tmpdir.dirname,
split=True,
sources=['in'],
zone='unit.tests.', output_dir=tmpdir.dirname, split=True
)
# make sure this fails with an ManagerException and not a KeyError
# when trying to find sub zones
with self.assertRaises(ManagerException):
manager.dump(
zone='unknown.zone.',
output_dir=tmpdir.dirname,
split=True,
sources=['in'],
zone='unknown.zone.', output_dir=tmpdir.dirname, split=True
)
def test_validate_configs(self):
@ -1057,24 +1041,22 @@ class TestManager(TestCase):
str(ctx.exception),
)
# same for eligible_sources
# same for active_sources
reset(tmpdir.dirname)
tc = manager.sync(
dry_run=False,
eligible_zones=['unit.tests.'],
eligible_sources=['in'],
)
manager.active_sources = ['in']
tc = manager.sync(dry_run=False, eligible_zones=['unit.tests.'])
self.assertEqual(22, tc)
# can't do partial syncs that include arpa zones
with self.assertRaises(ManagerException) as ctx:
manager.sync(dry_run=False, eligible_sources=['in'])
manager.sync(dry_run=False)
self.assertEqual(
'eligible_sources is incompatible with auto_arpa',
'active_sources is incompatible with auto_arpa',
str(ctx.exception),
)
# same for eligible_targets
reset(tmpdir.dirname)
manager.active_sources = None
tc = manager.sync(
dry_run=False,
eligible_zones=['unit.tests.'],
@ -1091,6 +1073,7 @@ class TestManager(TestCase):
# full sync with arpa is fine, 2 extra records from it
reset(tmpdir.dirname)
manager.active_sources = None
tc = manager.sync(dry_run=False)
self.assertEqual(26, tc)


Loading…
Cancel
Save