diff --git a/octodns/provider/yaml.py b/octodns/provider/yaml.py index b5fd3d7..bd36e20 100644 --- a/octodns/provider/yaml.py +++ b/octodns/provider/yaml.py @@ -379,17 +379,19 @@ class YamlProvider(BaseProvider): return False def _apply(self, plan): - desired = plan.desired + # make a copy of existing we can muck with + copy = plan.existing.copy() changes = plan.changes self.log.debug( - '_apply: zone=%s, len(changes)=%d', - desired.decoded_name, - len(changes), + '_apply: zone=%s, len(changes)=%d', copy.decoded_name, len(changes) ) - # Since we don't have existing we'll only see creates - records = [c.new for c in changes] - # Order things alphabetically (records sort that way - records.sort() + + # apply our pending changes to that copy + copy.apply(changes) + + # we now have the records we need to write out, order things + # alphabetically (records sort that way + records = sorted(copy.records) data = defaultdict(list) for record in records: d = record.data @@ -411,7 +413,7 @@ class YamlProvider(BaseProvider): if self.split_extension: # we're going to do split files - decoded_name = desired.decoded_name[:-1] + decoded_name = copy.decoded_name[:-1] directory = join( self.directory, f'{decoded_name}{self.split_extension}' ) @@ -443,7 +445,7 @@ class YamlProvider(BaseProvider): else: # single large file - filename = join(self.directory, f'{desired.decoded_name}yaml') + filename = join(self.directory, f'{copy.decoded_name}yaml') self.log.debug('_apply: writing filename=%s', filename) with open(filename, 'w') as fh: safe_dump(