Browse Source

Merge pull request #1111 from octodns/fix-meta-target

Fix MetaProcessor.include_target
pull/1117/head
Ross McFarland 2 years ago
committed by GitHub
parent
commit
78f6464418
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 17 deletions
  1. +3
    -1
      CHANGELOG.md
  2. +5
    -5
      octodns/processor/meta.py
  3. +22
    -11
      tests/test_octodns_processor_meta.py

+ 3
- 1
CHANGELOG.md View File

@ -1,9 +1,11 @@
## v1.?.0 - 2023-??-?? -
* Record.lenient property added similar to other common/standard _octodns data
* Fix bug with Record.copy when values is an empty list []
* Processor.process_source_and_target_zones added to support modifying both the
desired and/or existing zones just prior to computing changes.
* Fix bug with Record.copy when values is an empty list []
* Fix an issue in MetaProcessor/Manager.include_meta where include_provider
wasn't correctly taking effect
## v1.3.0 - 2023-11-14 - New and improved processors


+ 5
- 5
octodns/processor/meta.py View File

@ -111,25 +111,25 @@ class MetaProcessor(BaseProcessor):
self.record_name,
{'ttl': self.ttl, 'type': 'TXT', 'values': self.values},
# we may be passing in empty values here to be filled out later in
# process_target_zone
# process_source_and_target_zones
lenient=True,
)
desired.add_record(meta)
return desired
def process_target_zone(self, existing, target):
def process_source_and_target_zones(self, desired, existing, target):
if self.include_provider:
# look for the meta record
for record in sorted(existing.records):
for record in sorted(desired.records):
if record.name == self.record_name and record._type == 'TXT':
# we've found it, make a copy we can modify
record = record.copy()
record.values = record.values + [f'provider={target.id}']
record.values.sort()
existing.add_record(record, replace=True)
desired.add_record(record, replace=True)
break
return existing
return desired, existing
def _up_to_date(self, change):
# existing state, if there is one


+ 22
- 11
tests/test_octodns_processor_meta.py View File

@ -124,12 +124,15 @@ class TestMetaProcessor(TestCase):
self.assertEqual(self.meta_up_to_date, record)
self.assertEqual(['time=the-time'], record.values)
def test_process_target_zone(self):
def test_process_source_and_target_zones(self):
proc = MetaProcessor('test')
# with defaults, not enabled
zone = self.zone.copy()
processed = proc.process_target_zone(zone, None)
existing = self.zone.copy()
desired = self.zone.copy()
processed, _ = proc.process_source_and_target_zones(
existing, desired, None
)
self.assertFalse(processed.records)
# enable provider
@ -140,27 +143,35 @@ class TestMetaProcessor(TestCase):
# enabled provider, no meta record, shouldn't happen, but also shouldn't
# blow up
processed = proc.process_target_zone(zone, DummyTarget())
processed, _ = proc.process_source_and_target_zones(
existing, desired, DummyTarget()
)
self.assertFalse(processed.records)
# enabled provider, should now look for and update the provider value,
# - only record so nothing to skip over
# - time value in there to be skipped over
proc = MetaProcessor('test', include_provider=True)
zone = self.zone.copy()
existing = self.zone.copy()
desired = self.zone.copy()
meta = self.meta_up_to_date.copy()
zone.add_record(meta)
processed = proc.process_target_zone(zone, DummyTarget())
existing.add_record(meta)
processed, _ = proc.process_source_and_target_zones(
existing, desired, DummyTarget()
)
record = next(iter(processed.records))
self.assertEqual(['provider=dummy', 'time=xxx'], record.values)
# add another unrelated record that needs to be skipped
proc = MetaProcessor('test', include_provider=True)
zone = self.zone.copy()
existing = self.zone.copy()
desired = self.zone.copy()
meta = self.meta_up_to_date.copy()
zone.add_record(meta)
zone.add_record(self.not_meta)
processed = proc.process_target_zone(zone, DummyTarget())
existing.add_record(meta)
existing.add_record(self.not_meta)
processed, _ = proc.process_source_and_target_zones(
existing, desired, DummyTarget()
)
self.assertEqual(2, len(processed.records))
record = [r for r in processed.records if r.name == proc.record_name][0]
self.assertEqual(['provider=dummy', 'time=xxx'], record.values)


Loading…
Cancel
Save