mirror of
https://github.com/github/octodns.git
synced 2024-05-11 05:55:00 +00:00
Handle _ValueMixin record types as well as we handle _ValuesMixin records.
This commit is contained in:
@@ -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 = []
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
Reference in New Issue
Block a user