Browse Source

Add retry to ns1 provider

pull/81/head
Ross McFarland 9 years ago
parent
commit
0fb88a959a
No known key found for this signature in database GPG Key ID: 61C10C4FC8FE4A89
2 changed files with 26 additions and 5 deletions
  1. +25
    -4
      octodns/provider/ns1.py
  2. +1
    -1
      requirements.txt

+ 25
- 4
octodns/provider/ns1.py View File

@ -7,7 +7,8 @@ from __future__ import absolute_import, division, print_function, \
from logging import getLogger from logging import getLogger
from nsone import NSONE from nsone import NSONE
from nsone.rest.errors import ResourceException
from nsone.rest.errors import RateLimitException, ResourceException
from time import sleep
from ..record import Record from ..record import Record
from .base import BaseProvider from .base import BaseProvider
@ -25,6 +26,7 @@ class Ns1Provider(BaseProvider):
SUPPORTS = set(('A', 'AAAA', 'ALIAS', 'CNAME', 'MX', 'NAPTR', 'NS', 'PTR', SUPPORTS = set(('A', 'AAAA', 'ALIAS', 'CNAME', 'MX', 'NAPTR', 'NS', 'PTR',
'SPF', 'SRV', 'TXT')) 'SPF', 'SRV', 'TXT'))
RATE_LIMIT_DELAY = 1
ZONE_NOT_FOUND_MESSAGE = 'server error: zone not found' ZONE_NOT_FOUND_MESSAGE = 'server error: zone not found'
def __init__(self, id, api_key, *args, **kwargs): def __init__(self, id, api_key, *args, **kwargs):
@ -171,7 +173,14 @@ class Ns1Provider(BaseProvider):
name = self._get_name(new) name = self._get_name(new)
_type = new._type _type = new._type
params = getattr(self, '_params_for_{}'.format(_type))(new) params = getattr(self, '_params_for_{}'.format(_type))(new)
getattr(nsone_zone, 'add_{}'.format(_type))(name, **params)
meth = getattr(nsone_zone, 'add_{}'.format(_type))
try:
meth(name, **params)
except RateLimitException:
self.log.warn('_apply_Create: rate limit encountered, pausing '
'and trying again')
sleep(self.RATE_LIMIT_DELAY)
meth(name, **params)
def _apply_Update(self, nsone_zone, change): def _apply_Update(self, nsone_zone, change):
existing = change.existing existing = change.existing
@ -180,14 +189,26 @@ class Ns1Provider(BaseProvider):
record = nsone_zone.loadRecord(name, _type) record = nsone_zone.loadRecord(name, _type)
new = change.new new = change.new
params = getattr(self, '_params_for_{}'.format(_type))(new) params = getattr(self, '_params_for_{}'.format(_type))(new)
record.update(**params)
try:
record.update(**params)
except RateLimitException:
self.log.warn('_apply_Update: rate limit encountered, pausing '
'and trying again')
sleep(self.RATE_LIMIT_DELAY)
record.update(**params)
def _apply_Delete(self, nsone_zone, change): def _apply_Delete(self, nsone_zone, change):
existing = change.existing existing = change.existing
name = self._get_name(existing) name = self._get_name(existing)
_type = existing._type _type = existing._type
record = nsone_zone.loadRecord(name, _type) record = nsone_zone.loadRecord(name, _type)
record.delete()
try:
record.delete()
except RateLimitException:
self.log.warn('_apply_Delete: rate limit encountered, pausing '
'and trying again')
sleep(self.RATE_LIMIT_DELAY)
record.delete()
def _apply(self, plan): def _apply(self, plan):
desired = plan.desired desired = plan.desired


+ 1
- 1
requirements.txt View File

@ -11,7 +11,7 @@ incf.countryutils==1.0
ipaddress==1.0.18 ipaddress==1.0.18
jmespath==0.9.0 jmespath==0.9.0
natsort==5.0.3 natsort==5.0.3
nsone==0.9.10
nsone==0.9.14
python-dateutil==2.6.0 python-dateutil==2.6.0
requests==2.13.0 requests==2.13.0
s3transfer==0.1.10 s3transfer==0.1.10


Loading…
Cancel
Save