mirror of
https://github.com/github/octodns.git
synced 2024-05-11 05:55:00 +00:00
Implement AcmeIgnoringProcessor
This commit is contained in:
33
octodns/processor/acme.py
Normal file
33
octodns/processor/acme.py
Normal 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
tests/test_octodns_processor_acme.py
Normal file
51
tests/test_octodns_processor_acme.py
Normal 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]))
|
||||||
Reference in New Issue
Block a user