mirror of
https://github.com/github/octodns.git
synced 2024-05-11 05:55:00 +00:00
Implement populate exists for OvhProvider
This commit is contained in:
@@ -11,6 +11,7 @@ import logging
|
||||
from collections import defaultdict
|
||||
|
||||
import ovh
|
||||
from ovh import ResourceNotFoundError
|
||||
|
||||
from octodns.record import Record
|
||||
from .base import BaseProvider
|
||||
@@ -33,6 +34,7 @@ class OvhProvider(BaseProvider):
|
||||
"""
|
||||
|
||||
SUPPORTS_GEO = False
|
||||
ZONE_NOT_FOUND_MESSAGE = 'This service does not exist'
|
||||
|
||||
# This variable is also used in populate method to filter which OVH record
|
||||
# types are supported by octodns
|
||||
@@ -57,7 +59,14 @@ class OvhProvider(BaseProvider):
|
||||
self.log.debug('populate: name=%s, target=%s, lenient=%s', zone.name,
|
||||
target, lenient)
|
||||
zone_name = zone.name[:-1]
|
||||
records = self.get_records(zone_name=zone_name)
|
||||
try:
|
||||
records = self.get_records(zone_name=zone_name)
|
||||
exists = True
|
||||
except ResourceNotFoundError as e:
|
||||
if e.message != self.ZONE_NOT_FOUND_MESSAGE:
|
||||
raise
|
||||
exists = False
|
||||
records = []
|
||||
|
||||
values = defaultdict(lambda: defaultdict(list))
|
||||
for record in records:
|
||||
@@ -75,8 +84,9 @@ class OvhProvider(BaseProvider):
|
||||
source=self, lenient=lenient)
|
||||
zone.add_record(record)
|
||||
|
||||
self.log.info('populate: found %s records',
|
||||
len(zone.records) - before)
|
||||
self.log.info('populate: found %s records, exists=%s',
|
||||
len(zone.records) - before, exists)
|
||||
return exists
|
||||
|
||||
def _apply(self, plan):
|
||||
desired = plan.desired
|
||||
|
@@ -8,7 +8,7 @@ from __future__ import absolute_import, division, print_function, \
|
||||
from unittest import TestCase
|
||||
|
||||
from mock import patch, call
|
||||
from ovh import APIError
|
||||
from ovh import APIError, ResourceNotFoundError, InvalidCredential
|
||||
|
||||
from octodns.provider.ovh import OvhProvider
|
||||
from octodns.record import Record
|
||||
@@ -307,18 +307,30 @@ class TestOvhProvider(TestCase):
|
||||
|
||||
with patch.object(provider._client, 'get') as get_mock:
|
||||
zone = Zone('unit.tests.', [])
|
||||
get_mock.side_effect = APIError('boom')
|
||||
get_mock.side_effect = ResourceNotFoundError('boom')
|
||||
with self.assertRaises(APIError) as ctx:
|
||||
provider.populate(zone)
|
||||
self.assertEquals(get_mock.side_effect, ctx.exception)
|
||||
|
||||
with patch.object(provider._client, 'get') as get_mock:
|
||||
get_mock.side_effect = InvalidCredential('boom')
|
||||
with self.assertRaises(APIError) as ctx:
|
||||
provider.populate(zone)
|
||||
self.assertEquals(get_mock.side_effect, ctx.exception)
|
||||
|
||||
zone = Zone('unit.tests.', [])
|
||||
get_mock.side_effect = ResourceNotFoundError('This service does '
|
||||
'not exist')
|
||||
exists = provider.populate(zone)
|
||||
self.assertEquals(set(), zone.records)
|
||||
self.assertFalse(exists)
|
||||
|
||||
zone = Zone('unit.tests.', [])
|
||||
get_returns = [[record['id'] for record in self.api_record]]
|
||||
get_returns += self.api_record
|
||||
get_mock.side_effect = get_returns
|
||||
provider.populate(zone)
|
||||
exists = provider.populate(zone)
|
||||
self.assertEquals(self.expected, zone.records)
|
||||
self.assertTrue(exists)
|
||||
|
||||
@patch('ovh.Client')
|
||||
def test_is_valid_dkim(self, client_mock):
|
||||
|
Reference in New Issue
Block a user