pdns4 backend: check if zone exists before attempting delete
This should prevent us from obsessing over zones that are in the
designate DB but not in the pdns backend due to races/incomplete
transactions/etc.
Bug: 1880230
Change-Id: I00ae6227edf21007c39a7d55221898ae5c10dda2
(cherry picked from commit 5acba9443e
)
This commit is contained in:
parent
4fc04ee416
commit
0dd12f3746
|
@ -106,10 +106,17 @@ class PDNS4Backend(base.Backend):
|
||||||
def delete_zone(self, context, zone):
|
def delete_zone(self, context, zone):
|
||||||
"""Delete a DNS zone"""
|
"""Delete a DNS zone"""
|
||||||
|
|
||||||
try:
|
# First verify that the zone exists -- If it's not present
|
||||||
requests.delete(
|
# in the backend then we can just declare victory.
|
||||||
self._build_url(zone.name),
|
if self._check_zone_exists(zone):
|
||||||
headers=self.headers
|
try:
|
||||||
).raise_for_status()
|
requests.delete(
|
||||||
except requests.HTTPError as e:
|
self._build_url(zone.name),
|
||||||
raise exceptions.Backend(e)
|
headers=self.headers
|
||||||
|
).raise_for_status()
|
||||||
|
except requests.HTTPError as e:
|
||||||
|
raise exceptions.Backend(e)
|
||||||
|
else:
|
||||||
|
LOG.warning("Trying to delete zone %s but that zone is not "
|
||||||
|
"present in the pdns backend. Assuming success.",
|
||||||
|
zone)
|
||||||
|
|
|
@ -285,6 +285,28 @@ class PDNS4BackendTestCase(designate.tests.TestCase):
|
||||||
req_mock.delete(
|
req_mock.delete(
|
||||||
'%s/localhost/zones/example.com.' % self.base_address,
|
'%s/localhost/zones/example.com.' % self.base_address,
|
||||||
)
|
)
|
||||||
|
req_mock.get(
|
||||||
|
'%s/localhost/zones/%s' % (self.base_address, self.zone.name),
|
||||||
|
status_code=200,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.backend.delete_zone(self.context, self.zone)
|
||||||
|
|
||||||
|
self.assertEqual(
|
||||||
|
req_mock.last_request.headers.get('X-API-Key'), 'api_key'
|
||||||
|
)
|
||||||
|
|
||||||
|
@requests_mock.mock()
|
||||||
|
def test_delete_zone_missing(self, req_mock):
|
||||||
|
req_mock.delete(
|
||||||
|
'%s/localhost/zones/example.com.' % self.base_address,
|
||||||
|
)
|
||||||
|
|
||||||
|
# pdns returns 422 if asked about a zone that doesn't exist.
|
||||||
|
req_mock.get(
|
||||||
|
'%s/localhost/zones/%s' % (self.base_address, self.zone.name),
|
||||||
|
status_code=422,
|
||||||
|
)
|
||||||
|
|
||||||
self.backend.delete_zone(self.context, self.zone)
|
self.backend.delete_zone(self.context, self.zone)
|
||||||
|
|
||||||
|
@ -298,6 +320,10 @@ class PDNS4BackendTestCase(designate.tests.TestCase):
|
||||||
'%s/localhost/zones/example.com.' % self.base_address,
|
'%s/localhost/zones/example.com.' % self.base_address,
|
||||||
status_code=500,
|
status_code=500,
|
||||||
)
|
)
|
||||||
|
req_mock.get(
|
||||||
|
'%s/localhost/zones/%s' % (self.base_address, self.zone.name),
|
||||||
|
status_code=200,
|
||||||
|
)
|
||||||
|
|
||||||
self.assertRaisesRegexp(
|
self.assertRaisesRegexp(
|
||||||
exceptions.Backend,
|
exceptions.Backend,
|
||||||
|
|
Loading…
Reference in New Issue