mirror of
https://github.com/github/octodns.git
synced 2024-05-11 05:55:00 +00:00
Add support for ignored records.
```yaml ignored: octodns: ignored: true type: A value: 1.2.3.4 ```
This commit is contained in:
@@ -112,6 +112,9 @@ class Record(object):
|
|||||||
raise Exception('Invalid record {}, missing ttl'.format(self.fqdn))
|
raise Exception('Invalid record {}, missing ttl'.format(self.fqdn))
|
||||||
self.source = source
|
self.source = source
|
||||||
|
|
||||||
|
octodns = data.get('octodns', {})
|
||||||
|
self.ignored = octodns.get('ignored', False)
|
||||||
|
|
||||||
def _data(self):
|
def _data(self):
|
||||||
return {'ttl': self.ttl}
|
return {'ttl': self.ttl}
|
||||||
|
|
||||||
|
@@ -76,8 +76,12 @@ class Zone(object):
|
|||||||
|
|
||||||
# Find diffs & removes
|
# Find diffs & removes
|
||||||
for record in filter(_is_eligible, self.records):
|
for record in filter(_is_eligible, self.records):
|
||||||
|
if record.ignored:
|
||||||
|
continue
|
||||||
try:
|
try:
|
||||||
desired_record = desired_records[record]
|
desired_record = desired_records[record]
|
||||||
|
if desired_record.ignored:
|
||||||
|
continue
|
||||||
except KeyError:
|
except KeyError:
|
||||||
if not target.supports(record):
|
if not target.supports(record):
|
||||||
self.log.debug('changes: skipping record=%s %s - %s does '
|
self.log.debug('changes: skipping record=%s %s - %s does '
|
||||||
@@ -103,6 +107,8 @@ class Zone(object):
|
|||||||
# This uses set math and our special __hash__ and __cmp__ functions as
|
# This uses set math and our special __hash__ and __cmp__ functions as
|
||||||
# well
|
# well
|
||||||
for record in filter(_is_eligible, desired.records - self.records):
|
for record in filter(_is_eligible, desired.records - self.records):
|
||||||
|
if record.ignored:
|
||||||
|
continue
|
||||||
if not target.supports(record):
|
if not target.supports(record):
|
||||||
self.log.debug('changes: skipping record=%s %s - %s does not '
|
self.log.debug('changes: skipping record=%s %s - %s does not '
|
||||||
'support it', record.fqdn, record._type,
|
'support it', record.fqdn, record._type,
|
||||||
|
@@ -51,6 +51,11 @@ cname:
|
|||||||
ttl: 300
|
ttl: 300
|
||||||
type: CNAME
|
type: CNAME
|
||||||
value: unit.tests.
|
value: unit.tests.
|
||||||
|
ignored:
|
||||||
|
octodns:
|
||||||
|
ignored: true
|
||||||
|
type: A
|
||||||
|
value: 9.9.9.9
|
||||||
mx:
|
mx:
|
||||||
ttl: 300
|
ttl: 300
|
||||||
type: MX
|
type: MX
|
||||||
|
@@ -129,8 +129,8 @@ class TestDnsimpleProvider(TestCase):
|
|||||||
]
|
]
|
||||||
plan = provider.plan(self.expected)
|
plan = provider.plan(self.expected)
|
||||||
|
|
||||||
# No root NS
|
# No root NS, no ignored
|
||||||
n = len(self.expected.records) - 1
|
n = len(self.expected.records) - 2
|
||||||
self.assertEquals(n, len(plan.changes))
|
self.assertEquals(n, len(plan.changes))
|
||||||
self.assertEquals(n, provider.apply(plan))
|
self.assertEquals(n, provider.apply(plan))
|
||||||
|
|
||||||
|
@@ -78,7 +78,8 @@ class TestPowerDnsProvider(TestCase):
|
|||||||
expected = Zone('unit.tests.', [])
|
expected = Zone('unit.tests.', [])
|
||||||
source = YamlProvider('test', join(dirname(__file__), 'config'))
|
source = YamlProvider('test', join(dirname(__file__), 'config'))
|
||||||
source.populate(expected)
|
source.populate(expected)
|
||||||
self.assertEquals(14, len(expected.records))
|
expected_n = len(expected.records) - 1
|
||||||
|
self.assertEquals(14, expected_n)
|
||||||
|
|
||||||
# No diffs == no changes
|
# No diffs == no changes
|
||||||
with requests_mock() as mock:
|
with requests_mock() as mock:
|
||||||
@@ -93,7 +94,7 @@ class TestPowerDnsProvider(TestCase):
|
|||||||
# Used in a minute
|
# Used in a minute
|
||||||
def assert_rrsets_callback(request, context):
|
def assert_rrsets_callback(request, context):
|
||||||
data = loads(request.body)
|
data = loads(request.body)
|
||||||
self.assertEquals(len(expected.records), len(data['rrsets']))
|
self.assertEquals(expected_n, len(data['rrsets']))
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
# No existing records -> creates for every record in expected
|
# No existing records -> creates for every record in expected
|
||||||
@@ -103,8 +104,8 @@ class TestPowerDnsProvider(TestCase):
|
|||||||
mock.patch(ANY, status_code=201, text=assert_rrsets_callback)
|
mock.patch(ANY, status_code=201, text=assert_rrsets_callback)
|
||||||
|
|
||||||
plan = provider.plan(expected)
|
plan = provider.plan(expected)
|
||||||
self.assertEquals(len(expected.records), len(plan.changes))
|
self.assertEquals(expected_n, len(plan.changes))
|
||||||
self.assertEquals(len(expected.records), provider.apply(plan))
|
self.assertEquals(expected_n, provider.apply(plan))
|
||||||
|
|
||||||
# Non-existent zone -> creates for every record in expected
|
# Non-existent zone -> creates for every record in expected
|
||||||
# OMG this is fucking ugly, probably better to ditch requests_mocks and
|
# OMG this is fucking ugly, probably better to ditch requests_mocks and
|
||||||
@@ -121,8 +122,8 @@ class TestPowerDnsProvider(TestCase):
|
|||||||
mock.post(ANY, status_code=201, text=assert_rrsets_callback)
|
mock.post(ANY, status_code=201, text=assert_rrsets_callback)
|
||||||
|
|
||||||
plan = provider.plan(expected)
|
plan = provider.plan(expected)
|
||||||
self.assertEquals(len(expected.records), len(plan.changes))
|
self.assertEquals(expected_n, len(plan.changes))
|
||||||
self.assertEquals(len(expected.records), provider.apply(plan))
|
self.assertEquals(expected_n, provider.apply(plan))
|
||||||
|
|
||||||
with requests_mock() as mock:
|
with requests_mock() as mock:
|
||||||
# get 422's, unknown zone
|
# get 422's, unknown zone
|
||||||
@@ -166,7 +167,7 @@ class TestPowerDnsProvider(TestCase):
|
|||||||
expected = Zone('unit.tests.', [])
|
expected = Zone('unit.tests.', [])
|
||||||
source = YamlProvider('test', join(dirname(__file__), 'config'))
|
source = YamlProvider('test', join(dirname(__file__), 'config'))
|
||||||
source.populate(expected)
|
source.populate(expected)
|
||||||
self.assertEquals(14, len(expected.records))
|
self.assertEquals(15, len(expected.records))
|
||||||
|
|
||||||
# A small change to a single record
|
# A small change to a single record
|
||||||
with requests_mock() as mock:
|
with requests_mock() as mock:
|
||||||
|
@@ -30,7 +30,7 @@ class TestYamlProvider(TestCase):
|
|||||||
|
|
||||||
# without it we see everything
|
# without it we see everything
|
||||||
source.populate(zone)
|
source.populate(zone)
|
||||||
self.assertEquals(14, len(zone.records))
|
self.assertEquals(15, len(zone.records))
|
||||||
|
|
||||||
# Assumption here is that a clean round-trip means that everything
|
# Assumption here is that a clean round-trip means that everything
|
||||||
# worked as expected, data that went in came back out and could be
|
# worked as expected, data that went in came back out and could be
|
||||||
|
@@ -172,3 +172,36 @@ class TestZone(TestCase):
|
|||||||
with self.assertRaises(SubzoneRecordException) as ctx:
|
with self.assertRaises(SubzoneRecordException) as ctx:
|
||||||
zone.add_record(record)
|
zone.add_record(record)
|
||||||
self.assertTrue('under a managed sub-zone', ctx.exception.message)
|
self.assertTrue('under a managed sub-zone', ctx.exception.message)
|
||||||
|
|
||||||
|
def test_ignored_records(self):
|
||||||
|
zone_normal = Zone('unit.tests.', [])
|
||||||
|
zone_ignored = Zone('unit.tests.', [])
|
||||||
|
zone_missing = Zone('unit.tests.', [])
|
||||||
|
|
||||||
|
normal = Record.new(zone_normal, 'www', {
|
||||||
|
'ttl': 60,
|
||||||
|
'type': 'A',
|
||||||
|
'value': '9.9.9.9',
|
||||||
|
})
|
||||||
|
zone_normal.add_record(normal)
|
||||||
|
|
||||||
|
ignored = Record.new(zone_ignored, 'www', {
|
||||||
|
'octodns': {
|
||||||
|
'ignored': True
|
||||||
|
},
|
||||||
|
'ttl': 60,
|
||||||
|
'type': 'A',
|
||||||
|
'value': '9.9.9.9',
|
||||||
|
})
|
||||||
|
zone_ignored.add_record(ignored)
|
||||||
|
|
||||||
|
provider = SimpleProvider()
|
||||||
|
|
||||||
|
self.assertFalse(zone_normal.changes(zone_ignored, provider))
|
||||||
|
self.assertTrue(zone_normal.changes(zone_missing, provider))
|
||||||
|
|
||||||
|
self.assertFalse(zone_ignored.changes(zone_normal, provider))
|
||||||
|
self.assertFalse(zone_ignored.changes(zone_missing, provider))
|
||||||
|
|
||||||
|
self.assertTrue(zone_missing.changes(zone_normal, provider))
|
||||||
|
self.assertFalse(zone_missing.changes(zone_ignored, provider))
|
||||||
|
Reference in New Issue
Block a user