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:
@@ -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
|
||||
|
Reference in New Issue
Block a user