Browse Source

Add auth config opts to googlecloud provider

Also make _data_for_SPF and _data_for_TXT the same method.
pull/113/head
Petter Hassberg 8 years ago
parent
commit
2a3690e877
2 changed files with 34 additions and 11 deletions
  1. +22
    -10
      octodns/provider/googlecloud.py
  2. +12
    -1
      tests/test_octodns_provider_googlecloud.py

+ 22
- 10
octodns/provider/googlecloud.py View File

@ -96,22 +96,34 @@ class GoogleCloudProvider(BaseProvider):
# specified with the GOOGLE_APPLICATION_CREDENTIALS environment # specified with the GOOGLE_APPLICATION_CREDENTIALS environment
# variable. (https://console.cloud.google.com/apis/credentials) # variable. (https://console.cloud.google.com/apis/credentials)
# #
# The project to work on (not required)
# The project to work on (not required)
# project: foobar # project: foobar
#
# The File with the google credentials (not required). If used, the
# "project" parameter needs to be set, else it will fall back to the
# "default credentials"
# credentials_file: ~/google_cloud_credentials_file.json
#
""" """
SUPPORTS = set(('A', 'AAAA', 'CAA', 'CNAME', 'MX', 'NAPTR', SUPPORTS = set(('A', 'AAAA', 'CAA', 'CNAME', 'MX', 'NAPTR',
'NS', 'PTR', 'SPF', 'SRV', 'TXT')) 'NS', 'PTR', 'SPF', 'SRV', 'TXT'))
SUPPORTS_GEO = False SUPPORTS_GEO = False
def __init__(self, id, project=None, *args, **kwargs):
def __init__(self, id, project=None, credentials_file=None,
*args, **kwargs):
if credentials_file:
self.gcloud_client = dns.Client.from_service_account_json(
credentials_file, project=project)
else:
self.gcloud_client = dns.Client(project=project)
# Logger # Logger
self.log = getLogger('GoogleCloudProvider[{}]'.format(id)) self.log = getLogger('GoogleCloudProvider[{}]'.format(id))
self.id = id self.id = id
super(GoogleCloudProvider, self).__init__(id, *args, **kwargs) super(GoogleCloudProvider, self).__init__(id, *args, **kwargs)
self.gcloud_client = dns.Client(project=project)
def _apply(self, plan): def _apply(self, plan):
"""Required function of manager.py to actually apply a record change. """Required function of manager.py to actually apply a record change.
@ -345,7 +357,12 @@ class GoogleCloudProvider(BaseProvider):
_data_for_PTR = _data_for_CNAME _data_for_PTR = _data_for_CNAME
_data_for_SPF = _data_for_A
def _data_for_SPF(self, gcloud_record):
if len(gcloud_record.rrdatas) > 1:
return {
'values': gcloud_record.rrdatas}
return {
'value': gcloud_record.rrdatas[0]}
def _data_for_SRV(self, gcloud_record): def _data_for_SRV(self, gcloud_record):
return {'values': [{ return {'values': [{
@ -355,9 +372,4 @@ class GoogleCloudProvider(BaseProvider):
'target': v[3]} 'target': v[3]}
for v in [shlex.split(g) for g in gcloud_record.rrdatas]]} for v in [shlex.split(g) for g in gcloud_record.rrdatas]]}
def _data_for_TXT(self, gcloud_record):
if len(gcloud_record.rrdatas) > 1:
return {
'values': gcloud_record.rrdatas}
return {
'value': gcloud_record.rrdatas[0]}
_data_for_TXT = _data_for_SPF

+ 12
- 1
tests/test_octodns_provider_googlecloud.py View File

@ -10,7 +10,7 @@ from octodns.provider.googlecloud import GoogleCloudProvider, \
_GoogleCloudRecordSetMaker _GoogleCloudRecordSetMaker
from octodns.zone import Zone from octodns.zone import Zone
from octodns.provider.base import Plan
from octodns.provider.base import Plan, BaseProvider
from unittest import TestCase from unittest import TestCase
from mock import Mock, patch, PropertyMock from mock import Mock, patch, PropertyMock
@ -216,6 +216,17 @@ class TestGoogleCloudProvider(TestCase):
''' '''
return GoogleCloudProvider(id=1, project="mock") return GoogleCloudProvider(id=1, project="mock")
@patch('octodns.provider.googlecloud.time.sleep')
@patch('octodns.provider.googlecloud.dns')
def test___init__(self, *_):
self.assertIsInstance(GoogleCloudProvider(id=1,
credentials_file="test",
project="unit test"),
BaseProvider)
self.assertIsInstance(GoogleCloudProvider(id=1),
BaseProvider)
@patch('octodns.provider.googlecloud.time.sleep') @patch('octodns.provider.googlecloud.time.sleep')
@patch('octodns.provider.googlecloud.dns') @patch('octodns.provider.googlecloud.dns')
def test__apply(self, *_): def test__apply(self, *_):


Loading…
Cancel
Save