From dd0042c6ff9f4b8824f1f46a885339f5893cc0d3 Mon Sep 17 00:00:00 2001 From: Ross McFarland Date: Thu, 8 Jun 2017 17:55:19 -0700 Subject: [PATCH 1/3] Escape unescaped semicolons coming out of Route53 --- octodns/provider/route53.py | 5 ++++- tests/test_octodns_provider_route53.py | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/octodns/provider/route53.py b/octodns/provider/route53.py index 3849561..4d1b2e9 100644 --- a/octodns/provider/route53.py +++ b/octodns/provider/route53.py @@ -253,10 +253,13 @@ class Route53Provider(BaseProvider): _data_for_PTR = _data_for_single _data_for_CNAME = _data_for_single + _fix_semicolons = re.compile(r'(? Date: Thu, 8 Jun 2017 18:34:33 -0700 Subject: [PATCH 2/3] Fix zone-level always-dry-run functionality Thanks @offmindby! --- octodns/manager.py | 8 +++++++- tests/test_octodns_manager.py | 8 ++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) 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 From 7e0730ea1b76ec6179850adaccdb76703ef5f00f Mon Sep 17 00:00:00 2001 From: Ross McFarland Date: Thu, 8 Jun 2017 18:45:47 -0700 Subject: [PATCH 3/3] Helps if I add the new config file --- tests/config/always-dry-run.yaml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 tests/config/always-dry-run.yaml diff --git a/tests/config/always-dry-run.yaml b/tests/config/always-dry-run.yaml new file mode 100644 index 0000000..466c26b --- /dev/null +++ b/tests/config/always-dry-run.yaml @@ -0,0 +1,20 @@ +providers: + in: + class: octodns.provider.yaml.YamlProvider + directory: tests/config + dump: + class: octodns.provider.yaml.YamlProvider + directory: env/YAML_TMP_DIR +zones: + unit.tests.: + always-dry-run: true + sources: + - in + targets: + - dump + subzone.unit.tests.: + always-dry-run: false + sources: + - in + targets: + - dump