Browse Source

Handle _ValueMixin record types as well as we handle _ValuesMixin records.

pull/165/head
Terrence Cole 9 years ago
parent
commit
c185d28f14
2 changed files with 32 additions and 4 deletions
  1. +13
    -4
      octodns/provider/rackspace.py
  2. +19
    -0
      tests/test_octodns_provider_rackspace.py

+ 13
- 4
octodns/provider/rackspace.py View File

@ -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 = []


+ 19
- 0
tests/test_octodns_provider_rackspace.py View File

@ -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 = [


Loading…
Cancel
Save