mirror of
https://github.com/github/octodns.git
synced 2024-05-11 05:55:00 +00:00
Better Dyn dynamic TD detection
This commit is contained in:
@@ -412,10 +412,8 @@ class DynProvider(BaseProvider):
|
|||||||
|
|
||||||
return self._traffic_directors
|
return self._traffic_directors
|
||||||
|
|
||||||
def _populate_geo_traffic_director(self, zone, fqdn, _type, td, lenient):
|
def _populate_geo_traffic_director(self, zone, fqdn, _type, td, rulesets,
|
||||||
# critical to call rulesets once, each call loads them :-(
|
lenient):
|
||||||
rulesets = td.rulesets
|
|
||||||
|
|
||||||
# We start out with something that will always change show
|
# We start out with something that will always change show
|
||||||
# change in case this is a busted TD. This will prevent us from
|
# change in case this is a busted TD. This will prevent us from
|
||||||
# creating a duplicate td. We'll overwrite this with real data
|
# creating a duplicate td. We'll overwrite this with real data
|
||||||
@@ -565,9 +563,7 @@ class DynProvider(BaseProvider):
|
|||||||
return rules
|
return rules
|
||||||
|
|
||||||
def _populate_dynamic_traffic_director(self, zone, fqdn, _type, td,
|
def _populate_dynamic_traffic_director(self, zone, fqdn, _type, td,
|
||||||
lenient):
|
rulesets, lenient):
|
||||||
# critical to call rulesets once, each call loads them :-(
|
|
||||||
rulesets = td.rulesets
|
|
||||||
# We'll go ahead and grab pools too, using all will include unref'd
|
# We'll go ahead and grab pools too, using all will include unref'd
|
||||||
# pools
|
# pools
|
||||||
response_pools = td.all_response_pools
|
response_pools = td.all_response_pools
|
||||||
@@ -600,6 +596,21 @@ class DynProvider(BaseProvider):
|
|||||||
|
|
||||||
return record
|
return record
|
||||||
|
|
||||||
|
def _is_traffic_director_dyanmic(self, td, rulesets):
|
||||||
|
for ruleset in rulesets:
|
||||||
|
try:
|
||||||
|
pieces = ruleset.label.split(':')
|
||||||
|
if len(pieces) == 2:
|
||||||
|
# It matches octoDNS's format
|
||||||
|
int(pieces[0])
|
||||||
|
# It's an integer, so probably rule_num, thus dynamic
|
||||||
|
return True
|
||||||
|
except (IndexError, ValueError):
|
||||||
|
pass
|
||||||
|
# We didn't see any rulesets that look like a dynamic record so maybe
|
||||||
|
# geo...
|
||||||
|
return False
|
||||||
|
|
||||||
def _populate_traffic_directors(self, zone, lenient):
|
def _populate_traffic_directors(self, zone, lenient):
|
||||||
self.log.debug('_populate_traffic_directors: zone=%s, lenient=%s',
|
self.log.debug('_populate_traffic_directors: zone=%s, lenient=%s',
|
||||||
zone.name, lenient)
|
zone.name, lenient)
|
||||||
@@ -609,15 +620,19 @@ class DynProvider(BaseProvider):
|
|||||||
if not fqdn.endswith(zone.name):
|
if not fqdn.endswith(zone.name):
|
||||||
continue
|
continue
|
||||||
for _type, td in types.items():
|
for _type, td in types.items():
|
||||||
if td.label.startswith('dynamic:'):
|
# critical to call rulesets once, each call loads them :-(
|
||||||
|
rulesets = td.rulesets
|
||||||
|
if self._is_traffic_director_dyanmic(td, rulesets):
|
||||||
record = \
|
record = \
|
||||||
self._populate_dynamic_traffic_director(zone, fqdn,
|
self._populate_dynamic_traffic_director(zone, fqdn,
|
||||||
_type, td,
|
_type, td,
|
||||||
|
rulesets,
|
||||||
lenient)
|
lenient)
|
||||||
else:
|
else:
|
||||||
record = \
|
record = \
|
||||||
self._populate_geo_traffic_director(zone, fqdn, _type,
|
self._populate_geo_traffic_director(zone, fqdn, _type,
|
||||||
td, lenient)
|
td, rulesets,
|
||||||
|
lenient)
|
||||||
td_records.add(record)
|
td_records.add(record)
|
||||||
|
|
||||||
return td_records
|
return td_records
|
||||||
@@ -1218,7 +1233,7 @@ class DynProvider(BaseProvider):
|
|||||||
new = change.new
|
new = change.new
|
||||||
fqdn = new.fqdn
|
fqdn = new.fqdn
|
||||||
_type = new._type
|
_type = new._type
|
||||||
label = 'dynamic:{}:{}'.format(fqdn, _type)
|
label = '{}:{}'.format(fqdn, _type)
|
||||||
node = DSFNode(new.zone.name, fqdn)
|
node = DSFNode(new.zone.name, fqdn)
|
||||||
td = TrafficDirector(label, ttl=new.ttl, nodes=[node], publish='Y')
|
td = TrafficDirector(label, ttl=new.ttl, nodes=[node], publish='Y')
|
||||||
self.log.debug('_mod_dynamic_Create: td=%s', td.service_id)
|
self.log.debug('_mod_dynamic_Create: td=%s', td.service_id)
|
||||||
|
|||||||
@@ -1884,7 +1884,8 @@ class TestDynProviderDynamic(TestCase):
|
|||||||
pool1_response_pool])
|
pool1_response_pool])
|
||||||
zone = Zone('unit.tests.', [])
|
zone = Zone('unit.tests.', [])
|
||||||
record = provider._populate_dynamic_traffic_director(zone, fqdn, 'A',
|
record = provider._populate_dynamic_traffic_director(zone, fqdn, 'A',
|
||||||
td, True)
|
td, rulesets,
|
||||||
|
True)
|
||||||
self.assertTrue(record)
|
self.assertTrue(record)
|
||||||
self.assertEquals('A', record._type)
|
self.assertEquals('A', record._type)
|
||||||
self.assertEquals(90, record.ttl)
|
self.assertEquals(90, record.ttl)
|
||||||
|
|||||||
Reference in New Issue
Block a user