diff --git a/octodns/manager.py b/octodns/manager.py index 0517c6e..d312fad 100644 --- a/octodns/manager.py +++ b/octodns/manager.py @@ -230,7 +230,12 @@ class Manager(object): zone = Zone(zone_name, sub_zones=self.configured_sub_zones(zone_name)) - if not desired: + if desired: + for _, records in desired._records.items(): + for record in records: + zone.add_record(record.copy(zone=zone), lenient=lenient) + + else: for source in sources: try: source.populate(zone, lenient=lenient) @@ -241,14 +246,6 @@ class Manager(object): 'param', source.__class__.__name__) source.populate(zone) - else: - for _, records in desired._records.items(): - for record in records: - d = record.data - d['type'] = record._type - r = Record.new(zone, record.name, d, source=record.source) - zone.add_record(r, lenient=lenient) - self.log.debug('sync: planning, zone=%s', zone_name) plans = [] diff --git a/octodns/record/__init__.py b/octodns/record/__init__.py index 08ec2ee..6c4e79f 100644 --- a/octodns/record/__init__.py +++ b/octodns/record/__init__.py @@ -151,6 +151,7 @@ class Record(EqualityTupleMixin): # force everything lower-case just to be safe self.name = text_type(name).lower() if name else name self.source = source + self._raw_data = data self.ttl = int(data['ttl']) self._octodns = data.get('octodns', {}) @@ -219,6 +220,14 @@ class Record(EqualityTupleMixin): if self.ttl != other.ttl: return Update(self, other) + def copy(self, zone=None): + return Record( + zone if zone else self.zone, + self.name, + self._raw_data, + self.source + ) + # NOTE: we're using __hash__ and ordering methods that consider Records # equivalent if they have the same name & _type. Values are ignored. This # is useful when computing diffs/changes.