diff --git a/octodns/provider/googlecloud.py b/octodns/provider/googlecloud.py index 0f20587..103c3f5 100644 --- a/octodns/provider/googlecloud.py +++ b/octodns/provider/googlecloud.py @@ -79,7 +79,7 @@ class GoogleCloudProvider(BaseProvider): _rrset_func = getattr( self, '_rrset_for_{}'.format(change.record._type)) - if class_name in 'Create': + if class_name == 'Create': gcloud_changes.add_record_set( _rrset_func(gcloud_zone, change.record)) elif class_name == 'Delete': @@ -212,17 +212,16 @@ class GoogleCloudProvider(BaseProvider): gcloud_zone = self._get_gcloud_zone(zone.name) - _records = set() if gcloud_zone: for gcloud_record in self._get_gcloud_records(gcloud_zone): - if gcloud_record.record_type.upper() in self.SUPPORTS: - _records.add(gcloud_record) - for gcloud_record in _records: + if gcloud_record.record_type.upper() not in self.SUPPORTS: + continue + record_name = gcloud_record.name if record_name.endswith(zone.name): # google cloud always return fqdn. Make relative record # here. "root" records will then get the '' record_name, - # which is also the way dyn likes it. + # which is also the way octodns likes it. record_name = record_name[:-(len(zone.name) + 1)] typ = gcloud_record.record_type.upper() data = getattr(self, '_data_for_{}'.format(typ)) @@ -302,7 +301,8 @@ class GoogleCloudProvider(BaseProvider): 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'])]) + '{} {} {}'.format(v.flags, v.tag, v.value) + for v in record.values]) def _rrset_for_CNAME(self, gcloud_zone, record): return gcloud_zone.resource_record_set( @@ -311,33 +311,29 @@ class GoogleCloudProvider(BaseProvider): 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) + '{} {}'.format(v.preference, v.exchange) 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]) + '{} {} "{}" "{}" "{}" {}'.format( + v.order, v.preference, v.flags, v.service, + v.regexp, v.replacement) 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) + record.fqdn, record._type, record.ttl, record.values) 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]) + '{} {} {} {}' + .format(v.priority, v.weight, v.port, v.target) + for v in record.values]) _rrset_for_TXT = _rrset_for_SPF diff --git a/script/coverage b/script/coverage index ca5d693..228a772 100755 --- a/script/coverage +++ b/script/coverage @@ -24,6 +24,7 @@ export DNSIMPLE_TOKEN= export DYN_CUSTOMER= export DYN_PASSWORD= export DYN_USERNAME= +export GOOGLE_APPLICATION_CREDENTIALS= coverage run --branch --source=octodns `which nosetests` --with-xunit "$@" coverage html diff --git a/tests/test_octodns_provider_googlecloud.py b/tests/test_octodns_provider_googlecloud.py index 76eedba..b498d4c 100644 --- a/tests/test_octodns_provider_googlecloud.py +++ b/tests/test_octodns_provider_googlecloud.py @@ -313,8 +313,11 @@ class TestGoogleCloudProvider(TestCase): if not page_token: return DummyIterator([ DummyGoogleCloudZone('example.com.'), + ], page_token="MOCK_PAGE_TOKEN") + elif page_token == "MOCK_PAGE_TOKEN": + return DummyIterator([ DummyGoogleCloudZone('example2.com.'), - ], page_token="DUMMY_PAGE_TOKEN") + ], page_token="MOCK_PAGE_TOKEN2") return DummyIterator([ google_cloud_zone @@ -324,7 +327,12 @@ class TestGoogleCloudProvider(TestCase): if not page_token: return DummyIterator( [DummyResourceRecordSet(*v) for v in - resource_record_sets[:5]], page_token="DUMMY_PAGE_TOKEN") + resource_record_sets[:3]], page_token="MOCK_PAGE_TOKEN") + elif page_token == "MOCK_PAGE_TOKEN": + + return DummyIterator( + [DummyResourceRecordSet(*v) for v in + resource_record_sets[3:5]], page_token="MOCK_PAGE_TOKEN2") return DummyIterator( [DummyResourceRecordSet(*v) for v in resource_record_sets[5:]])