Browse Source

Make sorting enforcement optional with YamlProvider

pull/70/head
Ross McFarland 9 years ago
parent
commit
046cde43b2
2 changed files with 16 additions and 4 deletions
  1. +10
    -4
      octodns/provider/yaml.py
  2. +6
    -0
      tests/test_octodns_provider_yaml.py

+ 10
- 4
octodns/provider/yaml.py View File

@ -26,16 +26,22 @@ class YamlProvider(BaseProvider):
# The ttl to use for records when not specified in the data # The ttl to use for records when not specified in the data
# (optional, default 3600) # (optional, default 3600)
default_ttl: 3600 default_ttl: 3600
# Whether or not to enforce sorting order on the yaml config
# (optional, default True)
enforce_order: True
''' '''
SUPPORTS_GEO = True SUPPORTS_GEO = True
def __init__(self, id, directory, default_ttl=3600, *args, **kwargs):
def __init__(self, id, directory, default_ttl=3600, enforce_order=True,
*args, **kwargs):
self.log = logging.getLogger('YamlProvider[{}]'.format(id)) self.log = logging.getLogger('YamlProvider[{}]'.format(id))
self.log.debug('__init__: id=%s, directory=%s, default_ttl=%d', id,
directory, default_ttl)
self.log.debug('__init__: id=%s, directory=%s, default_ttl=%d, '
'enforce_order=%d', id, directory, default_ttl,
enforce_order)
super(YamlProvider, self).__init__(id, *args, **kwargs) super(YamlProvider, self).__init__(id, *args, **kwargs)
self.directory = directory self.directory = directory
self.default_ttl = default_ttl self.default_ttl = default_ttl
self.enforce_order = enforce_order
def populate(self, zone, target=False): def populate(self, zone, target=False):
self.log.debug('populate: zone=%s, target=%s', zone.name, target) self.log.debug('populate: zone=%s, target=%s', zone.name, target)
@ -47,7 +53,7 @@ class YamlProvider(BaseProvider):
before = len(zone.records) before = len(zone.records)
filename = join(self.directory, '{}yaml'.format(zone.name)) filename = join(self.directory, '{}yaml'.format(zone.name))
with open(filename, 'r') as fh: with open(filename, 'r') as fh:
yaml_data = safe_load(fh)
yaml_data = safe_load(fh, enforce_order=self.enforce_order)
if yaml_data: if yaml_data:
for name, data in yaml_data.items(): for name, data in yaml_data.items():
if not isinstance(data, list): if not isinstance(data, list):


+ 6
- 0
tests/test_octodns_provider_yaml.py View File

@ -100,6 +100,12 @@ class TestYamlProvider(TestCase):
with self.assertRaises(ConstructorError): with self.assertRaises(ConstructorError):
source.populate(zone) source.populate(zone)
source = YamlProvider('test', join(dirname(__file__), 'config'),
enforce_order=False)
# no exception
source.populate(zone)
self.assertEqual(2, len(zone.records))
def test_subzone_handling(self): def test_subzone_handling(self):
source = YamlProvider('test', join(dirname(__file__), 'config')) source = YamlProvider('test', join(dirname(__file__), 'config'))


Loading…
Cancel
Save