mirror of
https://github.com/github/octodns.git
synced 2024-05-11 05:55:00 +00:00
Updates need to be able to create records as well as delete them.
This commit is contained in:
@@ -371,8 +371,11 @@ class RackspaceProvider(BaseProvider):
|
|||||||
return [record.value]
|
return [record.value]
|
||||||
|
|
||||||
def _mod_Create(self, change):
|
def _mod_Create(self, change):
|
||||||
|
return self._create_given_change_values(change, self._get_values(change.new))
|
||||||
|
|
||||||
|
def _create_given_change_values(self, change, values):
|
||||||
out = []
|
out = []
|
||||||
for value in self._get_values(change.new):
|
for value in values:
|
||||||
transformer = getattr(self, "_record_for_{}".format(change.new._type))
|
transformer = getattr(self, "_record_for_{}".format(change.new._type))
|
||||||
out.append(transformer(change.new, value))
|
out.append(transformer(change.new, value))
|
||||||
return out
|
return out
|
||||||
@@ -386,8 +389,14 @@ class RackspaceProvider(BaseProvider):
|
|||||||
deleted_values = set(existing_values) - set(new_values)
|
deleted_values = set(existing_values) - set(new_values)
|
||||||
delete_out = self._delete_given_change_values(change, deleted_values)
|
delete_out = self._delete_given_change_values(change, deleted_values)
|
||||||
|
|
||||||
|
# An increase in number of values in an update record needs
|
||||||
|
# to get upgraded into a Create change for the added values.
|
||||||
|
create_values = set(new_values) - set(existing_values)
|
||||||
|
create_out = self._create_given_change_values(change, create_values)
|
||||||
|
|
||||||
update_out = []
|
update_out = []
|
||||||
for value in new_values:
|
update_values = set(new_values).intersection(set(existing_values))
|
||||||
|
for value in update_values:
|
||||||
transformer = getattr(self, "_record_for_{}".format(change.new._type))
|
transformer = getattr(self, "_record_for_{}".format(change.new._type))
|
||||||
prior_rs_record = transformer(change.existing, value)
|
prior_rs_record = transformer(change.existing, value)
|
||||||
prior_key = self._key_for_record(prior_rs_record)
|
prior_key = self._key_for_record(prior_rs_record)
|
||||||
@@ -398,7 +407,7 @@ class RackspaceProvider(BaseProvider):
|
|||||||
update_out.append(next_rs_record)
|
update_out.append(next_rs_record)
|
||||||
self._id_map[next_key] = self._id_map[prior_key]
|
self._id_map[next_key] = self._id_map[prior_key]
|
||||||
del self._id_map[prior_key]
|
del self._id_map[prior_key]
|
||||||
return update_out, delete_out
|
return create_out, update_out, delete_out
|
||||||
|
|
||||||
def _mod_Delete(self, change):
|
def _mod_Delete(self, change):
|
||||||
return self._delete_given_change_values(change, self._get_values(change.existing))
|
return self._delete_given_change_values(change, self._get_values(change.existing))
|
||||||
@@ -427,7 +436,8 @@ class RackspaceProvider(BaseProvider):
|
|||||||
if change.__class__.__name__ == 'Create':
|
if change.__class__.__name__ == 'Create':
|
||||||
creates += self._mod_Create(change)
|
creates += self._mod_Create(change)
|
||||||
elif change.__class__.__name__ == 'Update':
|
elif change.__class__.__name__ == 'Update':
|
||||||
add_updates, add_deletes = self._mod_Update(change)
|
add_creates, add_updates, add_deletes = self._mod_Update(change)
|
||||||
|
creates += add_creates
|
||||||
updates += add_updates
|
updates += add_updates
|
||||||
deletes += add_deletes
|
deletes += add_deletes
|
||||||
elif change.__class__.__name__ == 'Delete':
|
elif change.__class__.__name__ == 'Delete':
|
||||||
|
@@ -392,7 +392,6 @@ class TestRackspaceProvider(TestCase):
|
|||||||
ExpectedUpdates = None
|
ExpectedUpdates = None
|
||||||
return self._test_apply_with_data(TestData)
|
return self._test_apply_with_data(TestData)
|
||||||
|
|
||||||
|
|
||||||
def test_apply_multiple_additions_exploding(self):
|
def test_apply_multiple_additions_exploding(self):
|
||||||
class TestData(object):
|
class TestData(object):
|
||||||
OtherRecords = [
|
OtherRecords = [
|
||||||
@@ -674,6 +673,41 @@ class TestRackspaceProvider(TestCase):
|
|||||||
}
|
}
|
||||||
return self._test_apply_with_data(TestData)
|
return self._test_apply_with_data(TestData)
|
||||||
|
|
||||||
|
def test_apply_update_TXT(self):
|
||||||
|
class TestData(object):
|
||||||
|
OtherRecords = [
|
||||||
|
{
|
||||||
|
"subdomain": '',
|
||||||
|
"data": {
|
||||||
|
'type': 'TXT',
|
||||||
|
'ttl': 300,
|
||||||
|
'value': 'othervalue'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
OwnRecords = {
|
||||||
|
"totalEntries": 1,
|
||||||
|
"records": [{
|
||||||
|
"name": "unit.tests",
|
||||||
|
"id": "TXT-111111",
|
||||||
|
"type": "TXT",
|
||||||
|
"data": "somevalue",
|
||||||
|
"ttl": 300
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
ExpectChanges = True
|
||||||
|
ExpectedAdditions = {
|
||||||
|
"records": [{
|
||||||
|
"name": "unit.tests",
|
||||||
|
"type": "TXT",
|
||||||
|
"data": "othervalue",
|
||||||
|
"ttl": 300
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
ExpectedDeletions = 'id=TXT-111111'
|
||||||
|
ExpectedUpdates = None
|
||||||
|
return self._test_apply_with_data(TestData)
|
||||||
|
|
||||||
def test_apply_multiple_updates(self):
|
def test_apply_multiple_updates(self):
|
||||||
class TestData(object):
|
class TestData(object):
|
||||||
OtherRecords = [
|
OtherRecords = [
|
||||||
@@ -712,16 +746,16 @@ class TestRackspaceProvider(TestCase):
|
|||||||
ExpectedAdditions = None
|
ExpectedAdditions = None
|
||||||
ExpectedDeletions = None
|
ExpectedDeletions = None
|
||||||
ExpectedUpdates = {
|
ExpectedUpdates = {
|
||||||
"records": [{
|
"records": [ {
|
||||||
"name": "unit.tests",
|
|
||||||
"id": "A-111111",
|
|
||||||
"data": "1.2.3.4",
|
|
||||||
"ttl": 3600
|
|
||||||
}, {
|
|
||||||
"name": "unit.tests",
|
"name": "unit.tests",
|
||||||
"id": "A-222222",
|
"id": "A-222222",
|
||||||
"data": "1.2.3.5",
|
"data": "1.2.3.5",
|
||||||
"ttl": 3600
|
"ttl": 3600
|
||||||
|
}, {
|
||||||
|
"name": "unit.tests",
|
||||||
|
"id": "A-111111",
|
||||||
|
"data": "1.2.3.4",
|
||||||
|
"ttl": 3600
|
||||||
}, {
|
}, {
|
||||||
"name": "unit.tests",
|
"name": "unit.tests",
|
||||||
"id": "A-333333",
|
"id": "A-333333",
|
||||||
|
Reference in New Issue
Block a user