Browse Source

Delete first and create last to avoid having create coalesce into an update unexpectedly.

pull/165/head
Terrence Cole 8 years ago
parent
commit
b1ef8a8f8d
2 changed files with 44 additions and 7 deletions
  1. +7
    -7
      octodns/provider/rackspace.py
  2. +37
    -0
      tests/test_octodns_provider_rackspace.py

+ 7
- 7
octodns/provider/rackspace.py View File

@ -155,7 +155,7 @@ class RackspaceProvider(BaseProvider):
def _key_for_record(cls, rs_record): def _key_for_record(cls, rs_record):
return cls._as_unicode(rs_record['type'], 'ascii'),\ return cls._as_unicode(rs_record['type'], 'ascii'),\
cls._as_unicode(rs_record['name'], 'utf-8'),\ cls._as_unicode(rs_record['name'], 'utf-8'),\
cls._as_unicode(rs_record['data'], 'utf-8'),\
cls._as_unicode(rs_record['data'], 'utf-8')
def _data_for_multiple(self, rrset): def _data_for_multiple(self, rrset):
# TODO: geo not supported # TODO: geo not supported
@ -451,15 +451,15 @@ class RackspaceProvider(BaseProvider):
elif change.__class__.__name__ == 'Delete': elif change.__class__.__name__ == 'Delete':
deletes += self._mod_Delete(change) deletes += self._mod_Delete(change)
if creates:
data = {"records": sorted(creates, key=lambda v: v['type'] + v['name'] + v.get('data', ''))}
self._post('domains/{}/records'.format(domain_id), data=data)
if deletes:
params = "&".join(sorted(deletes))
self._delete('domains/{}/records?{}'.format(domain_id, params))
if updates: if updates:
data = {"records": sorted(updates, key=lambda v: v['name'])} data = {"records": sorted(updates, key=lambda v: v['name'])}
self._put('domains/{}/records'.format(domain_id), data=data) self._put('domains/{}/records'.format(domain_id), data=data)
if deletes:
params = "&".join(sorted(deletes))
self._delete('domains/{}/records?{}'.format(domain_id, params))
if creates:
data = {"records": sorted(creates, key=lambda v: v['type'] + v['name'] + v.get('data', ''))}
self._post('domains/{}/records'.format(domain_id), data=data)

+ 37
- 0
tests/test_octodns_provider_rackspace.py View File

@ -708,6 +708,43 @@ class TestRackspaceProvider(TestCase):
ExpectedUpdates = None ExpectedUpdates = None
return self._test_apply_with_data(TestData) return self._test_apply_with_data(TestData)
def test_apply_update_MX(self):
class TestData(object):
OtherRecords = [
{
"subdomain": '',
"data": {
'type': 'MX',
'ttl': 300,
'value': {u'priority': 50, u'value': 'mx.test.com.'}
}
}
]
OwnRecords = {
"totalEntries": 1,
"records": [{
"name": "unit.tests",
"id": "MX-111111",
"type": "MX",
"priority": 20,
"data": "mx.test.com",
"ttl": 300
}]
}
ExpectChanges = True
ExpectedAdditions = {
"records": [{
"name": "unit.tests",
"type": "MX",
"priority": 50,
"data": "mx.test.com",
"ttl": 300
}]
}
ExpectedDeletions = 'id=MX-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 = [


Loading…
Cancel
Save