[DigitalOcean]: accept multiple records in dns-controller

This commit is contained in:
zak905 2022-03-29 15:46:46 +02:00
parent d6cdcbf371
commit 6ed094fcd2
1 changed files with 18 additions and 11 deletions

View File

@ -185,20 +185,27 @@ func (r *resourceRecordSets) List() ([]dnsprovider.ResourceRecordSet, error) {
return nil, err
}
var rrset *resourceRecordSet
var rrsets []dnsprovider.ResourceRecordSet
rrsetsWithoutDups := make(map[string]*resourceRecordSet)
for _, record := range records {
// digitalocean API returns the record without the zone
// but the consumers of this interface expect the zone to be included
recordName := dns.EnsureDotSuffix(record.Name) + r.Zone().Name()
rrset = &resourceRecordSet{
name: recordName,
data: record.Data,
ttl: record.TTL,
recordType: rrstype.RrsType(record.Type),
if set, ok := rrsetsWithoutDups[recordName]; !ok {
rrsetsWithoutDups[recordName] = &resourceRecordSet{
name: recordName,
data: []string{record.Data},
ttl: record.TTL,
recordType: rrstype.RrsType(record.Type),
}
} else {
set.data = append(set.data, record.Data)
}
}
rrsets = append(rrsets, rrset)
for _, set := range rrsetsWithoutDups {
rrsets = append(rrsets, set)
}
return rrsets, nil
@ -223,13 +230,13 @@ func (r *resourceRecordSets) Get(name string) ([]dnsprovider.ResourceRecordSet,
// New returns an implementation of dnsprovider.ResourceRecordSet
func (r *resourceRecordSets) New(name string, rrdatas []string, ttl int64, rrstype rrstype.RrsType) dnsprovider.ResourceRecordSet {
if len(rrdatas) > 1 {
if len(rrdatas) == 0 {
return nil
}
return &resourceRecordSet{
name: name,
data: rrdatas[0],
data: rrdatas,
ttl: int(ttl),
recordType: rrstype,
}
@ -256,7 +263,7 @@ func (r *resourceRecordSets) Zone() dnsprovider.Zone {
// a single record associated with a zone
type resourceRecordSet struct {
name string
data string
data []string
ttl int
recordType rrstype.RrsType
}
@ -269,7 +276,7 @@ func (r *resourceRecordSet) Name() string {
// Rrdatas returns a list of data associated with a resource record set
// in DO this is almost always the IP of a record
func (r *resourceRecordSet) Rrdatas() []string {
return []string{r.data}
return r.data
}
// Ttl returns the time-to-live of a record