Browse Source

Drop 'disabled' flag from NS1 filter chains

pull/798/head
Viranch Mehta 4 years ago
parent
commit
b23f09608d
No known key found for this signature in database GPG Key ID: D83D1392AE9F93B4
2 changed files with 29 additions and 25 deletions
  1. +22
    -23
      octodns/provider/ns1.py
  2. +7
    -2
      tests/test_octodns_provider_ns1.py

+ 22
- 23
octodns/provider/ns1.py View File

@ -312,68 +312,64 @@ class Ns1Provider(BaseProvider):
ZONE_NOT_FOUND_MESSAGE = 'server error: zone not found' ZONE_NOT_FOUND_MESSAGE = 'server error: zone not found'
SHARED_NOTIFYLIST_NAME = 'octoDNS NS1 Notify List' SHARED_NOTIFYLIST_NAME = 'octoDNS NS1 Notify List'
def _update_filter(self, filter):
filter.setdefault('disabled', False)
return (dict(sorted(filter.items(), key=lambda t: t[0])))
@property @property
def _UP_FILTER(self): def _UP_FILTER(self):
return self._update_filter({
return {
'config': {}, 'config': {},
'filter': 'up' 'filter': 'up'
})
}
@property @property
def _REGION_FILTER(self): def _REGION_FILTER(self):
return self._update_filter({
return {
'config': { 'config': {
'remove_no_georegion': True 'remove_no_georegion': True
}, },
'filter': u'geofence_regional' 'filter': u'geofence_regional'
})
}
@property @property
def _COUNTRY_FILTER(self): def _COUNTRY_FILTER(self):
return self._update_filter({
return {
'config': { 'config': {
'remove_no_location': True 'remove_no_location': True
}, },
'filter': u'geofence_country' 'filter': u'geofence_country'
})
}
# In the NS1 UI/portal, this filter is called "SELECT FIRST GROUP" though # In the NS1 UI/portal, this filter is called "SELECT FIRST GROUP" though
# the filter name in the NS1 api is 'select_first_region' # the filter name in the NS1 api is 'select_first_region'
@property @property
def _SELECT_FIRST_REGION_FILTER(self): def _SELECT_FIRST_REGION_FILTER(self):
return self._update_filter({
return {
'config': {}, 'config': {},
'filter': u'select_first_region' 'filter': u'select_first_region'
})
}
@property @property
def _PRIORITY_FILTER(self): def _PRIORITY_FILTER(self):
return self._update_filter({
return {
'config': { 'config': {
'eliminate': u'1' 'eliminate': u'1'
}, },
'filter': 'priority' 'filter': 'priority'
})
}
@property @property
def _WEIGHTED_SHUFFLE_FILTER(self): def _WEIGHTED_SHUFFLE_FILTER(self):
return self._update_filter({
return {
'config': {}, 'config': {},
'filter': u'weighted_shuffle' 'filter': u'weighted_shuffle'
})
}
@property @property
def _SELECT_FIRST_N_FILTER(self): def _SELECT_FIRST_N_FILTER(self):
return self._update_filter({
return {
'config': { 'config': {
'N': u'1' 'N': u'1'
}, },
'filter': u'select_first_n' 'filter': u'select_first_n'
})
}
@property @property
def _BASIC_FILTER_CHAIN(self): def _BASIC_FILTER_CHAIN(self):
@ -465,8 +461,15 @@ class Ns1Provider(BaseProvider):
self._client = Ns1Client(api_key, parallelism, retry_count, self._client = Ns1Client(api_key, parallelism, retry_count,
client_config) client_config)
def _sanitize_disabled_in_filter_config(self, filter_cfg):
# remove disabled=False from filters
for filter in filter_cfg:
if 'disabled' in filter and filter['disabled'] is False:
del filter['disabled']
return filter_cfg
def _valid_filter_config(self, filter_cfg): def _valid_filter_config(self, filter_cfg):
self._disabled_flag_in_filters(filter_cfg)
self._sanitize_disabled_in_filter_config(filter_cfg)
has_region = self._REGION_FILTER in filter_cfg has_region = self._REGION_FILTER in filter_cfg
has_country = self._COUNTRY_FILTER in filter_cfg has_country = self._COUNTRY_FILTER in filter_cfg
expected_filter_cfg = self._get_updated_filter_chain(has_region, expected_filter_cfg = self._get_updated_filter_chain(has_region,
@ -1424,10 +1427,6 @@ class Ns1Provider(BaseProvider):
for v in record.values] for v in record.values]
return {'answers': values, 'ttl': record.ttl}, None return {'answers': values, 'ttl': record.ttl}, None
def _disabled_flag_in_filters(self, filters):
# fill up filters with disabled=False flag whenever absent
return [self._update_filter(f) for f in filters]
def _extra_changes(self, desired, changes, **kwargs): def _extra_changes(self, desired, changes, **kwargs):
self.log.debug('_extra_changes: desired=%s', desired.name) self.log.debug('_extra_changes: desired=%s', desired.name)
changed = set([c.record for c in changes]) changed = set([c.record for c in changes])


+ 7
- 2
tests/test_octodns_provider_ns1.py View File

@ -2165,7 +2165,7 @@ class TestNs1ProviderDynamic(TestCase):
extra = provider._extra_changes(desired, []) extra = provider._extra_changes(desired, [])
self.assertTrue(extra) self.assertTrue(extra)
# Mixed disabled in filters doesn't trigger an update
# disabled=False in filters doesn't trigger an update
reset() reset()
ns1_zone = { ns1_zone = {
'records': [{ 'records': [{
@ -2176,7 +2176,7 @@ class TestNs1ProviderDynamic(TestCase):
"filters": provider._BASIC_FILTER_CHAIN "filters": provider._BASIC_FILTER_CHAIN
}], }],
} }
del ns1_zone['records'][0]['filters'][0]['disabled']
ns1_zone['records'][0]['filters'][0]['disabled'] = False
monitors_for_mock.side_effect = [{}] monitors_for_mock.side_effect = [{}]
zones_retrieve_mock.side_effect = [ns1_zone] zones_retrieve_mock.side_effect = [ns1_zone]
records_retrieve_mock.side_effect = ns1_zone['records'] records_retrieve_mock.side_effect = ns1_zone['records']
@ -2187,6 +2187,11 @@ class TestNs1ProviderDynamic(TestCase):
extra = provider._extra_changes(desired, []) extra = provider._extra_changes(desired, [])
self.assertFalse(extra) self.assertFalse(extra)
# disabled=True in filters does trigger an update
ns1_zone['records'][0]['filters'][0]['disabled'] = True
extra = provider._extra_changes(desired, [])
self.assertTrue(extra)
DESIRED = Zone('unit.tests.', []) DESIRED = Zone('unit.tests.', [])
SIMPLE = Record.new(DESIRED, 'sim', { SIMPLE = Record.new(DESIRED, 'sim', {


Loading…
Cancel
Save