diff --git a/CHANGELOG.md b/CHANGELOG.md index d353bd8..fa7fb68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/octodns/processor/meta.py b/octodns/processor/meta.py index 0389388..4c71724 100644 --- a/octodns/processor/meta.py +++ b/octodns/processor/meta.py @@ -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 diff --git a/tests/test_octodns_processor_meta.py b/tests/test_octodns_processor_meta.py index c5af501..b99dd19 100644 --- a/tests/test_octodns_processor_meta.py +++ b/tests/test_octodns_processor_meta.py @@ -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)