From c185d28f146d04fffcd360abd5110982901affb5 Mon Sep 17 00:00:00 2001 From: Terrence Cole Date: Wed, 26 Jul 2017 12:49:30 -0700 Subject: [PATCH] Handle _ValueMixin record types as well as we handle _ValuesMixin records. --- octodns/provider/rackspace.py | 17 +++++++++++++---- tests/test_octodns_provider_rackspace.py | 19 +++++++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/octodns/provider/rackspace.py b/octodns/provider/rackspace.py index bf0e248..6af51fa 100644 --- a/octodns/provider/rackspace.py +++ b/octodns/provider/rackspace.py @@ -364,21 +364,30 @@ class RackspaceProvider(BaseProvider): # 'disabled': False # } for v in record.values] + def _get_values(self, record): + try: + return record.values + except AttributeError: + return [record.value] + def _mod_Create(self, change): out = [] - for value in change.new.values: + for value in self._get_values(change.new): transformer = getattr(self, "_record_for_{}".format(change.new._type)) out.append(transformer(change.new, value)) return out def _mod_Update(self, change): + existing_values = self._get_values(change.existing) + new_values = self._get_values(change.new) + # A reduction in number of values in an update record needs # to get upgraded into a Delete change for the removed values. - deleted_values = set(change.existing.values) - set(change.new.values) + deleted_values = set(existing_values) - set(new_values) delete_out = self._delete_given_change_values(change, deleted_values) update_out = [] - for value in change.new.values: + for value in new_values: transformer = getattr(self, "_record_for_{}".format(change.new._type)) prior_rs_record = transformer(change.existing, value) prior_key = self._key_for_record(prior_rs_record) @@ -392,7 +401,7 @@ class RackspaceProvider(BaseProvider): return update_out, delete_out def _mod_Delete(self, change): - return self._delete_given_change_values(change, change.existing.values) + return self._delete_given_change_values(change, self._get_values(change.existing)) def _delete_given_change_values(self, change, values): out = [] diff --git a/tests/test_octodns_provider_rackspace.py b/tests/test_octodns_provider_rackspace.py index d579faa..2862871 100644 --- a/tests/test_octodns_provider_rackspace.py +++ b/tests/test_octodns_provider_rackspace.py @@ -569,6 +569,25 @@ class TestRackspaceProvider(TestCase): ExpectedUpdates = None return self._test_apply_with_data(TestData) + def test_apply_delete_cname(self): + class TestData(object): + OtherRecords = [] + OwnRecords = { + "totalEntries": 3, + "records": [{ + "name": "foo.unit.tests", + "id": "CNAME-111111", + "type": "CNAME", + "data": "a.example.com", + "ttl": 300 + }] + } + ExpectChanges = True + ExpectedAdditions = None + ExpectedDeletions = "id=CNAME-111111" + ExpectedUpdates = None + return self._test_apply_with_data(TestData) + def test_apply_single_update(self): class TestData(object): OtherRecords = [