From 14cefa07170cde38c3f58a6984efcd58d04b40e0 Mon Sep 17 00:00:00 2001 From: Christopher Schmidt Date: Fri, 6 Jul 2018 07:49:48 +0200 Subject: [PATCH] added UpdateNew --- provider/exoscale.go | 29 ++++++++++++++++++++++++++++- provider/exoscale_test.go | 14 ++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/provider/exoscale.go b/provider/exoscale.go index 324c73c35..49c6cad68 100644 --- a/provider/exoscale.go +++ b/provider/exoscale.go @@ -15,6 +15,7 @@ type EgoscaleClientI interface { GetDomains() ([]egoscale.DNSDomain, error) CreateRecord(string, egoscale.DNSRecord) (*egoscale.DNSRecord, error) DeleteRecord(string, int64) error + UpdateRecord(string, egoscale.UpdateDNSRecord) (*egoscale.DNSRecord, error) } // ExoscaleProvider initialized as dns provider with no records @@ -96,9 +97,35 @@ func (ep *ExoscaleProvider) ApplyChanges(changes *plan.Changes) error { } } for _, epoint := range changes.UpdateNew { - log.Debugf("UPDATE-NEW (ignored) for epoint: %+v", epoint) + if ep.domain.Match(epoint.DNSName) { + if zoneID, name := ep.filter.EndpointZoneID(epoint, zones); zoneID != 0 { + records, err := ep.client.GetRecords(zones[zoneID]) + if err != nil { + return err + } + for _, r := range records { + if r.Name == name { + rec := egoscale.UpdateDNSRecord{ + ID: r.ID, + DomainID: r.DomainID, + Name: name, + RecordType: epoint.RecordType, + TTL: int(epoint.RecordTTL), + Content: epoint.Targets[0], + Prio: r.Prio, + } + if _, err := ep.client.UpdateRecord(zones[zoneID], rec); err != nil { + return err + } + break + } + } + } + } } for _, epoint := range changes.UpdateOld { + // Since Exoscale "Patches", we ignore UpdateOld + // We leave this logging here for information log.Debugf("UPDATE-OLD (ignored) for epoint: %+v", epoint) } for _, epoint := range changes.Delete { diff --git a/provider/exoscale_test.go b/provider/exoscale_test.go index 3ca3b96db..7e151ddc1 100644 --- a/provider/exoscale_test.go +++ b/provider/exoscale_test.go @@ -36,8 +36,14 @@ type deleteRecordExoscale struct { recordID int64 } +type updateRecordExoscale struct { + name string + updateDNSRecord egoscale.UpdateDNSRecord +} + var createExoscale []createRecordExoscale var deleteExoscale []deleteRecordExoscale +var updateExoscale []updateRecordExoscale type ExoscaleClientStub struct { } @@ -70,6 +76,10 @@ func (ep *ExoscaleClientStub) GetRecords(name string) ([]egoscale.DNSRecord, err return rec, nil } +func (ep *ExoscaleClientStub) UpdateRecord(name string, rec egoscale.UpdateDNSRecord) (*egoscale.DNSRecord, error) { + updateExoscale = append(updateExoscale, updateRecordExoscale{name: name, updateDNSRecord: rec}) + return nil, nil +} func (ep *ExoscaleClientStub) CreateRecord(name string, rec egoscale.DNSRecord) (*egoscale.DNSRecord, error) { createExoscale = append(createExoscale, createRecordExoscale{name: name, rec: rec}) return nil, nil @@ -171,4 +181,8 @@ func TestExoscaleApplyChanges(t *testing.T) { assert.Equal(t, 1, len(deleteExoscale)) assert.Equal(t, "foo.com", deleteExoscale[0].name) assert.Equal(t, int64(1), deleteExoscale[0].recordID) + + assert.Equal(t, 1, len(updateExoscale)) + assert.Equal(t, "foo.com", updateExoscale[0].name) + assert.Equal(t, int64(1), updateExoscale[0].updateDNSRecord.ID) }