1
0
mirror of https://github.com/github/octodns.git synced 2024-05-11 05:55:00 +00:00

Consolidate googlecloud provider to single class

remove _GoogleCloudRecordSetMaker into the GoogleCloudProvider, and consolidate methods.
This commit is contained in:
Petter Hassberg
2017-10-03 13:25:36 +02:00
parent 2a3690e877
commit 8230700ad1
2 changed files with 72 additions and 110 deletions

View File

@@ -16,76 +16,6 @@ from .base import BaseProvider
from ..record import Record
class _GoogleCloudRecordSetMaker(object):
"""Wrapper to make google cloud client resource record sets from OctoDNS
Records.
googlecloud.py:
class: octodns.provider.googlecloud._GoogleCloudRecordSetMaker
An _GoogleCloudRecordSetMaker creates google cloued client resource
records which can be used to update the Google Cloud DNS zones.
"""
def __init__(self, gcloud_zone, record):
self.gcloud_zone = gcloud_zone
self.record = record
self._record_set_func = getattr(
self, '_record_set_from_{}'.format(record._type))
def get_record_set(self):
return self._record_set_func(self.record)
def _record_set_from_A(self, record):
return self.gcloud_zone.resource_record_set(
record.fqdn, record._type, record.ttl, record.values)
_record_set_from_AAAA = _record_set_from_A
def _record_set_from_CAA(self, record):
return self.gcloud_zone.resource_record_set(
record.fqdn, record._type, record.ttl, [
'{flags} {tag} {value}'.format(**record.data['value'])])
def _record_set_from_CNAME(self, record):
return self.gcloud_zone.resource_record_set(
record.fqdn, record._type, record.ttl, [record.value])
def _record_set_from_MX(self, record):
return self.gcloud_zone.resource_record_set(
record.fqdn, record._type, record.ttl, [
'{preference} {exchange}'.format(**v.data)
for v in record.values])
def _record_set_from_NAPTR(self, record):
return self.gcloud_zone.resource_record_set(
record.fqdn, record._type, record.ttl, [
'{order} {preference} "{flags}" "{service}" '
'"{regexp}" {replacement}'
.format(**v.data) for v in record.values])
_record_set_from_NS = _record_set_from_A
_record_set_from_PTR = _record_set_from_CNAME
_record_set_from_SPF = _record_set_from_A
def _record_set_from_SRV(self, record):
return self.gcloud_zone.resource_record_set(
record.fqdn, record._type, record.ttl, [
'{priority} {weight} {port} {target}'
.format(**v.data) for v in record.values])
def _record_set_from_TXT(self, record):
if 'values' in record.data:
val = record.data['values']
else:
val = [record.data['value']]
return self.gcloud_zone.resource_record_set(
record.fqdn, record._type, record.ttl, val)
class GoogleCloudProvider(BaseProvider):
"""
Google Cloud DNS provider
@@ -146,17 +76,20 @@ class GoogleCloudProvider(BaseProvider):
for change in changes:
class_name = change.__class__.__name__
_rrset_func = getattr(
self, '_rrset_for_{}'.format(change.record._type))
if class_name in 'Create':
gcloud_changes.add_record_set(
self._record_to_record_set(gcloud_zone, change.record))
_rrset_func(gcloud_zone, change.record))
elif class_name == 'Delete':
gcloud_changes.delete_record_set(
self._record_to_record_set(gcloud_zone, change.record))
_rrset_func(gcloud_zone, change.record))
elif class_name == 'Update':
gcloud_changes.delete_record_set(
self._record_to_record_set(gcloud_zone, change.existing))
_rrset_func(gcloud_zone, change.existing))
gcloud_changes.add_record_set(
self._record_to_record_set(gcloud_zone, change.new))
_rrset_func(gcloud_zone, change.new))
else:
raise RuntimeError('Change type "{}" for change "{!s}" '
'is none of "Create", "Delete" or "Update'
@@ -260,20 +193,6 @@ class GoogleCloudProvider(BaseProvider):
if create:
return self._create_gcloud_zone(dns_name)
@staticmethod
def _record_to_record_set(gcloud_zone, record):
"""create google.cloud.dns.ResourceRecordSet from ocdodns.Record
:param record: a record object
:type record: ocdodns.Record
:param gcloud_zone: a google gcloud zone
:type gcloud_zone: google.cloud.dns.ManagedZone
:type return: google.cloud.dns.ResourceRecordSet
"""
grm = _GoogleCloudRecordSetMaker(gcloud_zone, record)
return grm.get_record_set()
def populate(self, zone, target=False, lenient=False):
"""Required function of manager.py to collect records from zone.
@@ -373,3 +292,52 @@ class GoogleCloudProvider(BaseProvider):
for v in [shlex.split(g) for g in gcloud_record.rrdatas]]}
_data_for_TXT = _data_for_SPF
def _rrset_for_A(self, gcloud_zone, record):
return gcloud_zone.resource_record_set(
record.fqdn, record._type, record.ttl, record.values)
_rrset_for_AAAA = _rrset_for_A
def _rrset_for_CAA(self, gcloud_zone, record):
return gcloud_zone.resource_record_set(
record.fqdn, record._type, record.ttl, [
'{flags} {tag} {value}'.format(**record.data['value'])])
def _rrset_for_CNAME(self, gcloud_zone, record):
return gcloud_zone.resource_record_set(
record.fqdn, record._type, record.ttl, [record.value])
def _rrset_for_MX(self, gcloud_zone, record):
return gcloud_zone.resource_record_set(
record.fqdn, record._type, record.ttl, [
'{preference} {exchange}'.format(**v.data)
for v in record.values])
def _rrset_for_NAPTR(self, gcloud_zone, record):
return gcloud_zone.resource_record_set(
record.fqdn, record._type, record.ttl, [
'{order} {preference} "{flags}" "{service}" '
'"{regexp}" {replacement}'
.format(**v.data) for v in record.values])
_rrset_for_NS = _rrset_for_A
_rrset_for_PTR = _rrset_for_CNAME
def _rrset_for_SPF(self, gcloud_zone, record):
if 'values' in record.data:
val = record.data['values']
else:
val = [record.data['value']]
return gcloud_zone.resource_record_set(
record.fqdn, record._type, record.ttl, val)
def _rrset_for_SRV(self, gcloud_zone, record):
return gcloud_zone.resource_record_set(
record.fqdn, record._type, record.ttl, [
'{priority} {weight} {port} {target}'
.format(**v.data) for v in record.values])
_rrset_for_TXT = _rrset_for_SPF