1
0
mirror of https://github.com/github/octodns.git synced 2024-05-11 05:55:00 +00:00

Handle non-existent zones case in extra_changes

This commit is contained in:
Pavan Chandrashekar
2020-03-28 02:21:07 -07:00
parent 438bea46c3
commit 72eaf0d3af
2 changed files with 33 additions and 11 deletions

View File

@@ -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):

View File

@@ -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,