diff --git a/octodns/manager.py b/octodns/manager.py index 2545e71..11a675b 100644 --- a/octodns/manager.py +++ b/octodns/manager.py @@ -273,12 +273,18 @@ class Manager(object): for target, plan in plans: plan.raise_if_unsafe() - if dry_run or config.get('always-dry-run', False): + if dry_run: return 0 total_changes = 0 self.log.debug('sync: applying') + zones = self.config['zones'] for target, plan in plans: + zone_name = plan.existing.name + if zones[zone_name].get('always-dry-run', False): + self.log.info('sync: zone=%s skipping always-dry-run', + zone_name) + continue total_changes += target.apply(plan) self.log.info('sync: %d total changes', total_changes) diff --git a/tests/test_octodns_manager.py b/tests/test_octodns_manager.py index 811503a..fa8bdd1 100644 --- a/tests/test_octodns_manager.py +++ b/tests/test_octodns_manager.py @@ -88,6 +88,14 @@ class TestManager(TestCase): .sync(['not.targetable.']) self.assertTrue('does not support targeting' in ctx.exception.message) + def test_always_dry_run(self): + with TemporaryDirectory() as tmpdir: + environ['YAML_TMP_DIR'] = tmpdir.dirname + tc = Manager(get_config_filename('always-dry-run.yaml')) \ + .sync(dry_run=False) + # only the stuff from subzone, unit.tests. is always-dry-run + self.assertEquals(3, tc) + def test_simple(self): with TemporaryDirectory() as tmpdir: environ['YAML_TMP_DIR'] = tmpdir.dirname