diff --git a/octodns/provider/ns1.py b/octodns/provider/ns1.py index cecbde0..9d378d9 100644 --- a/octodns/provider/ns1.py +++ b/octodns/provider/ns1.py @@ -1130,16 +1130,21 @@ class Ns1Provider(BaseProvider): def _get_ns1_filters(self, ns1_zone_name): ns1_filters = {} - ns1_zone = self._client.zones_retrieve(ns1_zone_name) - for ns1_record in ns1_zone['records']: - if ns1_record.get('tier', 1) > 1: - # Need to get the full record data for geo records - full_rec = self._client.records_retrieve(ns1_zone_name, - ns1_record['domain'], - ns1_record['type']) - if 'filters' in full_rec: - filter_key = '{}.'.format(ns1_record['domain']) - ns1_filters[filter_key] = full_rec['filters'] + try: + ns1_zone = self._client.zones_retrieve(ns1_zone_name) + for ns1_record in ns1_zone['records']: + if ns1_record.get('tier', 1) > 1: + # Need to get the full record data for geo records + full_rec = self._client.records_retrieve( + ns1_zone_name, + ns1_record['domain'], + ns1_record['type']) + if 'filters' in full_rec: + filter_key = '{}.'.format(ns1_record['domain']) + ns1_filters[filter_key] = full_rec['filters'] + except ResourceException as e: + if e.message != self.ZONE_NOT_FOUND_MESSAGE: + raise return ns1_filters def _disabled_flag_in_filters(self, filters, domain): diff --git a/tests/test_octodns_provider_ns1.py b/tests/test_octodns_provider_ns1.py index f2d9908..fb177c8 100644 --- a/tests/test_octodns_provider_ns1.py +++ b/tests/test_octodns_provider_ns1.py @@ -1219,10 +1219,27 @@ class TestNs1ProviderDynamic(TestCase): self.assertFalse(extra) monitors_for_mock.assert_not_called() - # Simple record, ignored + # Non-existent zone. No changes + monitors_for_mock.reset_mock() + zones_retrieve_mock.side_effect = \ + ResourceException('server error: zone not found') + records_retrieve_mock.reset_mock() + extra = provider._extra_changes(desired, []) + self.assertFalse(extra) + + # Unexpected exception message + zones_retrieve_mock.reset_mock() + zones_retrieve_mock.side_effect = ResourceException('boom') + with self.assertRaises(ResourceException) as ctx: + extra = provider._extra_changes(desired, []) + self.assertEquals(zones_retrieve_mock.side_effect, ctx.exception) + + # Simple record, ignored, filter update lookups ignored monitors_for_mock.reset_mock() zones_retrieve_mock.reset_mock() records_retrieve_mock.reset_mock() + zones_retrieve_mock.side_effect = \ + ResourceException('server error: zone not found') simple = Record.new(desired, '', { 'ttl': 32,