From 8989032e8544b7f61cbff44abaef6984e176c951 Mon Sep 17 00:00:00 2001 From: James Bowes Date: Tue, 27 Feb 2018 09:26:02 -0400 Subject: [PATCH] Add custom TTL support for DNSimple (#477) * Add custom TTL support for DNSimple * chore: add changelog entry --- CHANGELOG.md | 1 + provider/dnsimple.go | 10 +++++++++- provider/dnsimple_test.go | 20 ++++++++++++++++++-- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 06b678fe0..66015e361 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,4 @@ + - Add custom TTL support for DNSimple (#477) @jbowes - Fix docker build and delete vendor files which were not deleted (#473) @njuettner - DigitalOcean: DigitalOcean creates entries with host in them twice (#459) @njuettner - Bugfix: Retrive all DNSimple response pages (#468) @jbowes diff --git a/provider/dnsimple.go b/provider/dnsimple.go index f5ecc2ed2..7851545e7 100644 --- a/provider/dnsimple.go +++ b/provider/dnsimple.go @@ -28,6 +28,8 @@ import ( log "github.com/sirupsen/logrus" ) +const dnsimpleRecordTTL = 3600 // Default TTL of 1 hour if not set (DNSimple's default) + type identityService struct { service *dnsimple.IdentityService } @@ -174,7 +176,7 @@ func (p *dnsimpleProvider) Records() (endpoints []*endpoint.Endpoint, _ error) { default: continue } - endpoints = append(endpoints, endpoint.NewEndpoint(record.Name+"."+record.ZoneID, record.Content, record.Type)) + endpoints = append(endpoints, endpoint.NewEndpointWithTTL(record.Name+"."+record.ZoneID, record.Content, record.Type, endpoint.TTL(record.TTL))) } page++ if page > records.Pagination.TotalPages { @@ -187,12 +189,18 @@ func (p *dnsimpleProvider) Records() (endpoints []*endpoint.Endpoint, _ error) { // newDnsimpleChange initializes a new change to dns records func newDnsimpleChange(action string, e *endpoint.Endpoint) *dnsimpleChange { + ttl := dnsimpleRecordTTL + if e.RecordTTL.IsConfigured() { + ttl = int(e.RecordTTL) + } + change := &dnsimpleChange{ Action: action, ResourceRecordSet: dnsimple.ZoneRecord{ Name: e.DNSName, Type: e.RecordType, Content: e.Targets[0], + TTL: ttl, }, } return change diff --git a/provider/dnsimple_test.go b/provider/dnsimple_test.go index 69e8f793a..6ce817dd2 100644 --- a/provider/dnsimple_test.go +++ b/provider/dnsimple_test.go @@ -74,7 +74,18 @@ func TestDnsimpleServices(t *testing.T) { Priority: 0, Type: "A", } - records := []dnsimple.ZoneRecord{firstRecord, secondRecord} + thirdRecord := dnsimple.ZoneRecord{ + ID: 3, + ZoneID: "example.com", + ParentID: 0, + Name: "custom-ttl", + Content: "target", + TTL: 60, + Priority: 0, + Type: "CNAME", + } + + records := []dnsimple.ZoneRecord{firstRecord, secondRecord, thirdRecord} dnsimpleListRecordsResponse = dnsimple.ZoneRecordsResponse{ Response: dnsimple.Response{Pagination: &dnsimple.Pagination{}}, Data: records, @@ -92,6 +103,7 @@ func TestDnsimpleServices(t *testing.T) { Name: record.Name, Type: record.Type, Content: record.Content, + TTL: record.TTL, } dnsimpleRecordResponse := dnsimple.ZoneRecordsResponse{ @@ -103,6 +115,7 @@ func TestDnsimpleServices(t *testing.T) { mockDNS.On("CreateRecord", "1", record.ZoneID, simpleRecord).Return(&dnsimple.ZoneRecordResponse{}, nil) mockDNS.On("DeleteRecord", "1", record.ZoneID, record.ID).Return(&dnsimple.ZoneRecordResponse{}, nil) mockDNS.On("UpdateRecord", "1", record.ZoneID, record.ID, simpleRecord).Return(&dnsimple.ZoneRecordResponse{}, nil) + mockDNS.On("UpdateRecord", "1", record.ZoneID, record.ID, simpleRecord).Return(&dnsimple.ZoneRecordResponse{}, nil) } mockProvider = dnsimpleProvider{client: mockDNS} @@ -138,7 +151,10 @@ func testDnsimpleProviderRecords(t *testing.T) { } func testDnsimpleProviderApplyChanges(t *testing.T) { changes := &plan.Changes{} - changes.Create = []*endpoint.Endpoint{{DNSName: "example.example.com", Targets: endpoint.Targets{"target"}, RecordType: endpoint.RecordTypeCNAME}} + changes.Create = []*endpoint.Endpoint{ + {DNSName: "example.example.com", Targets: endpoint.Targets{"target"}, RecordType: endpoint.RecordTypeCNAME}, + {DNSName: "custom-ttl.example.com", RecordTTL: 60, Targets: endpoint.Targets{"target"}, RecordType: endpoint.RecordTypeCNAME}, + } changes.Delete = []*endpoint.Endpoint{{DNSName: "example-beta.example.com", Targets: endpoint.Targets{"127.0.0.1"}, RecordType: endpoint.RecordTypeA}} changes.UpdateNew = []*endpoint.Endpoint{{DNSName: "example.example.com", Targets: endpoint.Targets{"target"}, RecordType: endpoint.RecordTypeCNAME}}