added UpdateNew

This commit is contained in:
Christopher Schmidt 2018-07-06 07:49:48 +02:00
parent 635427f528
commit 14cefa0717
2 changed files with 42 additions and 1 deletions

View File

@ -15,6 +15,7 @@ type EgoscaleClientI interface {
GetDomains() ([]egoscale.DNSDomain, error) GetDomains() ([]egoscale.DNSDomain, error)
CreateRecord(string, egoscale.DNSRecord) (*egoscale.DNSRecord, error) CreateRecord(string, egoscale.DNSRecord) (*egoscale.DNSRecord, error)
DeleteRecord(string, int64) error DeleteRecord(string, int64) error
UpdateRecord(string, egoscale.UpdateDNSRecord) (*egoscale.DNSRecord, error)
} }
// ExoscaleProvider initialized as dns provider with no records // 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 { 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 { 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) log.Debugf("UPDATE-OLD (ignored) for epoint: %+v", epoint)
} }
for _, epoint := range changes.Delete { for _, epoint := range changes.Delete {

View File

@ -36,8 +36,14 @@ type deleteRecordExoscale struct {
recordID int64 recordID int64
} }
type updateRecordExoscale struct {
name string
updateDNSRecord egoscale.UpdateDNSRecord
}
var createExoscale []createRecordExoscale var createExoscale []createRecordExoscale
var deleteExoscale []deleteRecordExoscale var deleteExoscale []deleteRecordExoscale
var updateExoscale []updateRecordExoscale
type ExoscaleClientStub struct { type ExoscaleClientStub struct {
} }
@ -70,6 +76,10 @@ func (ep *ExoscaleClientStub) GetRecords(name string) ([]egoscale.DNSRecord, err
return rec, nil 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) { func (ep *ExoscaleClientStub) CreateRecord(name string, rec egoscale.DNSRecord) (*egoscale.DNSRecord, error) {
createExoscale = append(createExoscale, createRecordExoscale{name: name, rec: rec}) createExoscale = append(createExoscale, createRecordExoscale{name: name, rec: rec})
return nil, nil return nil, nil
@ -171,4 +181,8 @@ func TestExoscaleApplyChanges(t *testing.T) {
assert.Equal(t, 1, len(deleteExoscale)) assert.Equal(t, 1, len(deleteExoscale))
assert.Equal(t, "foo.com", deleteExoscale[0].name) assert.Equal(t, "foo.com", deleteExoscale[0].name)
assert.Equal(t, int64(1), deleteExoscale[0].recordID) 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)
} }