diff --git a/CHANGELOG.md b/CHANGELOG.md index 405cb00..4d9d72b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## v0.0.4 - 2025-??-?? - ??? + +* Support for `DS` record types + ## v0.0.3 - 2023-02-08 - AKA * Support for `ALIAS` record types diff --git a/octodns_googlecloud/__init__.py b/octodns_googlecloud/__init__.py index e921f04..5d5e331 100644 --- a/octodns_googlecloud/__init__.py +++ b/octodns_googlecloud/__init__.py @@ -46,6 +46,7 @@ class GoogleCloudProvider(BaseProvider): 'ALIAS', 'CAA', 'CNAME', + 'DS', 'MX', 'NAPTR', 'NS', @@ -293,6 +294,19 @@ def _data_for_CAA(self, gcloud_record): def _data_for_CNAME(self, gcloud_record): return {'value': gcloud_record.rrdatas[0]} + def _data_for_DS(self, gcloud_record): + return { + 'values': [ + { + 'key_tag': v[0], + 'algorithm': v[1], + 'digest_type': v[2], + 'digest': v[3], + } + for v in [shlex.split(g) for g in gcloud_record.rrdatas] + ] + } + def _data_for_MX(self, gcloud_record): return { 'values': [ @@ -367,6 +381,17 @@ def _rrset_for_CNAME(self, gcloud_zone, record): record.fqdn, record._type, record.ttl, [record.value] ) + def _rrset_for_DS(self, gcloud_zone, record): + return gcloud_zone.resource_record_set( + record.fqdn, + record._type, + record.ttl, + [ + f'{v.key_tag} {v.algorithm} {v.digest_type} {v.digest}' + for v in record.values + ], + ) + def _rrset_for_MX(self, gcloud_zone, record): return gcloud_zone.resource_record_set( record.fqdn, diff --git a/tests/config/unit.tests.yaml b/tests/config/unit.tests.yaml index aa28ee5..0adb1c7 100644 --- a/tests/config/unit.tests.yaml +++ b/tests/config/unit.tests.yaml @@ -76,6 +76,14 @@ dname: ttl: 300 type: DNAME value: unit.tests. +ds: + ttl: 9 + type: DS + value: + key_tag: 0 + algorithm: 1 + digest_type: 2 + digest: abcdef0123456 excluded: octodns: excluded: diff --git a/tests/test_octodns_provider_googlecloud.py b/tests/test_octodns_provider_googlecloud.py index 4575886..aa9cd00 100644 --- a/tests/test_octodns_provider_googlecloud.py +++ b/tests/test_octodns_provider_googlecloud.py @@ -171,6 +171,30 @@ }, ) ) +octo_records.append( + Record.new( + zone, + 'ds', + { + 'ttl': 9, + 'type': 'DS', + 'values': [ + { + 'key_tag': 0, + 'algorithm': 1, + 'digest_type': 2, + 'digest': 'abcdef0123456', + }, + { + 'key_tag': 1, + 'algorithm': 2, + 'digest_type': 3, + 'digest': '0123456abcdef', + }, + ], + }, + ) +) for record in octo_records: zone.add_record(record) @@ -215,6 +239,12 @@ ], ), (u'caa.unit.tests.', u'CAA', 9, [u'0 issue ca.unit.tests']), + ( + u'ds.unit.tests.', + u'DS', + 9, + [u'0 1 2 abcdef0123456', '1 2 3 0123456abcdef'], + ), ]