mirror of
https://github.com/github/octodns.git
synced 2024-05-11 05:55:00 +00:00
allow multiple values if all pool values are included
This commit is contained in:
@@ -302,10 +302,21 @@ def _get_monitor(record):
|
||||
def _check_valid_dynamic(record):
|
||||
typ = record._type
|
||||
if typ in ['A', 'AAAA']:
|
||||
if len(record.values) > 1:
|
||||
# we don't yet support multi-value defaults
|
||||
msg = '{} {}: A/AAAA dynamic records can only have a single value'
|
||||
raise AzureException(msg.format(record.fqdn, record._type))
|
||||
defaults = set(record.values)
|
||||
if len(defaults) > 1:
|
||||
pools = record.dynamic.pools
|
||||
vals = set(
|
||||
v['value']
|
||||
for _, pool in pools.items()
|
||||
for v in pool._data()['values']
|
||||
)
|
||||
if defaults != vals:
|
||||
# we don't yet support multi-value defaults, specifying all
|
||||
# pool values allows for Traffic Manager profile optimization
|
||||
msg = ('{} {}: Values of A/AAAA dynamic records must either '
|
||||
'have a single value or contain all values from all '
|
||||
'pools')
|
||||
raise AzureException(msg.format(record.fqdn, record._type))
|
||||
elif typ != 'CNAME':
|
||||
# dynamic records of unsupported type
|
||||
msg = '{}: Dynamic records in Azure must be of type A/AAAA/CNAME'
|
||||
|
||||
@@ -1873,12 +1873,13 @@ class TestAzureDnsProvider(TestCase):
|
||||
record = Record.new(zone, 'foo', data={
|
||||
'type': 'AAAA',
|
||||
'ttl': 60,
|
||||
'values': ['1::1'],
|
||||
'values': ['1::1', '2::2'],
|
||||
'dynamic': {
|
||||
'pools': {
|
||||
'one': {
|
||||
'values': [
|
||||
{'value': '1::1'},
|
||||
{'value': '2::2'},
|
||||
],
|
||||
},
|
||||
},
|
||||
@@ -1892,16 +1893,22 @@ class TestAzureDnsProvider(TestCase):
|
||||
self.assertEqual(len(profiles), 1)
|
||||
self.assertTrue(_profile_is_match(profiles[0], Profile(
|
||||
name='foo--unit--tests-AAAA',
|
||||
traffic_routing_method='Geographic',
|
||||
traffic_routing_method='Weighted',
|
||||
dns_config=DnsConfig(
|
||||
relative_name='foo--unit--tests-aaaa', ttl=record.ttl),
|
||||
monitor_config=_get_monitor(record),
|
||||
endpoints=[
|
||||
Endpoint(
|
||||
name='one--default--',
|
||||
name='one--1--1--default--',
|
||||
type=external,
|
||||
target='1::1',
|
||||
geo_mapping=['WORLD'],
|
||||
weight=1,
|
||||
),
|
||||
Endpoint(
|
||||
name='one--2--2--default--',
|
||||
type=external,
|
||||
target='2::2',
|
||||
weight=1,
|
||||
),
|
||||
],
|
||||
)))
|
||||
|
||||
Reference in New Issue
Block a user