Browse Source

Merge pull request #177 from trnsnt/ovh-show-zone-create

Implement populate exists for OvhProvider
pull/175/head
Ross McFarland 8 years ago
committed by GitHub
parent
commit
e87806db05
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 7 deletions
  1. +13
    -3
      octodns/provider/ovh.py
  2. +16
    -4
      tests/test_octodns_provider_ovh.py

+ 13
- 3
octodns/provider/ovh.py View File

@ -11,6 +11,7 @@ import logging
from collections import defaultdict from collections import defaultdict
import ovh import ovh
from ovh import ResourceNotFoundError
from octodns.record import Record from octodns.record import Record
from .base import BaseProvider from .base import BaseProvider
@ -33,6 +34,7 @@ class OvhProvider(BaseProvider):
""" """
SUPPORTS_GEO = False 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 # This variable is also used in populate method to filter which OVH record
# types are supported by octodns # types are supported by octodns
@ -57,7 +59,14 @@ class OvhProvider(BaseProvider):
self.log.debug('populate: name=%s, target=%s, lenient=%s', zone.name, self.log.debug('populate: name=%s, target=%s, lenient=%s', zone.name,
target, lenient) target, lenient)
zone_name = zone.name[:-1] 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)) values = defaultdict(lambda: defaultdict(list))
for record in records: for record in records:
@ -75,8 +84,9 @@ class OvhProvider(BaseProvider):
source=self, lenient=lenient) source=self, lenient=lenient)
zone.add_record(record) 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): def _apply(self, plan):
desired = plan.desired desired = plan.desired


+ 16
- 4
tests/test_octodns_provider_ovh.py View File

@ -8,7 +8,7 @@ from __future__ import absolute_import, division, print_function, \
from unittest import TestCase from unittest import TestCase
from mock import patch, call from mock import patch, call
from ovh import APIError
from ovh import APIError, ResourceNotFoundError, InvalidCredential
from octodns.provider.ovh import OvhProvider from octodns.provider.ovh import OvhProvider
from octodns.record import Record from octodns.record import Record
@ -307,18 +307,30 @@ class TestOvhProvider(TestCase):
with patch.object(provider._client, 'get') as get_mock: with patch.object(provider._client, 'get') as get_mock:
zone = Zone('unit.tests.', []) zone = Zone('unit.tests.', [])
get_mock.side_effect = APIError('boom')
get_mock.side_effect = ResourceNotFoundError('boom')
with self.assertRaises(APIError) as ctx: with self.assertRaises(APIError) as ctx:
provider.populate(zone) provider.populate(zone)
self.assertEquals(get_mock.side_effect, ctx.exception) 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.', []) zone = Zone('unit.tests.', [])
get_returns = [[record['id'] for record in self.api_record]] get_returns = [[record['id'] for record in self.api_record]]
get_returns += self.api_record get_returns += self.api_record
get_mock.side_effect = get_returns get_mock.side_effect = get_returns
provider.populate(zone)
exists = provider.populate(zone)
self.assertEquals(self.expected, zone.records) self.assertEquals(self.expected, zone.records)
self.assertTrue(exists)
@patch('ovh.Client') @patch('ovh.Client')
def test_is_valid_dkim(self, client_mock): def test_is_valid_dkim(self, client_mock):


Loading…
Cancel
Save