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

This commit is contained in:
Terrence Cole
2017-07-26 12:49:30 -07:00
parent a9f3384d11
commit c185d28f14
2 changed files with 32 additions and 4 deletions
+13 -4
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
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 = [