Browse Source

Implement AcmeIgnoringProcessor

pull/753/head
Ross McFarland 4 years ago
parent
commit
44b7c6880d
No known key found for this signature in database GPG Key ID: 943B179E15D3B22A
2 changed files with 84 additions and 0 deletions
  1. +33
    -0
      octodns/processor/acme.py
  2. +51
    -0
      tests/test_octodns_processor_acme.py

+ 33
- 0
octodns/processor/acme.py View File

@ -0,0 +1,33 @@
#
#
#
from __future__ import absolute_import, division, print_function, \
unicode_literals
from logging import getLogger
from .base import BaseProcessor
class AcmeIgnoringProcessor(BaseProcessor):
log = getLogger('AcmeIgnoringProcessor')
def __init__(self, name):
super(AcmeIgnoringProcessor, self).__init__(name)
def _process(self, zone, *args, **kwargs):
ret = self._clone_zone(zone)
for record in zone.records:
# Uses a startswith rather than == to ignore subdomain challenges,
# e.g. _acme-challenge.foo.domain.com when managing domain.com
if record._type == 'TXT' and \
record.name.startswith('_acme-challenge'):
self.log.info('_process: ignoring %s', record.fqdn)
continue
ret.add_record(record)
return ret
process_source_zone = _process
process_target_zone = _process

+ 51
- 0
tests/test_octodns_processor_acme.py View File

@ -0,0 +1,51 @@
#
#
#
from __future__ import absolute_import, division, print_function, \
unicode_literals
from unittest import TestCase
from octodns.processor.acme import AcmeIgnoringProcessor
from octodns.record import Record
from octodns.zone import Zone
zone = Zone('unit.tests.', [])
for record in [
# Will be ignored
Record.new(zone, '_acme-challenge', {
'ttl': 30,
'type': 'TXT',
'value': 'magic bit',
}),
# Not TXT so will live
Record.new(zone, '_acme-challenge.aaaa', {
'ttl': 30,
'type': 'AAAA',
'value': '::1',
}),
# Will be ignored
Record.new(zone, '_acme-challenge.foo', {
'ttl': 30,
'type': 'TXT',
'value': 'magic bit',
}),
# Not acme-challenge so will live
Record.new(zone, 'txt', {
'ttl': 30,
'type': 'TXT',
'value': 'Hello World!',
}),
]:
zone.add_record(record)
class TestAcmeIgnoringProcessor(TestCase):
def test_basics(self):
acme = AcmeIgnoringProcessor('acme')
got = acme.process_source_zone(zone)
self.assertEquals(['_acme-challenge.aaaa', 'txt'],
sorted([r.name for r in got.records]))

Loading…
Cancel
Save