|
|
@ -643,40 +643,49 @@ class Route53Provider(BaseProvider): |
|
|
self._r53_rrsets = {} |
|
|
self._r53_rrsets = {} |
|
|
self._health_checks = None |
|
|
self._health_checks = None |
|
|
|
|
|
|
|
|
@property |
|
|
|
|
|
def r53_zones(self): |
|
|
|
|
|
if self._r53_zones is None: |
|
|
|
|
|
self.log.debug('r53_zones: loading') |
|
|
|
|
|
zones = {} |
|
|
|
|
|
more = True |
|
|
|
|
|
start = {} |
|
|
|
|
|
while more: |
|
|
|
|
|
resp = self._conn.list_hosted_zones(**start) |
|
|
|
|
|
for z in resp['HostedZones']: |
|
|
|
|
|
zones[z['Name']] = z['Id'] |
|
|
|
|
|
more = resp['IsTruncated'] |
|
|
|
|
|
start['Marker'] = resp.get('NextMarker', None) |
|
|
|
|
|
|
|
|
|
|
|
self._r53_zones = zones |
|
|
|
|
|
|
|
|
def _get_zone_id_by_name(self, name): |
|
|
|
|
|
# attempt to get zone by name |
|
|
|
|
|
# limited to one as this should be unique |
|
|
|
|
|
id = None |
|
|
|
|
|
resp = self._conn.list_hosted_zones_by_name( |
|
|
|
|
|
DNSName=name, MaxItems="1" |
|
|
|
|
|
) |
|
|
|
|
|
if len(resp['HostedZones']) != 0: |
|
|
|
|
|
# if there is a response that starts with the name |
|
|
|
|
|
if resp['HostedZones'][0]['Name'].startswith(name): |
|
|
|
|
|
id = resp['HostedZones'][0]['Id'] |
|
|
|
|
|
self.log.debug('get_zones_by_name: id=%s', id) |
|
|
|
|
|
return id |
|
|
|
|
|
|
|
|
return self._r53_zones |
|
|
|
|
|
|
|
|
def update_r53_zones(self, name): |
|
|
|
|
|
if self._r53_zones is None: |
|
|
|
|
|
if self.get_zones_by_name: |
|
|
|
|
|
id = self._get_zone_id_by_name(name) |
|
|
|
|
|
zones = {} |
|
|
|
|
|
zones[name] = id |
|
|
|
|
|
self._r53_zones = zones |
|
|
|
|
|
else: |
|
|
|
|
|
self.log.debug('r53_zones: loading') |
|
|
|
|
|
zones = {} |
|
|
|
|
|
more = True |
|
|
|
|
|
start = {} |
|
|
|
|
|
while more: |
|
|
|
|
|
resp = self._conn.list_hosted_zones(**start) |
|
|
|
|
|
for z in resp['HostedZones']: |
|
|
|
|
|
zones[z['Name']] = z['Id'] |
|
|
|
|
|
more = resp['IsTruncated'] |
|
|
|
|
|
start['Marker'] = resp.get('NextMarker', None) |
|
|
|
|
|
self._r53_zones = zones |
|
|
|
|
|
else: |
|
|
|
|
|
if name not in self._r53_zones and self.get_zones_by_name: |
|
|
|
|
|
id = self._get_zone_id_by_name(name) |
|
|
|
|
|
self._r53_zones[name] = id |
|
|
|
|
|
|
|
|
def _get_zone_id(self, name, create=False): |
|
|
def _get_zone_id(self, name, create=False): |
|
|
self.log.debug('_get_zone_id: name=%s', name) |
|
|
self.log.debug('_get_zone_id: name=%s', name) |
|
|
if self.get_zones_by_name: |
|
|
|
|
|
# attempt to get zone by name |
|
|
|
|
|
# limited to one as this should be unique |
|
|
|
|
|
response = self._conn.list_hosted_zones_by_name( |
|
|
|
|
|
DNSName=name, MaxItems="1" |
|
|
|
|
|
) |
|
|
|
|
|
if len(response['HostedZones']) != 0: |
|
|
|
|
|
# if there is a response that starts with the name |
|
|
|
|
|
if response['HostedZones'][0]['Name'].startswith(name): |
|
|
|
|
|
id = response['HostedZones'][0]['Id'] |
|
|
|
|
|
self.log.debug('get_zones_by_name: id=%s', id) |
|
|
|
|
|
return id |
|
|
|
|
|
elif name in self.r53_zones: |
|
|
|
|
|
id = self.r53_zones[name] |
|
|
|
|
|
|
|
|
self.update_r53_zones(name) |
|
|
|
|
|
if name in self._r53_zones: |
|
|
|
|
|
id = self._r53_zones[name] |
|
|
self.log.debug('_get_zone_id: id=%s', id) |
|
|
self.log.debug('_get_zone_id: id=%s', id) |
|
|
return id |
|
|
return id |
|
|
if create: |
|
|
if create: |
|
|
@ -691,7 +700,7 @@ class Route53Provider(BaseProvider): |
|
|
else: |
|
|
else: |
|
|
resp = self._conn.create_hosted_zone(Name=name, |
|
|
resp = self._conn.create_hosted_zone(Name=name, |
|
|
CallerReference=ref) |
|
|
CallerReference=ref) |
|
|
self.r53_zones[name] = id = resp['HostedZone']['Id'] |
|
|
|
|
|
|
|
|
self._r53_zones[name] = id = resp['HostedZone']['Id'] |
|
|
return id |
|
|
return id |
|
|
return None |
|
|
return None |
|
|
|
|
|
|
|
|
|